2010-10-26 154 views
13

我相信標題說明了這一點。我是新來源控制thingy。如何處理兩個人同時編輯同一個文件?

因此,假設我有兩個開發人員在同一個項目上工作,他們開始同時編輯相同的文件,然後每個人都在稍微不同的時間發送新版本。根據我的理解,最後發送更改的人將保留其更改,另一個人的代碼將僅存檔!

這是正確的嗎?

請說明。謝謝。

回答

29

不,這不完全正確。這取決於你使用的版本控制軟件,但我喜歡Git,所以我會談論這個。

假設我們有一個文件Foo.java:

class Foo { 
    public void printAWittyMessage() { 
     // TODO: Be witty 
    } 
} 

Alice和Bob都修改文件。愛麗絲做到這一點:

class Foo { 
    public void printAWittyMessage() { 
     System.out.println("Alice is the coolest"); 
    } 
} 

和Bob做到這一點:

class Foo { 
    public void printAWittyMessage() { 
     System.out.println("Alice is teh suk"); 
    } 
} 

愛麗絲首先檢查她的版本。當Bob試圖檢查他的進入時,Git會警告他存在衝突並且不允許提交被推入主存儲庫。鮑勃必須更新他的本地存儲庫並修復衝突。他會得到這樣的:

class Foo { 
    public void printAWittyMessage() { 
<<<<< HEAD:<some git nonsense> 
     System.out.println("Alice is the coolest"); 
===== 
     System.out.println("Alice is teh suk"); 
>>>>> blahdeblahdeblah:<some more git nonsense> 
    } 
} 

<<<<<=====>>>>>標記表明該行同時被改變。鮑勃必須以某種合理的方式解決衝突,刪除標記並提交結果。

那麼最終住在倉庫是:

原始版本 - >愛麗絲的版本 - >鮑勃的衝突固定的版本。

總結:第一個提交沒有任何問題,第二個提交必須在進入存儲庫之前解決衝突。你永遠不應該結束某人的變化被自動破壞。顯然,Bob可以不正確地解決衝突,但版本控制的優點在於您可以回滾不正確的修復程序並對其進行修復。

+0

你說的好聽!拍手:-) – 2013-02-15 11:18:56

4

很大程度上取決於您使用的系統。

然而,在一般情況下,誰承諾他的更改將不得不執行「合併」操作。意味着他/他需要比較這兩個文件並提出一個合併版本。然而(!)許多流行的系統(包括IDE)都附帶了智能工具來幫助你做到這一點。

這裏有一些工具,如相比: http://en.wikipedia.org/wiki/Comparison_of_file_comparison_tools