标签: git-worktree

为什么两个git工作树不能检查同一个分支?

使用单独的git-worktree,为什么我不能检查与主工作副本中相同的分支?如果我尝试,我得到错误:

fatal: 'mybranch' is already checked out at '/path/to/repo'
Run Code Online (Sandbox Code Playgroud)

我可以看到,如果我从一个工作树检入,另一个最终将处于一个独立的HEAD状态,但是那么糟糕,为什么我甚至不能查看同一个分支?

git git-worktree

6
推荐指数
1
解决办法
1138
查看次数

git比较两个包含一些具有不同哈希的常见提交的分支

上下文: 我们是一个程序员团队,负责一个有多个分支的项目:

Master, Release, Develop
Run Code Online (Sandbox Code Playgroud)

有时我们需要修复发布时的错误,我们需要在开发时报告此修复,报告我们使用的错误修复: git cherry-pick commit-SHA

使用此命令可以很好地报告bug修复,但提交有不同的哈希值

我们需要的 :

有时我们需要知道尚未报告的提交列表,为此,我们使用比较两个分支的命令,并向我们提供发布中存在但不在开发中的提交列表: git log develop..origin/release

问题 :

这个命令比较了提交的哈希值,但正如我之前所说,当我们报告我们的提交时,它们的哈希值会发生变化,因此,我们会得到一些提交,好像它们没有被报告一样

我正在寻找一种方法来报告我们的错误修复而不改变提交的哈希,或者列出两个分支之间的提交差异的方法,而不是通过哈希但是基于消息或其他事物

谢谢

git git-commit git-workflow git-cherry-pick git-worktree

6
推荐指数
1
解决办法
269
查看次数

如何在 Eclipse IDE 中使用 Git 工作树?

我正在将一个大型应用程序从 SVN 迁移到 Git,同时只在线阅读了“pro Git”和一些工作树详细信息并使用了 Git。

我创建了一个单独的存储库来管理我的应用程序的代码。我的应用程序由许多不同的 Eclipse 项目组成,这些项目具有 Maven 性质并单独发布。我按照建议为每个 Eclipse 项目创建了一个远程分支。现在,我想在新创建的各个功能分支上并行检查其中一些 Eclipse 项目,以实现影响多个 Eclipse 项目的新应用程序功能。

在这里,2019 年 8 月 28 日,Andre Bossert 表示Eclipse 能够检测和支持 Git 工作树目录。但是我似乎没有在 Eclipse 中点击正确的按钮。任何人都可以指向 Eclipse egit 的文档,我可以在其中找到更多信息吗?我自己也没有找到这些信息。

eclipse git maven egit git-worktree

6
推荐指数
1
解决办法
1113
查看次数

单个 git 存储库的多个用户

我们有一个被多个用户使用的服务器。磁盘空间是一个很大的限制,因为我们的 git repo 非常大,每次有人克隆它时,它都会消耗 130G 的空间。

我知道 git 不是设计为集中式工作流,但这是一种非常特殊的情况。我们考虑过升级硬件,但这是一条很长的路,因为它不是云实例。

我试着摆弄,git worktree但很快就遇到了权限问题。我的理想设置是一个单一的存储库,多个用户可以通过它推送和拉取。

我查看了以前的线程,但不幸的是那里没有可靠的建议,而且它们是很旧的线程。因此,任何新的建议将不胜感激。

git gerrit git-worktree

6
推荐指数
1
解决办法
146
查看次数

带有相对路径的git worktree?

我的回购中有一个master和一个setup分支。我将setup分支作为工作树主 repo 文件夹中通过

git worktree add ./local/setup
echo '/local' > .gitignore
Run Code Online (Sandbox Code Playgroud)

所以主 repo 文件夹是 on masterlocal/setup文件夹是 on setup。一切都很好,我可以处理我的setup文件而不必切换分支,我可以从内部提交local/setup等等。

但是,如果我尝试移动整个存储库,或者从不同的 Linux 引导(/home/myrepo变成/mnt/ubu/home/myrepo)访问它,事情就会中断。问题似乎是git's worktree 功能记录了绝对路径,在

myrepo/.git/worktrees/setup/gitdir
myrepo/local/setup/.git
Run Code Online (Sandbox Code Playgroud)

