使用单独的git-worktree,为什么我不能检查与主工作副本中相同的分支?如果我尝试,我得到错误:
fatal: 'mybranch' is already checked out at '/path/to/repo'
Run Code Online (Sandbox Code Playgroud)
我可以看到,如果我从一个工作树检入,另一个最终将处于一个独立的HEAD状态,但是那么糟糕,为什么我甚至不能查看同一个分支?
上下文: 我们是一个程序员团队,负责一个有多个分支的项目:
Master, Release, Develop
Run Code Online (Sandbox Code Playgroud)
有时我们需要修复发布时的错误,我们需要在开发时报告此修复,报告我们使用的错误修复: git cherry-pick commit-SHA
使用此命令可以很好地报告bug修复,但提交有不同的哈希值
我们需要的 :
有时我们需要知道尚未报告的提交列表,为此,我们使用比较两个分支的命令,并向我们提供发布中存在但不在开发中的提交列表: git log develop..origin/release
问题 :
这个命令比较了提交的哈希值,但正如我之前所说,当我们报告我们的提交时,它们的哈希值会发生变化,因此,我们会得到一些提交,好像它们没有被报告一样
我正在寻找一种方法来报告我们的错误修复而不改变提交的哈希,或者列出两个分支之间的提交差异的方法,而不是通过哈希但是基于消息或其他事物
谢谢
我正在将一个大型应用程序从 SVN 迁移到 Git,同时只在线阅读了“pro Git”和一些工作树详细信息并使用了 Git。
我创建了一个单独的存储库来管理我的应用程序的代码。我的应用程序由许多不同的 Eclipse 项目组成,这些项目具有 Maven 性质并单独发布。我按照建议为每个 Eclipse 项目创建了一个远程分支。现在,我想在新创建的各个功能分支上并行检查其中一些 Eclipse 项目,以实现影响多个 Eclipse 项目的新应用程序功能。
在这里,2019 年 8 月 28 日,Andre Bossert 表示Eclipse 能够检测和支持 Git 工作树目录。但是我似乎没有在 Eclipse 中点击正确的按钮。任何人都可以指向 Eclipse egit 的文档,我可以在其中找到更多信息吗?我自己也没有找到这些信息。
我们有一个被多个用户使用的服务器。磁盘空间是一个很大的限制,因为我们的 git repo 非常大,每次有人克隆它时,它都会消耗 130G 的空间。
我知道 git 不是设计为集中式工作流,但这是一种非常特殊的情况。我们考虑过升级硬件,但这是一条很长的路,因为它不是云实例。
我试着摆弄,git worktree但很快就遇到了权限问题。我的理想设置是一个单一的存储库,多个用户可以通过它推送和拉取。
我查看了以前的线程,但不幸的是那里没有可靠的建议,而且它们是很旧的线程。因此,任何新的建议将不胜感激。
我的回购中有一个master和一个setup分支。我将setup分支作为工作树在主 repo 文件夹中通过
git worktree add ./local/setup
echo '/local' > .gitignore
Run Code Online (Sandbox Code Playgroud)
所以主 repo 文件夹是 on master,local/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 + 嵌入式工作树可重定位吗?我不确定这些文件中的路径应该相对于 什么,但我可以进行试验。这种设置危险吗?
我不能改变 GHC 的编译时间,但我可以控制编译的环境。我可以用git和stack做什么来最大程度地减少由于(重新)构建造成的停机时间?
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 分钟的时间才能收到提示。
非常感谢!
我知道可以像这样创建一个新的孤立分支:
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。
我可以使用第二个克隆,但这似乎不是最佳选择。任何使用工作树解决这个问题的方法?
我有一个主分支,正在开发涉及相同文件的两个功能。我想要有 2 个本地分支指向同一个上游主服务器,但有不同的更改。我不想在本地提交更改,以便 IDE 保留格式,如
https://d3nmt5vlzunoa1.cloudfront.net/idea/files/2018/10/k8sCompletion.png中的边框阴影
我无法成功使用 git checkout ,因为当我在一个分支中进行更改并切换到另一个分支时,未暂存的更改也可以在其上看到。我想出的解决方案是在 2 个存储库中检查我的代码,因为 git worktree 似乎需要 2 个不同的远程分支。然而,这意味着硬盘效率低下。有办法实现我想要的吗?
我希望当我在本地分支之间切换时,即使一个分支的未暂存更改也不应该在另一个分支中可见。
我为“开发”分支添加了一个链接的工作树。所以我的工作树是这样的:
- “项目”工作树 -> 主分支
- “project_develop”工作树 -> 开发分支
在这种情况下,我想做的是签出“project_develop”工作树上的主分支。但据我所知,不可能在不同的工作树上检出相同的分支。我能想到的唯一方法是添加一个新的临时分支。
如果有人告诉我另一种方式,我将不胜感激。
谢谢!
我试图找出是否有任何方法可以交换工作树。我的公司有很多假定特定目录结构的脚本,因此为了能够使用多个工作树,我需要“新”链接的工作树来代替主工作树。
我发现git worktree move <worktree> <new-path>但这不允许移动“主要”工作树,因此没有交换的机会。
理想情况下,会有一个git worktree swap <worktree> <path>地方:
<path>是工作树,它会交换它们<path>是 commit-ish,它会添加一个名为<worktree>'s name的新工作树作为 commit-ish,然后交换它们git-worktree ×10
git ×9
branch ×1
eclipse ×1
egit ×1
gerrit ×1
git-checkout ×1
git-commit ×1
git-workflow ×1
haskell ×1
maven ×1