2012-03-29 43 views
6

Một người bạn và tôi đang làm việc riêng rẽ trong một dự án. Lúc đầu, tôi đã đẩy một thư mục có tên là old-name và anh ta kéo nó ra. Ở giữa nó, tôi quyết định đổi tên thư mục old-name thành new-name để phân biệt tốt hơn với các dự án khác (chỉ cần nói old-name quá chung chung và new-name cụ thể hơn). Vì vậy, tôi đã nói với bạn bè của tôi để đổi tên thư mục dự án của mình thành new-name. Và sau đó chúng tôi đang làm việc một cách riêng biệt.Các vấn đề về đổi tên Git

Bây giờ, anh ta đã đẩy những gì anh ta đã thực hiện vào máy chủ từ xa (dưới thư mục new-name), khi tôi cố gắng rút từ máy chủ, tất cả các xung đột (đổi tên/thêm) xảy ra và dường như có thêm một bản sao của mỗi tệp dự án new-name ngay bây giờ.

new-name/index.php (MINE) 
new-name/index.php~98789491981agsagasga98a914a98wt (his commit ID I believe) 

Câu hỏi của tôi là, làm thế nào chúng ta có thể giải quyết vấn đề này mà không có vấn đề đổi tên xung đột git này? Tất nhiên tôi có thể giải quyết xung đột theo cách thủ công, nhưng có quá nhiều tệp để kiểm tra và xóa vì bản sao bổ sung mới này mà git đã kéo vào repo của tôi.

Cảm ơn

Trả lời

0

Bạn nên kéo xuống một bản sao làm việc mới vào một thư mục địa phương mới, ngay bên cạnh mã bạn làm việc trên đầu. Sau đó, sử dụng Diff style tool để so sánh và hợp nhất công việc của bạn vào bản sao cục bộ mới. Sau đó, cam kết thay đổi trên kéo xuống mới và bam, bạn có những thay đổi của bạn cam kết. Tôi biết điều này không lưu tất cả các thay đổi của bạn đăng nhập vào những gì bạn đã làm, nhưng nếu làm nó bằng tay không phải là một lựa chọn này là điều tốt nhất tiếp theo.

1

Chỉ cần thêm tất cả các tệp của bạn. Bất cứ điều gì đó là một đổi tên đơn giản sẽ được xác định là không có sự khác biệt và loại bỏ khỏi chỉ mục. Vì vậy, mặc dù một 'trạng thái git' cho thấy tải và tải các vấn đề, sau khi 'git add -A' sẽ còn lại một số ít (và tất cả những gì còn lại sẽ có những khác biệt thực). Bạn nên kiểm tra một chi nhánh mới ngay lập tức (trước khi 'git add -A') để bạn có thể dễ dàng quay lại nếu nó đi về phía nam.

1

Chỉ cần đoán, nhưng có vẻ như tôi giống như phát hiện đổi tên của Git đã không phát hiện ra các đổi tên khi hợp nhất. Có nhiều tệp trong thư mục này không? Tất cả các tệp đã được sửa đổi nhiều chưa?

Thử làm lại quá trình hợp nhất/kéo sau khi tăng giá trị của các cài đặt cấu hình merge.renameLimit hoặc diff.renameLimit. Từ git help config:

diff.renameLimit 
    The number of files to consider when performing the copy/rename 
    detection; equivalent to the git diff option -l. 

merge.renameLimit 
    The number of files to consider when performing rename detection 
    during a merge; if not specified, defaults to the value of 
    diff.renameLimit. 

Bạn cũng có thể thử các -Xrename-threshold=70 để giảm ngưỡng phát hiện đổi tên giống nhau. Từ git help merge (cũng trong git help pull):

rename-threshold=<n> 
    Controls the similarity threshold used for rename detection. 
    See also git-diff(1) -M. 

từ git help diff:

-M[<n>], --find-renames[=<n>] 
    Detect renames. If n is specified, it is a threshold on the 
    similarity index (i.e. amount of addition/deletions compared to the 
    file’s size). For example, -M90% means git should consider a 
    delete/add pair to be a rename if more than 90% of the file hasn’t 
    changed. 

Lưu ý rằng tôi không chắc chắn những gì sẽ xảy ra khi kết thúc dòng được chuyển đổi giữa kiểu Unix và phong cách Windows. Git có thể nghĩ rằng các tệp khác nhau 100% ngay cả khi sự khác biệt duy nhất là kết thúc dòng, vì vậy hãy đảm bảo cả hai đều sử dụng cùng một kết thúc dòng.

+0

Bạn có thể yêu cầu git bỏ qua các thay đổi khoảng trắng, giải quyết vấn đề kết thúc dòng. Xem thêm http://stackoverflow.com/questions/861995/is-it-possible-for-git-merge-to-ignore-line-ending-differences –

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