2010-08-08 34 views
17

我使用git進行源代碼控制,並將我的更改推送到Internet上的服務器上的存儲庫中以便安全保存。連接不可靠的「git」有多安全?

我可以在火車上的筆記本電腦上做一些少量的編碼,它有一個無線互聯網連接,但它不是,那可靠,偶爾會退出或變得無法使用緩慢。我的問題是如果我的連接在「git push」過程中丟失會發生什麼?我最終是否會損壞或更新一半的git存儲庫?如果是這樣,它有多難恢復呢?

+0

我會想象它的SVN和它的一個事務..所以如果更新失敗,存儲庫中的任何內容都不會改變。我對此沒有足夠的瞭解以獲得正確的答案 – WalterJ89 2010-08-08 08:09:31

+0

我也希望如此,但很想知道:) – jcoder 2010-08-08 08:13:23

回答

15

Git不會因爲連接失敗或連接速度緩慢而損壞或「半更新」Git存儲庫。它非常強大,即使在最艱苦的環境下,我仍然可以使用它。

實際push功能在本質上是兩個步驟來實現(在快速向前推進的情況下,應該始終如此):

  • 上傳所有對象從當前的分公司負責,而不是到達從遠程分支頭可達
  • 更新遠程分支頭指向最新提交

的第一個操作是冪等的,因此,如果由於某種原因失敗一半,你可以簡單地再次運行它讓一切都保持最新。第二個操作是原子操作,只有在所有新對象上傳後纔會發生。

+0

如果推送在第一步中的大量更新過程中失敗(由於conn丟失),git會在連接恢復時從哪裏停止,或重新開始? – 2011-07-14 19:17:23

+0

@Mark Elliot:對象可以單獨傳送或「包裝」傳送。如果連接失敗,我認爲不完整的包文件將存儲在目的地,但個別對象可能是。 – 2011-07-14 19:51:52

+0

@Mark Elliot:它會重新開始,git使用refs(在第二步中更新)來確定它應該發送的內容。有關詳細信息,請參閱Documentation/technical/send-pack-pipeline.txt。 – CesarB 2011-09-09 07:48:23

5

根據Linus的說法,git在數據區域的安全性非常好,甚至可以在運行的系統上檢測到內存錯誤。它不會應用到達服務器的包含無效校驗和的數據包,因此您無需擔心。

+0

如果我有幾個本地更改推送,我可以確定它不會應用其中的一些,但不會其他? – jcoder 2010-08-08 08:28:30