长期使用“git worktree”分支

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)

所以我的问题有两个:

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

谢谢

Von*_*onC 2

\n

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

\n
\n

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

\n

使用git worktree,您不需要签出目标分支(以进行合并),也不需要推送到同一存储库的另一个签出文件夹,您需要这样做(在已经签出的位置)cd /path/to/destination/branch

\n

这个想法是:

\n
    \n
  • /path/to/your/repo(像 master 这样的一个分支已签出)
  • \n
  • /path/to/your/Branch1(在存储库之外git worktree,但通过文本符号链接机制链接回存储库)
  • \n
  • /path/to/your/Branch2, ...等等。
  • \n
\n

那么文档就很清楚了:

\n
\n

当您使用完链接的工作树后,您只需将其删除即可

\n

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

\n
\n