2010-11-06 36 views
115

我有一個非常大的數字文件,這些文件需要時間來結賬的倉庫工作。我期待到是否會混帳用這種現在倉庫的,它支持稀疏檢出,但我能找到每一個例子很好地工作的可能性將執行以下操作:是否有可能做一個稀疏檢出沒有檢查出了整個倉庫?

git clone <path> 
git config core.sparsecheckout true 
echo <dir> > .git/info/sparse-checkout 
git read-tree -m -u HEAD 

用如下的命令序列的問題是原始的克隆也做結賬。如果-n添加到原來的克隆命令,然後在下面的錯誤讀樹命令的結果:

錯誤:稀疏結帳離開沒有條目上的工作目錄

如何才能做到稀疏檢出不檢出所有的文件第一?

+3

可能重複[有什麼辦法克隆git倉庫的子目錄嗎?](http://stackoverflow.com/questions/600079/is-there-any-way-to-clone- A-子目錄只混帳repositorys) – Chronial 2013-02-05 10:18:42

+0

注:'混帳worktree添加--no-checkout'將工作與GIT 2.9(只需2016太(不只是'混帳克隆--no-checkout'))。請參閱[我的答案](http://stackoverflow.com/a/36615363/6309) – VonC 2016-04-14 06:31:27

回答

106

試試這個:

mkdir myrepo 
cd myrepo 
git init 
git config core.sparseCheckout true 
git remote add -f origin git://... 
echo "path/within_repo/to/desired_subdir/*" > .git/info/sparse-checkout 
git checkout [branchname] # ex: master 

現在你會發現,你有從路徑/ within_repo僅文件「修剪」結賬/到/ desired_subdir存在(並在該路徑)。

注意,在Windows命令行你不能引用路徑,即你必須改變這一個6號命令:

echo path/within_repo/to/desired_subdir/* > .git/info/sparse-checkout 

如果你沒有,你會得到的報價稀疏檢出文件,它不會工作

+0

請注意,即使在Windows上也需要正斜槓(其git回購中心)。所以path/to/subdir/* NOT path \ to \ subdir \ * – 2012-09-25 20:10:18

+0

在我第一次不工作的經驗中,我使用了'echo path/to/subdir/* >> .git/info/sparse-checkout',note我沒有使用單引號引用該路徑,'*'後面有一個額外的空格,這就是爲什麼它不起作用,手動刪除稀疏結帳中的空間解決了問題。順便說一句,我在Windows上。 – wangzq 2013-01-08 00:06:11

+3

我不能使用命令「git checkout [branchname]」(也發現錯誤:稀疏結帳在工作目錄上沒有條目)。我使用過「git pull origin master」並且它正常工作。 – Natty 2013-09-03 07:15:05

3

我是新來的git但似乎如果我爲每個目錄做git的結帳,然後它工作。此外,稀疏檢出文件需要在每個目錄之後有一個尾隨斜線,如圖所示。有人更多的經驗,請確認這將工作。

有趣的是,如果你在稀疏結帳結帳目錄而不是文件,似乎沒有什麼區別。它們不會以git狀態顯示,並且git read-tree -m -u HEAD不會導致它被刪除。 git reset --hard不會導致目錄被刪除。任何人都更有經驗的護理對已簽出的,但它是不是在稀疏結賬文件目錄的認爲什麼混帳對此有何評論?

27

Git克隆有一個選項(--no-checkout-n),可以做你想做的。

在你的命令的列表中,只是改變:

git clone <path> 

要這樣:

git clone --no-checkout <path> 

然後可以使用稀疏結賬如問題陳述。

+4

是的,它沒有做結帳,但仍然提取下載整個回購記錄 – 2015-10-28 20:40:40

+4

@JasonS問題是關於不做結賬。如果你不想讓整個歷史使用git clone上的'--depth '選項。這隻會從歷史記錄中下載最後的''提交。目前沒有辦法用git部分下載單個提交,但如果你的遠程支持,你可以使用'git archive --remote'來下載部分文件。 – onionjake 2016-02-10 16:53:29

6

可悲的是沒有爲我工作上面,所以我花了很長時間試圖sparse-checkout文件的不同組合。

在我的情況下,我想用IntelliJ IDEA配置跳過文件夾。

這裏是我做過什麼:


運行git clone https://github.com/myaccount/myrepo.git --no-checkout

運行git config core.sparsecheckout true

創建.git\info\sparse-checkout與以下內容

!.idea/* 
!.idea_modules/* 
/* 

運行 'git的結帳 - ' 來獲得全部文件。


關鍵的東西,使其工作是後文件夾的名稱添加/*

我讓Git 1.9

+0

它的工作原理。我有git 1.7.1 – tangxinfa 2015-08-26 10:00:58

+3

不,它仍然下載所有提交和所有文件,git 2.3.2 – Tyguy7 2015-09-18 22:00:50

+4

稀疏檢出僅影響工作樹。它們不會影響存儲庫大小或獲取的內容。如果你想要的話,你需要不同的選擇。 – Miral 2015-12-11 05:13:09

8

我發現我是從pavek早些時候發佈的一行代碼(謝謝!)尋找答案,所以我想提供在上Linux中運行一個回覆一個完整的答案(GIT 1.7.1):

1--> mkdir myrepo 
2--> cd myrepo 
3--> git init 
4--> git config core.sparseCheckout true 
5--> echo 'path/to/subdir/' > .git/info/sparse-checkout 
6--> git remote add -f origin ssh://... 
7--> git pull origin master 

我改變了命令的位的順序,但似乎並沒有產生任何影響。關鍵是結尾的斜線「/」的路徑的步驟結束5.

+3

您確定這是您想要的嗎? -f表示獲取所有數據,但您仍然可以獲得所有您不想要的信息,並且速度很慢。 (這仍然是「檢查整個存儲庫」) – Shuman 2016-03-05 22:45:14

+1

我在Windows上面的步驟嘗試,但備用結帳不起作用的命令提示符,所以我嘗試了Git Bash shell,它的工作!命令提示符能夠執行所有的git命令,比如push,pull等,但是當涉及到稀疏檢查時,它會失敗。 – user593029 2016-04-06 18:39:43

+0

如何只做子目錄的文件。我只想獲取特定子目錄內的文件。 – 2016-09-03 04:44:22

3

GIT中2.9(2016年6月)的存在將概括這允許作品與multiple working trees for one repo--no-checkout選項git worktree add(命令)

通過Ray Zhang (OneRaynyDay)commit ef2a0ac(2016年3月29日)。
的幫助下,通過:Eric Sunshine (sunshineco)Junio C Hamano (gitster)
(由Junio C Hamano -- gitster --commit 0d8683c合併,2016年4月13日)

git worktree man page現在包括:

--[no-]checkout: 

By default, add checks out <branch> , however, --no-checkout can be used to suppress checkout in order to make customizations, such as configuring sparse-checkout.

0

是,稀疏結賬下載整個東西 從git的下載文件夾中。上述方法都沒有爲我工作。要立即下載僅從https://github.com/gearvrf/GearVRf-Demos這裏一個樣本是我做的..

  1. Windows用戶下載並安裝SlikSvn_x84,添加這個 「C:\ Program Files文件(x86)的\ SlikSvn \ BIN」 到Path環境變量。 MAC用戶使用替代svn客戶端。

  2. 使用命令行:svn export https://github.com/foobar/Test.git/trunk/foo

通知URL格式:

基本URL是https://github.com/ /樹幹在端

實施例所附:svn export https://github.com/gearvrf/GearVRf-Demos.git/trunk/gvr-renderableview

我希望這會幫助某人。裁判:https://stackoverflow.com/a/18324458/5710872

7

我也有類似的用例,除了我只想籤提交的標籤和修剪的目錄。使用--depth 1使它真的很稀疏,可以真的加快速度。

mkdir myrepo 
cd myrepo 
git init 
git config core.sparseCheckout true 
git remote add origin <url> # Note: no -f option 
echo "path/within_repo/to/subdir/" > .git/info/sparse-checkout 
git fetch --depth 1 origin tag <tagname> 
git checkout <tagname> 
+2

- 深度1被稱爲淺層克隆,僅供參考。 – 2017-06-01 07:02:29

相關問題