2013-01-14 306 views
14

我試圖在wordpress安裝上測試一些東西。這樣做,我想快速複製回購。然而,上傳目錄(wp-content/uploads)很大,所以我想忽略它。git克隆,忽略目錄

注意:我不想一直爲這個目錄設置.gitignore這個目錄,只是爲了這個場景。

基本上,我想要一個像這樣的僞碼的命令:git clone --ignore wp-content/uploads

將該目錄添加到.gitignore,clone,然後恢復.gitignore的最佳方式是?還是有更好的方法?

+0

這個問題的答案說,你不能用一個選項來克隆至少:http://stackoverflow.com/questions/4257622/clone-of-git-repository-excluding-subdirectory – Michael

+0

@邁克爾我很好,沒有使用'clone'。我會看看這個問題/答案。謝謝! – hookedonwinter

回答

5

git clone將始終克隆完整存儲庫*,包括所有以前提交到存儲庫的提交。因此,即使您暫時刪除這些文件,然後克隆它,您仍然會收到包含這些文件的舊版本。

此外,僅編輯.gitignore將不會從存儲庫中刪除跟蹤的文件,即使它們通常會被忽略。

所以不,在克隆過程中不可能跳過某個文件夾。

*可以限制克隆期間檢索的提交量,但這不會使存儲庫非常有用。

3

您可以指定要克隆的深度(--depth=1只能獲得1次提交)。您可能想要設置一個缺少此目錄的分支,然後僅克隆一個深度的分支。由於git是基於快照的,克隆時排除部分提交併不容易。這是最接近你想要的。

如果您完全控制此回購,您可能需要製作此目錄的子模塊,並且只在您想要管理該部件時進行子模塊更新。

2

在服務器上:

git checkout master^0 # the ^0 checks out the commit itself, not the branch 
git filter-branch --tree-filter 'git rm -r wp-content/uploads' HEAD 
git checkout -b filtered 

然後,您想要的位置(上一個大項目過濾分支在約2-3每秒提交這裏生成新的歷史),

git init 
git remote add gimme your://repo/path 
git fetch gimme filtered 

編輯:根據http://git-scm.com/docs/git-filter-branch修復語法錯誤

5

晚會有點晚,但是:你不想要一個稀疏的結帳嗎?在列出所需的子樹

git config core.sparsecheckout true 

配置稀疏結帳:

mkdir <repo> && cd <repo> 
git init 
git remote add –f <name> <url> 

啓用稀疏結帳。混帳/信息/疏結賬:從遠程

echo some/dir/ >> .git/info/sparse-checkout 
echo another/sub/tree >> .git/info/sparse-checkout 

結帳:

git pull <remote> <branch> 

更多信息,請參見http://jasonkarns.com/blog/subdirectory-checkouts-with-git-sparse-checkout/

+0

即使只將指定的目錄/文件簽出到本地沙箱中,仍會提取所有內容。 –