我想结账到其他分支或以前的提交,但我想保留一个文件夹相同的文件(不签出文件夹)。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