我想結賬到其他分支或以前的提交,但我想保留一個文件夾相同的文件(不簽出文件夾)。GIT checkout除了一個文件夾
我希望該文件夾將顯示在git status
中,所以我現在可以將此文件夾添加到索引。
例如,我有一個文件夾node_modules
。我希望文件夾在我的所有提交中(我知道大多數人喜歡.gitignore node_modules
文件夾)。但是當我移動到其他提交或檢查其他分支時,我希望git
不會觸及node_modules
文件夾。
可能嗎?
我想結賬到其他分支或以前的提交,但我想保留一個文件夾相同的文件(不簽出文件夾)。GIT checkout除了一個文件夾
我希望該文件夾將顯示在git status
中,所以我現在可以將此文件夾添加到索引。
例如,我有一個文件夾node_modules
。我希望文件夾在我的所有提交中(我知道大多數人喜歡.gitignore node_modules
文件夾)。但是當我移動到其他提交或檢查其他分支時,我希望git
不會觸及node_modules
文件夾。
可能嗎?
您可以使用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中引入的。
謝謝!只是爲了確認。如果有一天,我會從'sparse-checkout'文件中刪除'node_modules',我通常可以回到過去,看看它過去包含了什麼? (我讀了你發送的鏈接,但我不明白這是什麼意思'skip-worktree bit' ... – Aminadav
是的,你可以。我更新了我的答案,包括如何重新引入'node_modules'目錄和禁用稀疏結帳。 –
非常有趣。我將不得不檢查它(而不是git checkout),我需要測試它:) – Aminadav