我想要结帐到其他分支或之前的提交,但我想保留一个文件夹相同的文件(不检查文件夹)。
我希望该文件夹将显示在git status
中,因此我现在可以将此文件夹添加到索引中。
例如,我有一个node_modules
的文件夹。我希望文件夹在我的所有提交中(我知道大多数人更喜欢.gitignore node_modules
文件夹)。但是当我转到其他提交或检查其他分支时,我希望git
不会触及node_modules
文件夹。
有可能吗?
答案 0 :(得分:23)
您可以使用sparse checkout从工作树中排除node_modules
目录的已提交内容。正如文档所说:
“Sparse checkout”允许稀疏地填充工作目录。它使用
skip-worktree
位告诉Git工作目录中的文件是否值得查看。
以下是您使用它的方式。首先,启用sparseCheckout
选项:
git config core.sparseCheckout true
然后,您在node_modules
文件中添加.git/info/sparse-checkout
路径作为否定:
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。
答案 1 :(得分:0)
我从要检出的分支中检出了全部代码
# assume we want the node_modules folder on my-branch to follow us
# first checkout your code to (my-new-branch) for ex.
git checkout -b my-new-branch
# now i'm on my-new-branch (but it doesn't have the node_modules from my-branch :| )
#delete ./node_modules
rm -rf ./node_modules
# replace it with the one on my-branch :)
git checkout my-branch -- ./node_modules
祝你好运...