2010-10-26 31 views
13

Tôi tin rằng tựa đề nói nó. Tôi mới đến thingy kiểm soát nguồn.Hai người, đồng thời chỉnh sửa cùng một tệp được xử lý như thế nào?

Vì vậy, giả sử tôi có hai nhà phát triển làm việc trên cùng một dự án và họ bắt đầu chỉnh sửa cùng một tệp, đồng thời mọi người trong số họ gửi phiên bản mới vào một thời điểm hơi khác. Từ những gì tôi hiểu một trong những người gửi các thay đổi cuối cùng sẽ có những thay đổi của mình giữ, mã của người khác sẽ được lưu trữ chỉ !!!

Điều đó có đúng không?

Vui lòng làm rõ. Cảm ơn.

Trả lời

29

Không, điều đó không hoàn toàn chính xác. Nó phụ thuộc phần nào vào phần mềm điều khiển phiên bản bạn đang sử dụng, nhưng tôi thích Git vì vậy tôi sẽ nói về điều đó.

Giả sử chúng ta có một Foo.java file:

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

Alice và Bob cả sửa đổi các tập tin. Alice thực hiện điều này:

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

và Bob thực hiện điều này:

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

Alice kiểm tra phiên bản của cô trong lần đầu tiên. Khi Bob cố gắng kiểm tra anh ta, Git sẽ cảnh báo anh ta rằng có xung đột và sẽ không cho phép cam kết được đẩy vào kho lưu trữ chính. Bob phải cập nhật kho lưu trữ cục bộ của mình và khắc phục xung đột. Ông sẽ nhận được một cái gì đó như thế này:

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> 
    } 
} 

Các <<<<<, =====>>>>> dấu hiển thị mà dòng đã được thay đổi cùng một lúc. Bob phải giải quyết xung đột theo một số cách hợp lý, loại bỏ các điểm đánh dấu và cam kết kết quả.

Vì vậy, những gì cuối cùng tồn tại trong kho lưu trữ là:

Phiên bản gốc -> Phiên bản của Alice -> Phiên bản xung đột cố định của Bob.

Để tóm tắt: người đầu tiên cam kết tham gia mà không gặp bất kỳ vấn đề gì, người thứ hai cam kết phải giải quyết xung đột trước khi vào kho lưu trữ. Bạn không bao giờ nên kết thúc với những thay đổi của ai đó đang bị tự động ghi lại. Rõ ràng Bob có thể giải quyết cuộc xung đột không chính xác nhưng vẻ đẹp của kiểm soát phiên bản là bạn có thể khôi phục lại sửa chữa và sửa lỗi không chính xác.

+0

Bạn nói nó độc đáo! Claps :-) –

4

Phần lớn phụ thuộc vào hệ thống bạn đang sử dụng.

Tuy nhiên trong trường hợp phổ biến là: ai cam kết thay đổi thứ hai của mình sẽ phải thực hiện thao tác "hợp nhất". Có nghĩa là anh ta sẽ cần phải so sánh hai tập tin và đưa ra một phiên bản hợp nhất. Tuy nhiên (!) Nhiều hệ thống phổ biến (bao gồm IDE) đi kèm với các công cụ thông minh để hỗ trợ bạn thực hiện điều đó.

Dưới đây là một số công cụ như thế so sánh: http://en.wikipedia.org/wiki/Comparison_of_file_comparison_tools

Các vấn đề liên quan