问题标签 [git-worktree]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
2373 浏览

git - Git 工作流程 - 更改分支和缓慢的重新编译

我在一个大型 Scala 项目中工作,我们使用 Git 进行版本控制。我的工作流程是在我自己的分支中处理新功能并在需要时进行切换。代码的各种版本都在它们自己的分支中。都非常标准。

如果我必须修复某个版本的代码中的错误,我将切换到正确的分支,修复错误,提交,然后切换回原来的位置。

问题是,虽然 git 一旦我到了那里就可以立即切换到另一个分支,但我必须重新编译代码。这需要几分钟。然后修复错误,切换回我自己的分支并再次重新编译,这需要几分钟。它似乎违背了 Git 如此之快的目的。

有人遇到过这种情况么?有没有办法绕过它。我确定这不是 Scala 特有的问题(尽管 Scala 的编译速度非常慢)。

3年后更新

过去几年我一直在使用@djs 答案(git-new-workdir)。这对我来说效果很好。我有一个主目录和几个其他目录(如生产、下一个版本等),当我需要在那里工作时我会切换到这些目录。开销很小,这意味着您可以快速切换到生产,测试某些东西,然后切换回您正在处理的内容。

7年后更新

看起来git-worktree是 git-new-workdir 的替代品。要使用:

0 投票
2 回答
1056 浏览

git - git-new-workdir:在工作树 A 中提交会导致树 B 中的虚假更改

git-new-workdir曾经为一个 git 存储库拥有两棵工作树。这通常效果很好,但是如果在两个工作树中签出相同的分支,则在提交某些内容后我会出现有趣的行为:

  • 我从干净的工作树和“master”开始。
  • 我在工作树 A 中提交了一些东西。

结果:

  • 工作树 A 中的“git status”显示“干净”(如预期的那样)
  • 工作树 B 中的“git status”突然显示“要提交的更改”

显示的更改与我刚刚在 A 中所做的提交相反。例如,如果 A 中的提交添加了一行,则 B 中的“要提交的更改”显示该行已被删除。

这里发生了什么?这是 git-new-workdir 的已知限制吗?有没有办法避免这个问题?或者我应该避免在两个副本中签出同一个分支时签入?

我也有兴趣了解内部发生的事情(我对 git 的内部结构知之甚少)。

笔记:

我发现问题很容易通过 git reset--hard在 B 中运行来解决,如果 B 在 A 中提交之前没有未提交的更改。

但是,如果我在 A 中提交,而 B 中有未提交的更改,则真正的未提交更改与提交中的虚假更改混合在一起,并且似乎没有简单的方法可以解开它们。因此问题。

0 投票
1 回答
906 浏览

git - 关于 git-new-workdir 分支同步

我正在使用 git-new-workdir 脚本来管理我的分支,但分支显然不会自动同步。我有一个包含三个分支(master、branchA 和 branchB)的仓库。首先,我克隆了 repo:

其次,我使用 git-new-workdir 来拆分我的分支

现在我有项目、分支A 和分支B 目录。假设其他人也从其他计算机克隆了我的 repo 并签出了 branchA,修改了文件,提交并发布了git push --all.

因此,现在我必须更新我的分支 A。所以,我从主分支目录发出一个git pull --all,我希望我的所有分支都会立即更新,但他们没有。当检查 branchA 目录上的修改文件时,没有任何变化。

做错了什么?

0 投票
1 回答
10771 浏览

git - 将 git worktree 与 git 子模块一起使用时会出现什么问题

我最近发现了这个git worktree命令:

新的工作目录链接到当前存储库,共享除工作目录特定文件(如 HEAD、索引等)之外的所有内容。

但文档也表明

…对子模块的支持不完整。不建议对一个超级项目进行多次检查。

没有进一步解释出了什么问题。

有人可以告诉我预期的问题吗?例如,如果我将这种方式生成的单独工作树仅用于不影响子模块的更改,我会好吗?

0 投票
10 回答
89144 浏览

git - 我会用 git-worktree 做什么?

在 git-worktree 上阅读了 Github 的帖子。他们写:

假设您正在一个名为 的分支上的 Git 存储库中工作,此时feature用户报告master. 首先,您创建一个带有新分支的链接工作树,hotfix相对于 master [...] 您可以修复错误、推送修补程序并创建拉取请求。

当我在一个名为 feature 的分支上工作并且报告了 master 中的一些高紧急错误时,我通常会隐藏我正在处理的所有内容并创建一个新分支。完成后,我可以继续工作。这是一个非常简单的模型,我多年来一直这样工作。

另一方面,使用 git-worktree 有其自身的局限性:

例如,不允许在两个链接的工作树中同时检出相同的分支,因为这将允许在一个工作树中提交的更改导致另一个工作树不同步。

为什么我要为已经解决的问题选择更复杂的工作流程?

有什么事情git-worktree是事先无法做到的,并且可以证明这个全新的、复杂的功能是合理的吗?

0 投票
4 回答
6422 浏览

git - 即使在删除工作树并运行工作树修剪后也无法签出分支

我使用以下命令为分支创建工作树:

这为我创建了一个新的工作树并检查了路径上的分支

现在我想删除/删除工作树。运行以下命令:

理想情况下,这应该删除工作树并删除该路径的引用。所以现在我应该可以检查分支了。但是当我运行以下命令来结帐到该分支时:

我收到此错误:

有人可以帮我解决正在发生的事情。

0 投票
1 回答
1011 浏览

git - 长期使用“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):

所以我的问题是双重的:

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

谢谢

0 投票
1 回答
1450 浏览

git - Git worktree:两个工作树指向同一个位置,不能被修剪

当我这样做时git worktree list,它会显示如下。

这是我的工作目录(不是工作树目录)。我不知道它是怎么发生的,以及如何清洁它。我试过git worktree prune了,但它并没有改变任何东西。任何帮助将不胜感激。非常感谢。

0 投票
1 回答
185 浏览

git - 使用 Git 处理多个相互依赖的项目

我的问题如下:

我正在开发 2 个 Python 包 A 和 B,B 使用 A。因此,当我更改包 A 中的某些内容时,我经常需要在包 B 中进行一些小的更改以适应函数调用等。

我的两个包都是 git 存储库。我希望能够在一次提交中从两个存储库提交更改。但是,我想保留在每个 repo 中单独提交的能力。

我检查了 git submodules 和 git worktree 但它似乎并不是我所需要的。你知道其他方法吗?

谢谢。

0 投票
2 回答
4556 浏览

git - How do I use git worktrees in IntelliJ IDEA 2016.1?

The newest version of IntelliJ says it has support for git worktrees, but I can't seem to find anywhere that says how to use it. I was expecting to see an entry in the Git Branches popup in the lower right, but I don't see it there.

I also don't see any descriptions in:
Blog post announcing the feature
What's new video

IntelliJ help and googling were also unhelpful

I'm using Git version 2.7.2.0, worktrees were introduced in 2.5