如何在git-svn中设置上游分支?

mic*_*has 12 svn git git-svn msysgit git-bash

在通常的git存储库上工作时,本地分支通常会跟踪相应的远程上游分支.通过这种方式,我可以很容易地看到,无论我是在我的上游分支的前面还是后面,因此我需要推或拉来使它们同步.此外我的提示立即显示此状态,这非常方便.

现在我正在使用SVN存储库git-svn.我用--prefix=svn的克隆,因此git branch -r列出svn/trunk作为远程分支,但(虽然git svn rebase没有问题作品)它没有被配置为用于我的主分支的上游分支.

我尝试手动设置跟踪信息,但失败了:

$ git branch -r
  svn/trunk
$ git branch --set-upstream-to=svn/trunk
fatal: Cannot setup tracking information; starting point 'svn/trunk' is not a branch.
Run Code Online (Sandbox Code Playgroud)

有没有办法跟踪svn上游分支?

还有其他一些简单的方法可以知道我是领先还是落后于那个分支?(看着gitk --all目前我所知道的唯一方式.)

有没有办法让我的(bash __git_ps1)提示显示信息?


$ git --version
git version 1.9.0.msysgit.0
Run Code Online (Sandbox Code Playgroud)

uli*_*tko 5

这似乎是git 1.9中引入的错误,因为它--set-upstream-to完全按照您提到的方式工作。
并且strace显示正确的定位和上游分支ref的读取,但是由于某种原因它被忽略了。


我对这个问题的解决方法是手动编辑.git/config

$ cat >> .git/config << EOF

[branch "master"]
        remote = .
        merge = refs/svn/trunk
        rebase = true
EOF
Run Code Online (Sandbox Code Playgroud)

应该等于:

git branch --set-upstream-to=svn/trunk master
Run Code Online (Sandbox Code Playgroud)

&& git config branch.master.rebase true(无论如何都需要svn)

-但不是,因为有错误!“我当然refs/svn/trunk 一个分支!” 您说,然后直接编辑配置(只需轻轻一点即可)。

你的svn主干可以在不同的git被命名取决于你如何克隆回购(-s-T--prefix选项git svn clone)。只要做一个git branch -avv,找到正确的一个。例如,一个可能的名称是refs/remotes/git-svn;。或refs/svn/trunk以上;甚至其他的东西。


2015年11月更新

我仍然在复制git version 2.1.4。有人要提交错误报告吗?


Atr*_*opo 2

git-svn将把配置数据存储在 中.git/config,例如在我的一个存储库中,配置如下:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[svn-remote "svn"]
    url = http://svn.repo.com/repos/myrepo
    fetch = trunk:refs/remotes/trunk
    branches = branches/*:refs/remotes/*
    tags = tags/*:refs/remotes/tags/*
Run Code Online (Sandbox Code Playgroud)

[svn-remote "svn"]部分您可以看到所有git-svn配置。在该branches部分中,您可以看到远程存储库上的所有分支svn

当我需要关注svn本地git存储库中的分支时,我通常会执行以下步骤:

  1. 我检查config所有branches和 的配置是否正确tags
  2. 我做了一个git svn fetch,这样 git 将获取所有分支的存储库中的所有数据
  3. 我检查所有branches/tags是否都作为 的输出出现git branch -a,例如:

    master
    prod
    scenarioParametro
    remotes/tags/alpha-1
    remotes/trunk
    
    Run Code Online (Sandbox Code Playgroud)
  4. 我创建一个本地 gitbranch来跟踪远程 git:

    git branch alpha-1 remotes/tags/alpha-1 --track
    
    Run Code Online (Sandbox Code Playgroud)

这样新创建的alpha-1分支就会跟随remotes/tags/alpha-1,你可以执行rebasedcommit命令。

  • 从 Git 版本 1.8.3.2 开始,跟踪远程 *git-svn* 分支不再有效。 (6认同)
  • 不,“--track”在我的存储库上不起作用。它将导致与问题中所示的相同的错误消息。(无法设置跟踪信息。)它真的适用于您的存储库吗?哪个版本的 git 和哪个操作系统? (2认同)