中断似乎挂断的dcommit呼叫是否安全?

时间:2010-11-15 17:53:35

标签: git git-svn dcommit

我正在使用git-svn网桥并在我的存储库中重新调整了大量文件,因此它的组织结构更好。

我运行git svn dcommit将更改放回SVN服务器,并且该过程似乎已挂起。在过去的45分钟内,我没有使用CPU和dcommit电话没有网络使用。输出卡在:

> git svn dcommit
...snip...
     R       zlib/vs2005/zconf.h => tools/zlib/vs2005/zconf.h
     R       zlib/vs2005/zlib.h => tools/zlib/vs2005/zlib.h
     R       zlib/vs2005/zlib_ds.lib => tools/zlib/vs2005/zlib_ds.lib
     R       zlib/vs2005/zlib_ds.pdb => tools/zlib/vs2005/zlib_ds.pdb
     R       zlib/vs2005/zlib_s.lib => tools/zlib/vs2005/zlib_s.lib
     R       zlib/vs2005/zlib_s.pdb => tools/zlib/vs2005/zlib_s.pdb

这就是现在约45分钟的地方。

编辑:它最终结束说HTTPS连接已超时。这花了大约一个半小时才发生。

我似乎无法找到任何关于如果我中断此dcommit调用将会发生什么以及在我尝试再次从本地存储库重新提交更改之前我需要做什么的确切信息。 SVN服务器。

我可以回答我的问题的一部分:在再次尝试之前我需要做什么?

在连接超时并返回我的提示后,我必须先执行git svn fetch才能再次运行git svn dcommit。我的所有重命名操作都在SVN存储库中找到,但是在shuffle之后留空的目录没有被删除。我不得不使用我的SVN客户端删除它们。我不确定这是git-svn还是因为在dcommit调用期间的HTTPS超时。

我仍然不知道答案:中断dcommit通话是否安全?

1 个答案:

答案 0 :(得分:5)

是的,这是安全的。

dcommit基本上为每次提交 推送到SVN:

  1. 计算提交与其父级之间的差异。 (基本上,为提交创建补丁。)
  2. 通过SVN协议发送此差异作为要提交的变更集。完成后,提交现在将存在于SVN服务器上。
  3. 获取新提交以及其他用户在此期间创建的任何其他新提交,并将它们作为正确的Git提交存储在本地。 git-svn分支引用将更新为指向最新版本。
  4. 将刚刚处理完的所有提交重新引用到提交的git-svn分支ref之后。 (由于正在处理的提交现在应该存在于服务器上,这将导致刚刚处理的本地提交被丢弃,根据任何其他rebase。)
  5. 如果你在第2步中断(这听起来像是这样),那么当前的提交将在svn服务器上中止。你应该可以毫无顾虑地再次提出。

    但是,如果你是偏执狂(你应该像这样在VCS之间进行互操作),你可能想先运行git svn rebase。这将删除SVN上的任何新提交(包括您尝试推送的提交,如果它实际上在服务器端成功)并在其上重新定位您的本地分支。