git:从外面结帐工作树分支

时间:2015-08-31 16:04:23

标签: git git-svn

Git版本:2.5.1。 windows .1(通过git-scm.com)

设定:

glsurfaceview.renderer

我通过

创建了第二个工作树
Main Repo:    Branch_A -> commit -> commit -> commit -> commit
                             \
Worktree:                     -> Branch_B -> commit -> commit
                                     \
                                      -> local Branch_C -> commit

工作正常

现在我要做的是在工作树中创建本地分支(如Branch_C)并提交给它们之后,将worktree的分支从外部切换回分支Branch_B。 在this之后我尝试了以下内容:

签出分支是Branch_C,在Branch_B上另外提交一次

git worktree add /C/repos/testbranch Branch_B

但我得到的输出是:

git --work-tree=/C/repos/testbranch/ --git-dir=/C/repos/testrepo/.git/ checkout Branch_B

我尝试从不同的目录执行此操作,尝试添加/省略--git-dir和其他一些东西 - 似乎没有任何效果。我做错了什么?

编辑:通过

签出分支
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

在/ C / repos / testbranch /中正常工作。

背景:我正在使用的repo是从SVN repo克隆的。我想要实现的是使用ANT(&lt; exec&gt;任务)自动化“svn rebase”的过程。第一步是签出指向SVN存储库上的分支的分支。不幸的是,仅在ANT任务中使用git checkout Branch_B 失败了checkout

步骤:

  1. 结帐$ orig_branch
  2. git svn fetch
  3. (可选)git svn find-rev最新版本的修订版(可能不是最后一次提交)
  4. git rebase $ svn-branch_build-rev $ orig_branch

2 个答案:

答案 0 :(得分:0)

找到解决方案。

  1. 您不需要在工作树的文件夹中工作,因为repo保持不变。假如你需要进行SVN提取,你可以从主工作区进行。
  2. 您可以通过执行随git一起安装的sh.exe并向其传递命令(也可以是cd)来规避上述问题:

    &lt; exec executable =&#34; C:/ Program Files / Git / bin / sh.exe&#34; failonerror =&#34;真&#34;&GT;
        &lt; arg value =&#34; - 登录&#34; /&gt;
        &lt; arg value =&#34; -c&#34; /&gt;
        &lt; arg value =&#34;&#34; cd / C / repos / testbranch&amp;&amp; git checkout Branch_B&#34;&#34; /&gt;
    &LT; / EXEC&GT;

答案 1 :(得分:0)

Git 2.11 +(2016年第4季度)可能会更优雅地处理这种情况:

commit 112423ecommit b26098fEric Wong (ele828)(2016年10月14日) Junio C Hamano -- gitster --于2016年10月27日commit 251641b合并)

  

git-svn:“git worktree”意识

     

git-svn内部先前未了解“git worktree”命令用户的存储库布局差异。

     

使用“git rev-parse --git-path”而不是依赖GIT_DIR和朋友的过时使用来介绍此感知。