2010-05-26 32 views
7

Trong ClearCase ác sinh đôi xảy ra khi hai tập tin được tìm thấy với cùng tên trong hai phiên bản khác nhau của thư mục, và Nếu phần tử OIDs khác nhau nhưng tên là như nhau.GIT có vấn đề sinh đôi độc ác không?

Trong GIT, id SHA1 luôn là duy nhất và tệp có cùng tên luôn có ID SHA1 khác nhau.

Chúng tôi không có khái niệm về cặp song sinh Ác ma, nhưng có khả năng có 2 hoặc nhiều nhà phát triển tạo tệp có nội dung khác nhau có cùng tên tệp trong cùng một thư mục. Trong quá trình hợp nhất, khi cả hai tệp hoàn toàn khác nhau, có nhiều cơ hội để nhà phát triển duy trì thay đổi của mình một mình và để lại các thay đổi khác dẫn đến mất mã.

Bất cứ ai có thể cho tôi biết nếu có vấn đề trong GIT tương tự như ClearCase hoặc sin mỗi SHA1 id là duy nhất sẽ không có bất kỳ vấn đề sinh đôi nào trong GIT.

+0

Bạn tiểu sử nói: "ClearCase Admin Researching on GIT"? Tôi đang làm điều tương tự !! ;) – VonC

+0

:) Tôi đã tham gia ClearCase trong 3,5 năm qua và bây giờ chúng tôi đang chuyển từ CC sang GIT. Vì vậy, tôi đã thử các tùy chọn khác nhau trong GIT và kiểm tra xem các vấn đề trong CC có xảy ra trong GIt hay không. Và Von, câu trả lời của bạn cho hầu hết các câu hỏi thực sự hữu ích, cảm ơn một tấn. –

+0

"bây giờ chúng tôi đang chuyển từ CC sang GIT" Bạn thật may mắn. Tôi đang cố gắng lén Git trong công ty của tôi. Sau hơn 8 năm ClearCase, và Subversion (và thỉnh thoảng Perforce hoặc CM Synergy), điều này là mới mẻ;) – VonC

Trả lời

7

Git không theo dõi ở cấp độ của toàn bộ cây, không phải các tệp và thư mục riêng lẻ, do đó, nó không có khái niệm như một OID. Khi kết hợp lịch sử bao gồm các thay đổi không tương thích với một tệp (ví dụ: cả hai đã thêm tệp mới có nội dung khác nhau), Git sẽ tạo xung đột hợp nhất và dừng để người dùng giải quyết xung đột hoặc hủy hợp nhất.

Tất nhiên, Git không thể ép buộc người dùng thực hiện hợp nhất làm điều đúng, nhưng có lẽ khó khăn hơn nhiều khi bỏ qua một bên của cuộc xung đột. Trong Git, xung đột sẽ nằm trong chính tệp đó, không phải trong thư mục chứa tệp. Nói cách khác, xung đột sẽ là về nội dung của tập tin thay vì OID nên được liên kết vào thư mục.Tất nhiên, tùy thuộc vào công cụ được sử dụng, người dùng có thể vẫn chỉ nhấn "lấy mặt của tôi trong tất cả các xung đột", nhưng Git sẽ không quan tâm đến ít nhất (mặc dù ông chủ và đồng nghiệp lười biếng có thể quan tâm rất nhiều!).

0

Lỗi lỗi đôi ác, điều đó sẽ đưa tôi trở lại. Không, bạn không nên có bất kỳ lỗi như vậy trong git. Git không thực sự theo dõi toàn bộ tập tin rất nhiều vì nó theo dõi khối của các tập tin.

+0

Git thực sự theo dõi toàn bộ tệp (trong phần trình bày dữ liệu kho lưu trữ). Tuy nhiên, các công cụ được xây dựng trên kho lưu trữ được tự do xuất hiện như thể nó theo dõi các khối (nếu chúng chọn). –

+1

Hãy xem git community book (http://book.git-scm.com/1_the_git_object_model.html) hoặc Pro Git (http://progit.org/book/ch9-2.html) để xem Greg nói về. Git thực sự theo dõi toàn bộ tệp hoặc nếu bạn thích, nội dung của toàn bộ tệp. – Cascabel

3

Không, nhưng có detached head. Xin lỗi, không thể giúp bản thân mình :)

Điều gì sẽ xảy ra là tệp sẽ xuất hiện dưới dạng mâu thuẫn khi nhà phát triển thứ hai kéo trước khi thực hiện đẩy. Khi các tập tin hoàn toàn khác, nó sẽ chảy máu rõ ràng là chúng phải có các tên tập tin khác nhau. Sau đó, nhà phát triển thứ hai sẽ làm điều gì đó (tức là đổi tên tệp của anh ta để không có xung đột).

3

Có, có một số loại hoạt động "ác" trong Git, nhưng không phải vì lý do tương tự so với evil twins of ClearCase:

Họ được gọi là evil merge:

một merge giới thiệu những thay đổi không xuất hiện trong bất kỳ phụ huynh nào.

I.e: đặt những thứ trong mã mà không ai yêu cầu ở đó, được đặt tên là 'kết hợp xấu' bởi vì nó là trường hợp góc khó cho "git đổ lỗi" để giải quyết khi chú thích tệp.
Các hợp nhất này thường liên quan đến một số semantic conflict giữa hai phiên bản hợp nhất (và không phải là xung đột văn bản đơn giản).
Một tác dụng phụ sẽ được điều đó, thay vì thêm, loại bỏ hoặc sửa đổi một dòng thay đổi, bạn kết thúc với cả hai dòng, (từ hai phiên bản là sáp nhập) trong kết quả hợp nhất ...

+0

Vâng, như tôi đã nhận xét [có] (http://stackoverflow.com/q/1461909/85371) nó không phải là một hiện tượng Git nhiều; đúng hơn là một cách không được khuyên để làm việc với Git. Git có rất nhiều sức mạnh để bạn làm những việc thường xuyên nhất bạn không nên! – sehe

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