4

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

2

作为一个很大的优势,这意味着我不再需要在每次更改分支上的某些内容时,仅仅为了让另一个人拉动它(例如,对于一个修补程序)。我可以在本地合并它们。

您已经可以在本地合并分支:您只需先签出目标分支。
如果您有多个本地签出的同一个 repo 文件夹,是的,您需要在它们之间推/拉。

使用git worktree,而不是签出目标分支(进行合并),或者不是推送到同一个 repo 的另一个签出文件夹,您需要cd /path/to/destination/branch(它已经签出)。

这个想法是:

  • /path/to/your/repo(有一个分支,如 master 已签出)
  • /path/to/your/Branch1(在回购之外git worktree,但通过文本符号链接机制链接回回购)
  • /path/to/your/Branch2, ...等等。

然后文档很清楚:

完成链接工作树后,您可以简单地删除它

存储库中工作树的管理文件(参见下面的“详细信息”)最终将被自动删除(参见gc.worktreePruneExpire参考资料git-config)。
或者,您可以git worktree prune在主工作树或任何链接的工作树中运行以清理任何陈旧的管理文件。

于 2016-01-11T07:02:11.147 回答