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

Ian*_* C. 7 git git-svn dcommit

我正在使用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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

cdh*_*wie 5

是的,这是安全的.

dcommit基本上这是你推送到SVN的每个提交:

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

如果你在第2步中断(这听起来像),那么当前的提交将在svn服务器上中止.你应该能够再次无需担心.

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