Git mergetool tạo các tệp .orig không mong muốn


486

Khi tôi thực hiện giải quyết xung đột hợp nhất với Kdiff3 (và công cụ hợp nhất khác tôi đã thử) tôi nhận thấy rằng trên độ phân giải, một *.origtệp được tạo. Có cách nào để nó không tạo tập tin bổ sung đó không?

Câu trả lời:


771

Một giải pháp khả thi từ git config:

git config --global mergetool.keepBackup false

Sau khi thực hiện hợp nhất, tệp gốc có dấu xung đột có thể được lưu dưới dạng tệp có .origphần mở rộng.
Nếu biến này được đặt thành falsethì tệp này không được bảo tồn.
Mặc định truelà (tức là giữ các tệp sao lưu).

Thay thế là không thêm hoặc bỏ qua các tệp đó, như được đề xuất trong bài viết gitguru này ,

git mergetoollưu phiên bản hợp nhất xung đột của tệp với .orighậu tố ở quy mô.
Hãy chắc chắn xóa nó trước khi thêm và cam kết hợp nhất hoặc thêm *.origvào của bạn .gitignore.

Berik gợi ý trong các ý kiến để sử dụng:

find . -name \*.orig 
find . -name \*.orig -delete

Charles Bailey khuyên trong câu trả lời của mình nên biết về các cài đặt công cụ tìm khác biệt bên trong cũng có thể tạo ra các tệp sao lưu đó, bất kể cài đặt git là gì.

  • kdiff3 có các cài đặt riêng (xem " Hợp nhất thư mục " trong hướng dẫn sử dụng).
  • các công cụ khác như WinMerge có thể có phần mở rộng tệp sao lưu riêng (WinMerge : .bak, như được đề cập trong hướng dẫn sử dụng ).

Vì vậy, bạn cần phải thiết lập lại các cài đặt là tốt.


7
@Sophistifunk: điểm tốt. Tôi đã chỉnh sửa câu trả lời để sử dụng dấu hiệu thích hợp.
VonC

10
Chỉnh sửa cài đặt trong kdiff tự nó hoạt động với tôi: Cài đặt> Cấu hình Kdiff3> Thư mục. Bỏ chọn hộp có nhãn "Tệp sao lưu (.orig)"
kmgdev

2
git config --global mergetool.keepBackup false, Đã giải quyết cho P4Merge trên Mavericks 10.9.2. Cảm ơn :)
kpsfoo

1
@Sander Cảm ơn bạn. Tôi đã khôi phục liên kết.
VonC

5
Lưu ý rằng nếu bạn đang chỉnh sửa thủ công .gitconfig của mình, bạn muốn bên keepBackup = falsedưới [mergetool], không phải bên dưới [mergetool "BeyondCompare4"]hoặc bất kỳ công cụ hợp nhất trực quan nào bạn đã định cấu hình.
TrueWill

85

Bạn phải cẩn thận một chút với việc sử dụng kdiff3git mergetoolcó thể được cấu hình để lưu .origtệp trong khi hợp nhất, hành vi mặc định kdiff3là cũng .origlưu tệp sao lưu độc lập vớigit mergetool .

Bạn phải chắc chắn rằng mergetoolsao lưu đã tắt:

git config --global mergetool.keepBackup false

và cũng là cài đặt của kdiff3 được đặt thành không tạo bản sao lưu:

Configure/Options => Directory Merge => Backup Files (*.orig)

4
Configure/Options => Directory Merge => Backup Files (*.orig)thực sự đã giúp loại bỏ tất cả các io-nô lệ lạ, klauncher «» giao thức không xác định và không thể tạo ra các lỗi .orig. cảm ơn bạn
Geremia

2
Tại sao git config --global mergetool.keepBackup falsephải đặt?
Lão máu

1
hãy để tôi sửa dòng đầu tiên của bạn "Bạn phải có một chút điên rồ khi sử dụng kdiff3" - ở đó :-)
Tim Jarvis

