7

我正在使用 git-svn 桥,并在我的存储库中重新排列了大量文件,因此它的组织更好一些。

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

> 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 调用安全吗?

4

1 回答 1

5

是的,它是安全的。

dcommit基本上为您推送到 SVN的每个提交执行此操作:

  1. 计算提交与其父级之间的差异。(本质上,为提交创建一个补丁。)
  2. 通过 SVN 协议将此差异作为要提交的变更集发送。完成后,提交现在位于 SVN 服务器上。
  3. 获取新提交以及其他用户在此期间创建的任何其他新提交,并将它们存储在本地作为正确的 Git 提交。git-svn 分支 ref 将更新为指向最新的分支。
  4. 在刚刚处理的提交到提交到的 git-svn 分支 ref 之后,重新设置所有提交。(由于正在处理的提交现在应该存在于服务器上,这将导致刚刚处理的本地提交被丢弃,就像任何其他变基一样。)

如果您在第 2 步期间中断(听起来就是这样),那么当前提交将在 svn 服务器上中止。您应该可以放心地再次提交。

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

于 2010-11-16T03:53:02.220 回答