当前位置:  开发笔记 > 开发工具 > 正文

Git Svn dcommit错误 - 重启提交

如何解决《GitSvndcommit错误-重启提交》经验,为你挑选了3个好方法。

上周,我在离开城镇周末之前对当地分公司进行了一些修改.今天早上我想将所有这些更改推迟到公司的Svn存储库,但是我在一个文件中遇到了合并冲突:

提交期间合并冲突:您的文件或目录"build.properties.sample"可能已过时:版本资源与事务中的资源不对应.请求的版本资源已过期(需要更新),或者请求的版本资源比事务根更新(重新启动提交).

我不确定为什么我会得到这个,但在尝试dcommit之前,我做了一个git svn rebase.那"覆盖"了我的承诺.为了从中恢复,我做了一个git reset --hard HEAD @ {1}.现在我的工作副本似乎是我期望的那样,但我不知道如何通过合并冲突; 实际上我找不到任何可以解决的冲突.

任何想法将不胜感激.

编辑:只是想说明我在本地工作.我有一个引用svn/trunk(远程分支)的trunk的本地分支.我的所有工作都是在本地干线上完成的:

$ git branch
  maint-1.0.x
  master
  * trunk
$ git branch -r
  svn/maintenance/my-project-1.0.0
  svn/trunk

类似地,git log当前在我的本地主干上显示了自上次提交Svn ID以来的10次提交.

希望能回答几个问题.

再次感谢.



1> sfossen..:

你应该已经创建了一个本地分支,并完成了它的工作,然后当你回来时,你更新master,rebase到本地分支,合并回master然后dcommit.

所以我会尝试复制这些更改,以备份它们.

从has svn同步点创建本地分支,在那里合并您的更改.然后退出master分支中的更改,fetch,rebase到分支,从本地分支合并,修复任何冲突,然后dcommit.

$ git checkout -b backup    # create a local backup branch with all your work
$ git checkout master   
$ git checkout -b backup2   # 2nd copy just to be safe
$ git checkout master
$ git reset --hard  # clean up master to make the svn merge easier
$ git svn fetch    # this should update to the current version on the svn server
$ git rebase master backup  # may get a conflict here, fix and commit
... # after conflict is fixed and commited
$ git checkout master 
$ git merge backup --ff  # merge in your local commits
$ git svn dcommit        # push back to the svn

您可以在这里获得更多信息

您可能感兴趣的另一个答案.

git-svn工作流文章

文章



2> Rob Wilkerso..:

非常感谢VonC和sfassen对我的非凡耐心,解决方案有点自我解决.我不知道怎么或为什么,但也许我最初的rebase不起作用.为了解决这个问题,我最终再次进行了改变.从我当地的主干分行:

$ git co -b backup  # backup the commits to my local trunk
$ git co trunk      # return to the local trunk
$ git svn rebase    # rebase the trunk from the Svn server
$ git br -d backup  # delete the backup branch

当然,关键是这次改造工作.我不知道为什么它在我第一次做的时候不起作用,但我不能回滚时间,所以我不会纠缠它.

再次感谢大家对新手的建议和耐心.



3> VonC..:

为了完成sfossen的优秀答案,这里有一些细节:

使用时git-svn,默认情况下会获得名为master的本地分支.你不应该对它做任何工作,只使用svn trunk分支与它保持同步:

git svn fetch 从本地主干分支上的svn trunk分支获取历史记录:它不会在您的工作目录中应用这些修改

git checkout master 打开后备箱分支(仅当您在另一个分支上时)

git rebase trunk 将master与trunk同步.

但是,所有修改都应该在另一个本地分支上完成(让我们调用它local-devel).

git branch local-devel

git checkout local-devel

如果您有紧急修复方法:

git checkout master :swith on master(),

git svn fetch&& git rebase trunk用svn trunk更新它

git branch fastfix && git checkout fastfix分支吧

修复bug,编译,测试,

git commit -a:本地提交,

git svn dcommit 更新远程svn repo的修改

git checkout master && git rebase trunk:再次更新master

git branch -D fastfix:删除修补程序分支

git checkout local-devel && git rebase master:回到dev,在你的开发分支上重播的主人更新的历史记录

一开始有点麻烦,但比svn diff以后应用的文件更舒服.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有