git - Git:用链接的工作树交换主工作树?
问题描述
我正在尝试找出是否有任何方法可以交换工作树。我的公司有很多假定特定目录结构的脚本,因此为了能够使用多个工作树,我需要“新”链接工作树来代替主工作树。
我发现git worktree move <worktree> <new-path>
但这不允许移动“主要”工作树,所以没有交换的机会。
理想情况下,会有一个git worktree swap <worktree> <path>
地方:
- 如果
<path>
是工作树,则交换它们 - 如果
<path>
是 commit-ish,它会为 commit-ish 添加一个名为<worktree>
' 的新工作树,然后交换它们
解决方案
理想情况下,您会:
- 将主工作树移到别处
- 将“特定目录”中的符号链接添加到主工作树或任何其他工作树。
后者也可以移动,但如果这样做,请确保使用 Git 2.28(2020 年第三季度):同一个工作树目录只能注册一次,但“git worktree
移动”允许违反此不变量,已使用 Git 更正2.28.
请参阅Eric Sunshine ( ) 的提交 810382e、提交 d179af6、提交 916133e、提交 4a3ce47、提交 dd9609a、提交 1b14d40(2020 年 6 月 10 日)和提交 c9b77f2(2020 年 6 月 8日)。(由Junio C Hamano 合并 -- --在提交 9740ef8中,2020 年 6 月 22 日)sunshineco
gitster
worktree
:使“移动”拒绝在丢失的已注册工作树上移动签字人:Eric Sunshine
"
git worktree add
" 特别注意避免在已注册到现有工作树的位置创建新工作树,即使该工作树丢失(例如,如果工作树驻留在可移动媒体上,可能会发生这种情况)。然而, “
git worktree move
”在验证目标位置时并不那么小心,并且会很高兴地将源工作树移动到丢失的工作树位置的顶部。
这导致多个工作树与同一路径相关联的异常情况,这是设计明确禁止的。例如:
$ git clone foo.git $ cd foo $ git worktree add ../bar $ git worktree add ../baz $ rm -rf ../bar $ git worktree move ../baz ../bar $ git worktree list .../foo beefd00f [master] .../bar beefd00f [bar] .../bar beefd00f [baz] $ git worktree remove ../bar fatal: validation failed, cannot remove working tree: '.../bar' does not point back to '.git/worktrees/bar'
通过增强“”来修复这个缺点,
git worktree move
以执行与“”相同的目标目录的附加验证git worktree add
。在此期间,添加一个测试以验证“
git worktree move
”不会将工作树移动到现有(非工作树)路径的顶部——这是一个一直存在但从未测试过的限制。
推荐阅读
- python - 我可以将 bs4 导入 IDLE,但不能导入其他 IDE,例如 Spyder 或 Pycharm
- spring - 步骤在 read() 方法期间挂起
- combobox - 在 PowerApps 中,如何将多项选择值和其他(用户输入)值返回到 SharePoint 列表?
- node.js - 如何使用 nodejs 将 JSON 对象转换为 XML 文件?
- c++ - 如何让一个类修改指向自身的指针,以便我可以轻松地返回它
- ios - apple.com 购买/订单历史的 API
- django - 创建用户和帖子模型 Django
- javascript - 异步等待返回未定义的javascript
- javascript - 如何检测数组是否是从迭代器(或数组扩展)创建的
- php - 使用 PHP 正确解析 XML