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)
这似乎是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以上;甚至其他的东西。
我仍然在复制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/*
Run Code Online (Sandbox Code Playgroud)
在[svn-remote "svn"]部分您可以看到所有git-svn配置。在该branches部分中,您可以看到远程存储库上的所有分支svn。
当我需要关注svn本地git存储库中的分支时,我通常会执行以下步骤:
config所有branches和 的配置是否正确tags。git svn fetch,这样 git 将获取所有分支的存储库中的所有数据我检查所有branches/tags是否都作为 的输出出现git branch -a,例如:
master
prod
scenarioParametro
remotes/tags/alpha-1
remotes/trunk
Run Code Online (Sandbox Code Playgroud)我创建一个本地 gitbranch来跟踪远程 git:
git branch alpha-1 remotes/tags/alpha-1 --track
Run Code Online (Sandbox Code Playgroud)这样新创建的alpha-1分支就会跟随remotes/tags/alpha-1,你可以执行rebase和dcommit命令。