dev*_*ium 5 git version-control git-worktree
我正在研究 git 的“新”worktree功能,因为它似乎非常适合我经常面临的问题:需要同时在多个分支中工作(其中一些分支是短暂的,而另一些分支却是长期存在的)。
我通常需要在 上工作几个小时release_a branch,然后修复一些东西release_x branch,然后再修复一点release_h branch。由于我很懒,我最终所做的是使用 Intellij 设置 git 存储库的多个副本,因此我不需要不断地在这里或那里切换分支。
当我听说 git 的worktree命令时,我认为这正是我所寻找的——一种让单个存储库拥有多个工作目录的方法。作为一个很大的优点,这意味着每次我在分支上更改某些内容时,我实际上不再需要仅仅为了让另一个分支拉动它而推送东西(例如,对于修补程序)。我可以在本地合并它们。
我对 git 的理解worktree正确吗?
我一直在玩它,但我无法真正理解它是如何实现我的目的的。似乎默认情况下它会在其根文件夹上创建工作树,但如果我这样做,git add .这些相同的文件夹将包含在提交中。
这就是我为已经存在的分支创建工作树的方式my_branch(假设我当前是 @ master):
git worktree add my_branch my_branch
Run Code Online (Sandbox Code Playgroud)
所以我的问题有两个:
谢谢
\n\n作为一个很大的优点,这意味着每次我在分支上更改某些内容时,我实际上不再需要仅仅为了让另一个分支拉动它而推送东西(例如,对于修补程序)。我可以在本地合并它们。
\n
您已经可以在本地合并分支:您只需先签出目标分支即可。
\n如果您有同一存储库的多个本地检出文件夹,是的,您需要在它们之间推/拉。
使用git worktree,您不需要签出目标分支(以进行合并),也不需要推送到同一存储库的另一个签出文件夹,您需要这样做(在已经签出的位置)cd /path/to/destination/branch。
这个想法是:
\n/path/to/your/repo(像 master 这样的一个分支已签出)/path/to/your/Branch1(在存储库之外git worktree,但通过文本符号链接机制链接回存储库)/path/to/your/Branch2, ...等等。那么文档就很清楚了:
\n\n\n当您使用完链接的工作树后,您只需将其删除即可。
\n存储库中的工作树\xe2\x80\x99s 管理文件(请参阅下面的“详细信息”)最终将被自动删除(请参阅
\ngc.worktreePruneExpire参考资料git-config)。
\n或者您可以在主工作树或任何链接的工作树中运行git worktree prune以清理任何过时的管理文件。