2010-11-15 79 views
7

我正在使用git-svn橋接器,並在我的存儲庫中重新編排了大量文件,因此它的組織性能更好一些。是否安全地中斷似乎掛斷的dcommit呼叫?

我運行了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存儲庫中找到,但在洗牌後留空的目錄未被刪除。我不得不使用我的SVN客戶端刪除它們。我不確定這是一個git-svn的事情還是因爲dcommit調用期間的HTTPS超時。

我仍然不知道答案:是否打斷dcommit調用安全?

+1

如果你想讓git-svn刪除空目錄,你應該使用'--rmdir'命令行選項或'svn.rmdir'配置選項。 – ninjalj 2010-11-15 20:55:09

+0

至於你的主要問題,你可能應該在git郵件列表上詢問,可能是抄送git-svn的作者。 – ninjalj 2010-11-15 20:56:12

+0

謝謝@ninjalj - 我會試試郵件列表。 – 2010-11-15 20:56:52

回答

5

是的,它是安全的。

dcommit基本上做到這一點每個提交你推到SVN:

  1. 計算的承諾與其父之間的差異。 (本質上,爲提交創建補丁。)
  2. 通過SVN協議發送此差異作爲要提交的更改集。一旦完成,提交現在位於SVN服務器上。
  3. 獲取新提交以及其他用戶在此期間創建的任何其他新提交,並將它們本地存儲爲適當的Git提交。 git-svn分支ref將被更新爲指向最新的一個。
  4. 在剛剛處理的git-svn分支引用之後重新提交所有提交。 (由於提交正在處理,現在應該住在服務器上,這將導致本地提交剛處理被丟棄,按照任何其他底墊。)

如果第2步中中斷(這是什麼聽起來像),那麼當前的提交將在svn服務器上中止。你應該可以不用擔心再次提交。但是,如果你是偏執狂(你應該是在像這樣的VCS之間進行互操作時),你可能首先需要運行git svn rebase。這將拉下SVN上的任何新提交(包括您嘗試推送的提交,如果它實際上成功地在服務器端)並重新綁定您的本地分支。

+0

謝謝@cdhowie。超時終於回到我的提示後,我確實嘗試了rebase。希望我能抓住我從它那裏得到的錯誤。它不願意從SVN服務器更新我的本地git repo。如果我可以重新創建它,我會發布錯誤。 – 2010-11-16 20:46:25

+0

這是一個直接的錯誤還是隻是一個補丁衝突? – cdhowie 2010-11-16 20:47:05

+0

這是一個衝突,但我無法弄清楚如何解決它。我最終使用'svn'驗證提交,然後用另一個'git svn clone'調用從頭開始重新創建本地git存儲庫。 – 2010-11-17 14:57:27