2014-04-17 17 views
10

Tôi đang cố gắng để thêm một chiến lược hợp nhất tùy chỉnh tương tự như một trong câu hỏi này: Git merge conflict to always take the newest filegit: Làm cách nào để thêm chiến lược hợp nhất tùy chỉnh?

tôi đã lưu các tập lệnh như git-merge-latest.sh và thêm các dòng sau để .git/config:

[merge "latest"] 
    name = select latest file merge driver 
    driver = git-merge-latest.sh %O %A %B 

Tuy nhiên, khi tôi chạy git pull --strategy latest, tôi nhận được thông báo:

Could not find merge strategy 'latest'. 
Available strategies are: octopus ours recursive resolve subtree. 

tôi đã thử kiểm tra git config merge.latest.driver, mà trả về sản lượng dự kiến. Tôi cũng đã thay đổi giá trị của driver thành true chỉ để xác minh rằng đó không phải là vấn đề khi tìm tập lệnh.

Điều này xảy ra trên hai hệ thống khác nhau chạy git 1.8.2.2 và 1.7.9.5. Tôi đang làm gì sai?

Trả lời

18

Trong trường hợp này, bạn không cấu hình một chiến lược merge, bạn đã cấu hình một tài xế merge:

Một chiến lược hợp nhất là một chương trình mà xác định cách hai (hoặc nhiều hơn) cam được sáp nhập . Theo mặc định, git merge sử dụng chiến lược "đệ quy", được tìm thấy trong chương trình git-merge-recursive. Bằng cách chỉ định cờ --strategy <strategy> cho git-merge (hoặc git-pull), bạn hãy yêu cầu nó gọi một chiến lược khác. Nếu bạn muốn cắm chiến lược hợp nhất của riêng mình, bạn có thể, bằng cách tạo một tệp thực thi git-merge-mystrategy trong đường dẫn của bạn và chạy git merge --strategy mystrategy.

Điều này khác với trình điều khiển hợp nhất . Trình điều khiển hợp nhất là cơ chế được sử dụng để giải quyết xung đột trên một tệp tồn tại khi hợp nhất hai cam kết. Bạn cắm trình điều khiển hợp nhất của riêng bạn theo cách bạn đã phác thảo, bằng cách định cấu hình cài đặt merge.mydriver.driver.

Để kích hoạt tài xế hợp nhất của bạn cho một tập tin cụ thể, bạn cần phải cấu hình trình điều khiển cho tập tin đó trong .gitattributes:

filename merge=mydriver 
+0

Có thể muốn một cách rõ ràng nêu rằng việc thêm một chiến lược hợp nhất là một vấn đề sửa đổi 'git 'mã - nó không phải là một cái gì đó có thể được thực hiện thông qua thay đổi cấu hình (ít nhất là hiện tại) ... – twalberg

+1

@twalberg - bạn có thể cắm của riêng bạn khá dễ dàng, thực sự; nếu bạn có một 'git-merge-xyz' trong đường dẫn của bạn thì git sẽ chạy nó nếu bạn' git merge --strategy xyz'. Tôi sẽ làm rõ hơn trong câu trả lời của tôi. –

+2

Đặc điểm kỹ thuật về cách viết một chiến lược hợp nhất git thực thi được ghi lại ở bất kỳ đâu? Những gì tôi nên mong đợi trên stdin, và những gì nên được đầu ra? –

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