Phi*_*ham 28 svn git merge git-svn
我正在使用git-svn
SVN存储库.我的工作副本是使用创建的,git svn clone -s http://foo.bar/myproject
因此我的工作副本遵循SVN(主干,标记,分支)的默认目录方案.
最近我一直在研究使用git-svn branch myremotebranch
和检出的分支git checkout --track -b mybranch myremotebranch
.我需要在多个位置工作,所以从分支I git-svn dcommit
-ed文件定期到SVN存储库.
完成更改后,我切换回主服务器并执行合并,提交合并,并尝试将成功合并提交到远程主干.
似乎在合并之后,主服务器的远程跟踪已切换到我正在处理的分支:
# git checkout master
# git merge mybranch
... (successful)
# git add .
# git commit -m '...'
# git svn dcommit
Committing to http://foo.bar/myproject/branches/myremotebranch ...
#
Run Code Online (Sandbox Code Playgroud)
有没有办法可以更新主服务器,以便它remotes/trunk
在合并之前跟随?
我正在使用git 1.7.0.5,如果有任何帮助的话.
如果您还可以解释为什么会发生这种情况会很有用,这样我就可以避免问题再次发生.谢谢!
编辑:
这是我目前的.git/config
:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
autocrlf = false
[svn-remote "svn"]
url = http://foo.bar/myproject
fetch = trunk:refs/remotes/trunk
branches = branches/*:refs/remotes/*
tags = tags/*:refs/remotes/tags/*
[branch "mybranch"]
remote = .
merge = refs/remotes/myremotebranch
Run Code Online (Sandbox Code Playgroud)
因此,主干似乎指向正确的位置.但是,切换到分支然后回到主设备没有帮助; git svn dcommit
在主人仍然试图推动myremotebranch
.
Dan*_*iel 22
当主干上没有变化时,git会进行快进合并,只需将本地"主"分支设置为分支上的提交即可.Git-svn不知道如何将快进合并提交回trunk,实际上它认为"master"现在指向svn分支.
要解决此问题,请git merge --no-ff
在合并时使用.这将强制git创建一个合并提交,然后可以将其提交给svn.
dyo*_*dji 13
如果您git svn rebase
在切换回master并使用--squash后可以避免这种情况.
# git checkout master
# git svn rebase //(<--the missing step)
# git merge --squash mybranch // (<-- doesn't commit, more like an svn merge would do)
... (successful)
# git add .
# git commit -m '...'
# git svn dcommit
Committing to http://foo.bar/myproject/trunk...
#
Run Code Online (Sandbox Code Playgroud)
解决当前状态(即主服务器指向SVN分支)
你可以'切换'到另一个分支,删除master,'切换'回到它,然后再次合并:
# git checkout mybranch
# git branch -D master
# git checkout -b master trunk
... continue with merge...
# git merge --squash mybranch
Run Code Online (Sandbox Code Playgroud)
...你现在将mybranch合并为主人并准备好commit
然后 dcommit
再到trunk
如果你没有对master进行任何提交,那就意味着它git merge mybranch
是一个快进的提交:master HEAD
只需转移到mybranch HEAD
.
这可以解释为什么git svn dcommit
推动你的改变SVN mybranch
.
它会:
mybranch
尚未提交的最后一个Git 提交更新相应的SVN分支,我不认为master没有改变它的引用,但是如果你有疑问(并且你的工作目录是干净的),你可以(如果master当前已经检出):
git reset --hard remotes/trunk
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10159 次 |
最近记录: |