Git Svn DCOMIT错误-重新启动提交

Git Svn DCOMIT错误-重新启动提交,git,git-svn,Git,Git Svn,上周,我在离开小镇去度周末之前,对我在当地的分行做了一些变动。今天早上,我想将所有这些更改提交到公司的Svn存储库,但在一个文件中出现了合并冲突: 提交期间合并冲突:您的文件或目录“build.properties.sample”可能已过期:版本资源与事务中的资源不对应。请求的版本资源已过期(需要更新),或者请求的版本资源比事务根目录更新(重新启动提交) 我不知道为什么会这样,但在尝试dcommit之前,我做了一个git-svn-rebase。“重写”我的承诺。为了从中恢复过来,我做了一个git

上周,我在离开小镇去度周末之前,对我在当地的分行做了一些变动。今天早上,我想将所有这些更改提交到公司的Svn存储库,但在一个文件中出现了合并冲突:

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

我不知道为什么会这样,但在尝试dcommit之前,我做了一个git-svn-rebase。“重写”我的承诺。为了从中恢复过来,我做了一个git重置--hard HEAD@{1}。现在我的工作副本似乎在我期望的地方,但我不知道如何克服合并冲突;实际上我找不到任何需要解决的冲突

如有任何想法,将不胜感激

编辑:只是想指定我在本地工作。我有一个引用svn/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次提交

希望这能回答一些问题


再次感谢。

您应该创建一个本地分支,并完成这方面的工作,然后当您返回时,更新主分支,重新设置本地分支的基础,合并回主分支,然后执行DCOMIT

$ 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 <this is the revision of the last svn-id> # 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
因此,我会尝试复制这些更改,以进行备份

从has svn同步点创建本地分支,并在其中合并更改。然后退出主分支中的更改、获取、重新设置分支的基础、从本地分支合并、修复任何冲突,然后进行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 <this is the revision of the last svn-id> # 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 checkout-b backup#创建一个包含所有工作的本地备份分支
$git签出主机
$git checkout-b备份2#为了安全起见,第二份副本
$git签出主机
$git reset--硬#清理主机以简化svn合并
$git svn fetch#这应该更新到svn服务器上的当前版本
$git rebase主备份#此处可能会发生冲突,请修复并提交
... # 冲突解决并提交后
$git签出主机
$git merge backup--ff#在本地提交中合并
$git svn dcommit#推回到svn
你可以得到更多的信息

另一个你可能感兴趣的

git svn工作流文章

要完成,以下是一些详细信息:

使用
gitsvn
,默认情况下会得到一个名为master的本地分支。您不应该对其进行任何操作,只需使用以下工具使其与svn主干分支保持最新:

  • git svn fetch
    从本地主干分支上的svn主干分支获取历史记录:它不会对工作目录应用这些修改
  • git checkout master
    打开主干分支(仅当您在另一个分支上时)
  • git重新设置主干的基址
    以将主机与主干同步
但是,所有修改都应该在另一个本地分支上完成(我们称之为
localdevel

  • git分行本地开发者
  • git checkout local devel
如果您有紧急修复需要执行:

  • git签出主机
    :在主机上切换()
  • git-svn-fetch
    &&
    git-rebase-trunk
    使用svn-trunk更新它
  • git branch fastfix和&git checkout fastfix
    ,分支it
  • 修复bug,编译,测试
  • git提交-a
    :本地提交
  • git svn dcommit
    更新对远程svn回购的修改
  • git签出主机和&git重基中继线
    :再次更新主机
  • git分支-D fastfix
    :删除热修复分支
  • git checkout-local-devel&&git-rebase-master
    :返回dev,在dev分支上重播master上完成的更新历史记录

一开始这有点麻烦,但比以后应用的文件中的svn diff要舒服得多。

非常感谢VonC和sfassen对我的非凡耐心,解决方案自行解决了。我不知道怎么做或者为什么,但也许我最初的重定基础没有起作用。为了解决这个问题,我又重新定了基调。从我当地的主干分支:

$ 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
当然,关键是这一次的再基础起了作用。我不知道为什么我第一次做的时候它不起作用,但是我不能把时间倒转,所以我就不去想它了


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

我想发表评论,但认为这值得更多关注

git svn rebase
应该重新编写提交。从描述和评论中,我得到的印象是,在您重新设置基址后,您将旧的提交重新置于顶部。提交必须替换为不冲突的新版本


为了避免翻阅reflog,您可能希望养成在执行
git svn dcommit
之前快速标记的习惯。dcommit成功后,删除标记。如果标记失败,您可以执行
git重置--hard
,然后执行
git merge
。重新运行rebase以恢复历史记录,重新标记并重新提交数据。

我也遇到过类似的情况。我在一个坏的网络连接上执行了一个git svn dcommit
。我发现问题是由足总引起的
git svn rebase
git svn dcommit