2015-11-26 114 views
8

我想結賬到其他分支或以前的提交,但我想保留一個文件夾相同的文件(不簽出文件夾)。GIT checkout除了一個文件夾

我希望該文件夾將顯示在git status中,所以我現在可以將此文件夾添加到索引。

例如,我有一個文件夾node_modules。我希望文件夾在我的所有提交中(我知道大多數人喜歡.gitignore node_modules文件夾)。但是當我移動到其他提交或檢查其他分支時,我希望git不會觸及node_modules文件夾。

可能嗎?

回答

14

您可以使用sparse checkout從工作樹中排除node_modules目錄中的已提交內容。正如文檔所述:

「稀疏結帳」允許稀疏地填充工作目錄。它使用skip-worktree位來告訴Git工作目錄中的文件是否值得關注。

以下是您的使用方法。首先,您啓用sparseCheckout選項:

git config core.sparseCheckout true 

然後,在.git/info/sparse-checkout文件中添加node_modules路徑作爲否定

echo -e "/*\n!node_modules" >> .git/info/sparse-checkout 

這將創建一個名爲sparse-checkout包含:

/* 
!node_modules 

其中有效的意思是忽略node_modules目錄當讀取提交的樹進入工作目錄

如果以後想再次包括node_modules目錄(即刪除其文件的skip-worktree bit),你必須修改sparse-checkout文件只包含/* - 那就是「包括所有路徑」 - 和更新使用git read-tree工作目錄:

echo "/*" > .git/info/sparse-checkout 
git read-tree -mu HEAD 

然後可以完全通過設置它的配置變量false禁用稀疏結帳:

git config core.sparseCheckout false 

請注意sparse checkout最初是在Git 1.7.0中引入的。

+0

謝謝!只是爲了確認。如果有一天,我會從'sparse-checkout'文件中刪除'node_modules',我通常可以回到過去,看看它過去包含了什麼? (我讀了你發送的鏈接,但我不明白這是什麼意思'skip-worktree bit' ... – Aminadav

+0

是的,你可以。我更新了我的答案,包括如何重新引入'node_modules'目錄和禁用稀疏結帳。 –

+0

非常有趣。我將不得不檢查它(而不是git checkout),我需要測試它:) – Aminadav

相關問題