@TimJarvis Tôi sử dụng kdiff3 mọi lúc và tôi thích nó. Tôi tự hỏi liệu có lý do nào để gọi nó là "hơi điên khi sử dụng kdiff3" hay nếu đó chỉ là trò đùa (tôi thấy khuôn mặt cười, tôi cũng sẽ không bị xúc phạm, tôi tha thiết hỏi)
Quinn Wilson

35

Để rõ ràng, lệnh git chính xác là:

git config --global mergetool.keepBackup false

Cả hai câu trả lời khác đều có lỗi chính tả trong dòng lệnh sẽ khiến nó bị lỗi hoặc không hoạt động chính xác.


32

Tùy chọn lưu tệp .orig có thể bị vô hiệu hóa bằng cách định cấu hình KDiff3

Tùy chọn tệp sao lưu KDiff3 .orig


2
Đây nên là giải pháp thực sự.
Gondy

Làm việc cho tôi. Cảm ơn bạn rất nhiều @ richard-pierre
Andrew

Tôi đã có cấu hình git toàn cầu được đặt đúng nhưng vẫn có các tệp .orig trên rebase / merge, vv Các cài đặt Kdiff3 cuối cùng đã thực hiện thủ thuật.
Cécile Fecherolle

25

Tôi sử dụng điều này để dọn sạch tất cả các tệp kết thúc bằng ".orig":

function git-clean-orig {
    git status -su | grep -e"\.orig$" | cut -f2 -d" " | xargs rm -r
}

Nếu bạn là một con mèo đáng sợ :) bạn có thể bỏ phần cuối cùng chỉ để liệt kê chúng (hoặc bỏ qua -rnếu bạn muốn phê duyệt mỗi lần xóa):

function git-show-orig {
    git status -su | grep -e"\.orig$" | cut -f2 -d" "
}

1
Hoàn toàn hữu ích nếu bạn vẫn muốn sao lưu cho đến khi bạn sẵn sàng cam kết.
Kelly

5
Bạn cũng có thể thêm * .orig trong .gitignore ở cấp cao nhất nếu bạn tiếp tục sao lưu hợp nhất xung quanh.
Ville

11

Tôi chỉ đơn giản là sử dụng lệnh

git clean -n *.orig

kiểm tra để đảm bảo chỉ có tệp tôi muốn xóa được liệt kê sau đó

git clean -f *.orig

1
Một mẹo hay! Sẽ tốt hơn nếu bạn cũng thêm các câu trả lời khác liên quan đến cài đặt gitconfig (từ các câu trả lời khác).
AzP

10

Bên cạnh các câu trả lời đúng được cung cấp dưới dạng giải pháp dài hạn, bạn có thể sử dụng git để xóa tất cả các tệp không cần thiết một lần cho bạn bằng git clean -flệnh nhưng sử dụnggit clean --dry-run trước để đảm bảo không có gì ngoài ý muốn xảy ra.

Điều này có lợi ích của việc sử dụng chức năng được tích hợp sẵn của Git qua các tập lệnh cụ thể cho HĐH / shell của bạn để xóa các tệp.


4
Có, nhưng hãy cẩn thận vì lệnh này thực hiện nhiều hơn là xóa các tệp .orig.
kghastie

4

Hoặc chỉ cần thêm

* .orig

đến gitignore toàn cầu của bạn


3
git config --global mergetool.keepBackup false

Điều này cũng hoạt động cho Beyond So sánh (dưới dạng mergetool)


0

Các cửa sổ:

  1. trong tập tin Win/Users/HOME/.gitconfigbộmergetool.keepTemporaries=false
  2. trong Tệp git/libexec/git-core/git-mergetool, trong hàm cleanup_temp_files()thêm vào rm -rf -- "$MERGED.orig"trong khối khác.

1
Xem câu trả lời được chấp nhận. Điều này sửa đổi các công cụ cốt lõi và không thể mở rộng.
oligofren
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.