我希望该文件夹将显示在
git status
中,以便我现在可以将该文件夹添加到索引中。例如,我有一个带有
node_modules
的文件夹。 我希望该文件夹出现在我的所有提交中(我知道大多数人喜欢.gitignore node_modules
文件夹)。 但是当我移动到其他提交或切换到其他分支时,我希望git
不会触及node_modules
文件夹。这是可能的吗?
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
位),则必须修改sparse-checkout
文件,仅包含/*
- 即“包括所有路径”,并使用git read-tree
更新您的工作目录:
echo "/*" > .git/info/sparse-checkout
git read-tree -mu HEAD
git config core.sparseCheckout false
为启用稀疏检出并检出除名为unwanted
的目录或文件之外的所有内容:
git sparse-checkout set --no-cone '/*' '!unwanted'
禁用稀疏检出并检出所有内容:
git sparse-checkout disable
我从我想要检出的分支中检出了整个代码
# assume we want the `components` 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 components from my-branch :| )
# delete ./components
rm -rf ./components
# replace it with the one on my-branch :)
git checkout my-branch -- ./components
祝你好运...
与 read-tree
稀疏检出 命令相比,git sparse-checkout
命令在锥形模式下提供了一种替代方法(此处介绍)
在 Git 2.34 (Q4 2021) 版本中,在锥形模式下,稀疏索引代码路径学会了删除稀疏锥形外的被忽略文件(如构建产物),允许删除整个稀疏锥形外的目录。这在稀疏模式更改时特别有用。
请查看 commit 716f68e(2021年8月10日)由Junio C Hamano (gitster
)提交。
请查看 commit 55dfcf9, commit ce7a9f0, commit 77efbb3, commit 02155c8, commit 8a96b9d, commit 5dc1675, commit 72d84ea, commit e27eab4, commit 522d3ce(2021年9月8日)由Derrick Stolee (derrickstolee
)提交。
(由Junio C Hamano -- gitster
--合并于commit dc89c34,2021年9月20日)
sparse-checkout
:清除被追踪的稀疏目录签名作者:Derrick Stolee
审核作者:Elijah Newren
git sparse-checkout
现在在其手册页面中包含以下内容:
在锥形模式下更改稀疏检出模式时,Git将检查每个未在稀疏检出锥内的已跟踪目录,以查看它是否包含任何未跟踪的文件。如果所有这些文件都由于
.gitignore
模式而被忽略,则该目录将被删除。
如果该目录中有任何未跟踪的文件未被忽略,则该目录内不会发生任何删除操作,并显示警告消息。如果这些文件很重要,请重置您的稀疏检出定义以包括它们,使用git add
和git commit
将它们存储,然后手动删除任何剩余文件,以确保Git能够以最佳方式运行。
sparse-checkout
文件中删除了node_modules
,我是否可以正常返回过去,并查看它过去包含的内容?(我阅读了您发送的链接,但我不明白skip-worktree bit
是什么意思...) - Aminadav Glickshteinnode_modules
目录并禁用稀疏检出。 - Enrico Campidoglioecho
命令,也许应该使用单引号?我不确定是要责怪 ZSH、Ember 还是它们的组合,但是即使我执行echo "/*\n!node_modules"
,我的 shell 扩展结果也会变成echo "/*\nnode_modules/.bin/ember -v"
。 - ken