使用“git worktree”

时间:2016-01-11 06:00:24

标签: git version-control git-worktree

我正在研究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

所以我的问题有两个:

  1. 是否可以/正确地为长期分支机构应用多个工作树,或者它只是暂时有意义的事情?
  2. 我应该如何正确删除不需要的工作树?
  3. 我的主git存储库内部或外部是否应该存在这些工作树?
  4. 由于

1 个答案:

答案 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来清理任何陈旧的管理文件。