[英]git: checkout work-tree branch from outside
Git版本:2.5.1。 Windows .1(通过git-scm.com)
设定:
Main Repo: Branch_A -> commit -> commit -> commit -> commit
\
Worktree: -> Branch_B -> commit -> commit
\
-> local Branch_C -> commit
我通过创建了第二个工作树
git worktree add /C/repos/testbranch Branch_B
效果很好
现在我要做的是在工作树中创建本地分支(例如Branch_C)并将其提交后,从外部将工作树的分支从外部切换回分支Branch_B。 在此之后,我尝试了以下操作:
签出的分支是Branch_C,并在Branch_B上另外提交了一次
git --work-tree=/C/repos/testbranch/ --git-dir=/C/repos/testrepo/.git/ checkout Branch_B
但是我得到的输出是:
error: Your local changes to the following files would be overwritten by checkout:
bla <-- My test file which is COMMITTED and UNCHANGED in Branch_C
Please, commit your changes or stash them before you can switch branches.
Aborting
我尝试从其他目录执行此操作,尝试添加/省略--git-dir和其他一些内容-似乎没有任何效果。 我究竟做错了什么?
编辑:通过检出分支
git checkout Branch_B
在/ C / repos / testbranch /中运行正常。
背景:我正在使用的存储库是从SVN存储库中克隆的。 我想要实现的是使用ANT(<exec>任务)自动执行“ svn rebase”的过程。 第一步是签出指向SVN信息库上分支的分支。 不幸的是,仅在ANT任务中使用checkout
失败, not a git repository: $SECOND_WORKTREE_DIR
。
脚步:
找到了解决方案。
您可以通过执行git安装的sh.exe并向其传递命令(也可以是cd
)来规避上述问题:
<exec可执行文件=“ C:/ Program Files / Git / bin / sh.exe” failonerror =“ true”>
<arg value =“-login” />
<arg value =“-c” />
<arg value =“” cd / C / repos / testbranch && git checkout Branch_B“” />
</ EXEC>
Git 2.11+(2016年第四季度)可能会更优雅地处理这种情况:
参见Eric Wong( ele828
)的 提交112423e和提交b26098f (2016年10月14日) 。
(由Junio C gitster
- gitster
在commit 251641b中合并 ,2016年10月27日)
git-svn
:“git worktree
”意识
git-svn
内部人员以前不了解“git worktree
”命令用户的存储库布局差异。通过使用“
git rev-parse --git-path
”来引入这种意识,而不是依赖于GIT_DIR
和朋友的过时用法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.