[英]How to set upstream branch in git-svn?
在使用常规git存储库时,本地分支通常会跟踪相应的远程上游分支。 通过这种方式,我可以轻松地看到自己是在上游分支的前面还是后面,以及是否需要推动或拉动它们以使其同步。 另外,我的提示会立即显示此状态,这非常方便。
现在,我正在使用git-svn
在SVN存储库中工作。 我为克隆使用了--prefix=svn
,因此git branch -r
将svn/trunk
列为远程分支,但是(尽管git svn rebase
可以正常工作),但没有将其配置为我的master分支的上游分支。
我尝试手动设置跟踪信息,但失败了:
$ 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.
有什么方法可以跟踪svn上游分支吗?
还有其他简单的方法可以知道我在该分支机构之前还是之后吗? (查看gitk --all
是我目前所知的唯一方法。)
什至还有某种方法可以使我的(bash __git_ps1
)提示符显示该信息?
$ git --version
git version 1.9.0.msysgit.0
这似乎是git 1.9中引入的错误,因为--set-upstream-to
完全按照您提到的方式工作。
并且strace
显示上游分支ref的正确定位和读取,但是由于某种原因它被忽略了。
对于这个问题,我的解决方法是手动编辑 .git/config
:
$ cat >> .git/config << EOF
[branch "master"]
remote = .
merge = refs/svn/trunk
rebase = true
EOF
— 应该等于:
git branch --set-upstream-to=svn/trunk master
&& git config branch.master.rebase true
(无论如何,您都希望使用svn)
-但不是,因为有错误! “我的refs/svn/trunk
当然是一个分支!” 您说,然后直接编辑配置(只需轻轻一点即可)。
您的svn干线在git中的名称可能不同,具体取决于您克隆存储库的方式( git svn clone
-s
, -T
,-- --prefix
选项)。 只需执行git branch -avv
并找到正确的git branch -avv
。 例如,一个可能的名称是refs/remotes/git-svn
; 或上面的refs/svn/trunk
; 甚至其他的东西。
我仍然在git version 2.1.4
上重现此内容。 有人要提交错误报告吗?
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/*
在[svn-remote "svn"]
部分中,您可以看到所有的git-svn
配置。 在“ branches
部分中,您将看到远程svn
库上的所有分支。
当我需要在本地git
repo中遵循svn
分支时,通常会执行以下步骤:
config
是否正确配置了所有branches
和tags
。 git svn fetch
,这样git将为所有分支取回仓库中的所有数据。 我检查所有branches
/ tags
是否作为git branch -a
输出存在,例如:
master prod scenarioParametro remotes/tags/alpha-1 remotes/trunk
我创建一个本地git branch
来跟踪具有以下内容的远程branch
:
git branch alpha-1 remotes/tags/alpha-1 --track
这样,新创建的alpha-1
分支将遵循remotes/tags/alpha-1
,您可以执行rebase
和dcommit
命令。
这对我使用git 1.9.5仍然是一个问题。
而且我没有得到这里提到的任何解决方案,但是可以正常工作:
git rebase origin/remote-branch-name
之后, git svn dcommit -n
显示它确实将提交到该svn分支。
更新 :我又遇到了同样的问题,这一次以上没有奏效。 我刚收到消息: Current branch master is up to date.
但是使用:
git rebase -i origin/remote-branch-name
无论如何都强制重新设置基准,然后正确设置了上游。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.