我正在研究git的“新”worktree
功能,因为它似乎非常适合我通常面临的问题:需要同时在多个分支中工作(其中一些是短暂的,而另一些则是真的长寿命)。
我通常需要在release_a branch
上工作几个小时,然后在release_x branch
上修改一些内容,然后在release_h branch
上修改一下。由于我很懒,我最终做的是使用Intellij设置我的git存储库的多个副本,所以我不需要不断地在这里和那里切换分支。
当我听说git的worktree
命令时,我认为这正是我想要的 - 一个拥有一个repo的方法有多个工作目录。而且作为一个很大的优点,这意味着每次我在分支上改变某些东西时我不再需要推送东西,只是为了让另一个人拉它(例如,对于一个修补程序)。我可以在本地合并它们。
我对git worktree
的正确理解是什么?
我一直在玩它,但我无法真正了解它的用途如何。似乎默认情况下它会在其根文件夹上创建工作树,但是如果我执行git add .
那些相同的文件夹将包含在提交中。
这就是我为现有分支my_branch
创建工作树的方式(假设我目前是@ master
):
git worktree add my_branch my_branch
所以我的问题有两个:
由于
答案 0 :(得分:2)
作为一个很大的优点,这意味着每次我在分支上更改某些东西时,我不再需要推送内容,只是为了让另一个人拉它(例如,对于一个修补程序)。我可以在本地合并它们。
您已经可以在本地合并分支:您只需先检查目的地分支 如果你有同一个仓库的多个本地签出文件夹,是的,你需要在它们之间推/拉。
使用git worktree
,而不是检查目标分支(进行合并),或者不是推送到同一个仓库的另一个签出文件夹,而是需要cd /path/to/destination/branch
(其中)它已经签出了。)
想法是:
/path/to/your/repo
(有一个分支,如主检出)/path/to/your/Branch1
(回购的外部,但通过git worktree
文本符号链接机制链接回回购商品)/path/to/your/Branch2
,...等等。然后文件很清楚:
完成链接的工作树后,您只需将其删除即可。
存储库中的工作树管理文件(see "DETAILS" below)最终会自动删除(请参阅
git-config
中的gc.worktreePruneExpire
)。
或者,您可以在主要或任何链接的工作树中运行git worktree prune
来清理任何陈旧的管理文件。