我可以将这些转换为相对路径以使 repo + 嵌入式工作树可重定位吗?我不确定这些文件中的路径应该相对于 什么,但我可以进行试验。这种设置危险吗?

git git-worktree

6
推荐指数
1
解决办法
279
查看次数

加速 Haskell 堆栈项目编译和 git 分支

我不能改变 GHC 的编译时间,但我可以控制编译的环境。我可以用gitstack做什么来最大程度地减少由于(重新)构建造成的停机时间?

Haskell 堆栈在.stack-work目录中缓存已编译的依赖项,它非常适合一次处理一件事。但是,我发现自己在分支之间来回切换。我已经git checkout到位了,也许有些.stack-work缓存是可用的。但是我非常喜欢git worktree在完全不同的目录中获取分支的副本。工作树在构建时间上尤其困难,因为每个工作树目录都有自己的.stack-work的 .

我一直在阅读有关 Nix 和 Haskell 的文章,但是由于堆栈创建了自己的缓存,因此它会忽略 Nix 编译和安装的任何内容。从我读到的内容来看,我真的希望 Nix 处理依赖项并使用堆栈来处理我的个人代码。我从 stackage and 中受益匪浅stack solver,所以我不想放弃它们。但是当我在运行时看到一整屏“取消注册”消息时stack build --only-dependencies && stack ghci,我知道我至少有 10-15 分钟的时间才能收到提示。

非常感谢!

haskell haskell-stack git-worktree

5
推荐指数
0
解决办法
102
查看次数

检查新工作树中的孤立分支

我知道可以像这样创建一个新的孤立分支:

git checkout --orphan <new_branch>
Run Code Online (Sandbox Code Playgroud)

但是,这使用了我当前的工作树,我想完全保留它。我试过:

git --work-tree=/tmp/test checkout --orphan <new_branch>
Run Code Online (Sandbox Code Playgroud)

但这似乎也使用了我当前的工作树,而不是我指定使用的工作树--work-tree

我可以使用第二个克隆,但这似乎不是最佳选择。任何使用工作树解决这个问题的方法?

git git-checkout git-worktree

5
推荐指数
2
解决办法
376
查看次数

如何在同一个远程分支上拥有 2 个独立的本地 Git 分支

我有一个主分支,正在开发涉及相同文件的两个功能。我想要有 2 个本地分支指向同一个上游主服务器,但有不同的更改。我不想在本地提交更改,以便 IDE 保留格式,如
https://d3nmt5vlzunoa1.cloudfront.net/idea/files/2018/10/k8sCompletion.png中的边框阴影

我无法成功使用 git checkout ,因为当我在一个分支中进行更改并切换到另一个分支时,未暂存的更改也可以在其上看到。我想出的解决方案是在 2 个存储库中检查我的代码,因为 git worktree 似乎需要 2 个不同的远程分支。然而,这意味着硬盘效率低下。有办法实现我想要的吗?

我希望当我在本地分支之间切换时,即使一个分支的未暂存更改也不应该在另一个分支中可见。

git branch git-worktree

5
推荐指数
1
解决办法
3855
查看次数

如何在 Git 中的两个独立工作树之间切换分支?

我为“开发”分支添加了一个链接的工作树。所以我的工作树是这样的:

- “项目”工作树 -> 主分支
- “project_develop”工作树 -> 开发分支

在这种情况下,我想做的是签出“project_develop”工作树上的主分支。但据我所知,不可能在不同的工作树上检出相同的分支。我能想到的唯一方法是添加一个新的临时分支。

如果有人告诉我另一种方式,我将不胜感激。
谢谢!

git git-worktree

5
推荐指数
1
解决办法
4236
查看次数

Git:用链接的工作树交换主工作树?

我试图找出是否有任何方法可以交换工作树。我的公司有很多假定特定目录结构的脚本,因此为了能够使用多个工作树,我需要“新”链接的工作树来代替主工作树。

我发现git worktree move <worktree> <new-path>但这不允许移动“主要”工作树,因此没有交换的机会。

理想情况下,会有一个git worktree swap <worktree> <path>地方:

  • 如果<path>是工作树,它会交换它们
  • 如果<path>是 commit-ish,它会添加一个名为<worktree>'s name的新工作树作为 commit-ish,然后交换它们

git git-worktree

5
推荐指数
1
解决办法
625
查看次数