Git mergetool menghasilkan file .orig yang tidak diinginkan


486

Ketika saya melakukan resolusi konflik gabungan dengan Kdiff3 (dan alat menggabungkan lainnya saya mencoba) saya perhatikan bahwa pada resolusi *.origfile dibuat. Apakah ada cara untuk tidak membuat file tambahan itu?

Jawaban:


771

Solusi yang mungkin dari git config:

git config --global mergetool.keepBackup false

Setelah melakukan penggabungan, file asli dengan penanda konflik dapat disimpan sebagai file dengan .origekstensi.
Jika variabel ini diatur ke falsemaka file ini tidak disimpan.
Default ke true(yaitu menyimpan file cadangan).

Alternatifnya adalah tidak menambah atau mengabaikan file-file itu, seperti yang disarankan dalam artikel gitguru ini ,

git mergetoolmenyimpan versi gabungan-konflik dari file dengan .origakhiran " ".
Pastikan untuk menghapusnya sebelum menambahkan dan melakukan penggabungan atau menambahkan *.origke Anda .gitignore.

Berik menyarankan dalam komentar untuk menggunakan:

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

Charles Bailey menyarankan dalam jawabannya untuk mewaspadai pengaturan internal alat berbeda yang juga dapat menghasilkan file cadangan tersebut, tidak peduli apa pengaturan git.

  • kdiff3 memiliki pengaturannya sendiri (lihat " Direktori gabungan " dalam manualnya).
  • alat lain seperti WinMerge dapat memiliki ekstensi file cadangan sendiri (WinMerge:, .bakseperti yang disebutkan dalam manualnya ).

Jadi, Anda perlu mengatur ulang pengaturan itu juga.


7
@Sophistifunk: poin bagus. Saya telah mengedit jawaban untuk menggunakan tanda yang tepat.
VonC

10
Mengedit pengaturan di kdiff sendiri berfungsi untuk saya: Pengaturan> Konfigurasi Kdiff3> Direktori. Hapus centang pada kotak berlabel "File cadangan (.orig)"
kmgdev

2
git config --global mergetool.keepBackup false, Diselesaikan untuk P4Merge pada Mavericks 10.9.2. Terima kasih :)
kpsfoo

1
@Sander Terima kasih. Saya telah memulihkan tautannya.
VonC

5
Perhatikan bahwa jika Anda mengedit .gitconfig secara manual, Anda ingin bagian keepBackup = falsebawah [mergetool], bukan bagian bawah [mergetool "BeyondCompare4"]atau alat penggabungan visual apa pun yang telah Anda konfigurasikan.
TrueWill

85

Anda harus sedikit berhati-hati dengan menggunakan kdiff3karena sementara git mergetooldapat dikonfigurasi untuk menyimpan .origfile selama penggabungan, perilaku default untuk kdiff3adalah juga menyimpan .origfile cadangan secara terpisah git mergetool.

Anda harus memastikan mergetoolcadangan tidak aktif:

git config --global mergetool.keepBackup false

dan juga bahwa pengaturan kdiff3 diatur untuk tidak membuat cadangan:

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

4
Configure/Options => Directory Merge => Backup Files (*.orig)benar-benar membantu menyingkirkan semua io-slave, protokol yang tidak dikenal «aneh», dan tidak bisa membuat kesalahan .orig. terima kasih
Geremia

2
Kenapa git config --global mergetool.keepBackup falseharus diatur?
Geremia

1
biarkan saya memperbaiki baris pertama Anda "Anda harus sedikit gila menggunakan kdiff3" - di sana :-)
Tim Jarvis

@TimJarvis Saya menggunakan kdiff3 sepanjang waktu dan saya menyukainya. Saya ingin tahu apakah ada alasan untuk menyebutnya "sedikit gila untuk menggunakan kdiff3" atau jika itu hanya bercanda (saya melihat wajah yang tersenyum, saya tidak akan tersinggung dengan cara apa pun, saya sungguh-sungguh bertanya)
Quinn Wilson

35

Agar jelas, perintah git yang benar adalah:

git config --global mergetool.keepBackup false

Kedua jawaban lainnya memiliki kesalahan ketik pada baris perintah yang akan menyebabkannya gagal atau tidak berfungsi dengan benar.


32

Opsi untuk menyimpan file .orig dapat dinonaktifkan dengan mengkonfigurasi KDiff3

KDiff3 Cadangkan file .orig opsi


2
Ini harus menjadi solusi nyata.
Gondy

Bekerja untukku. Terima kasih banyak @ richard-pierre
Andrew

Saya sudah memiliki konfigurasi git global yang diatur dengan benar tetapi masih memiliki file .orig pada rebase / merge dll. Pengaturan Kdiff3 akhirnya berhasil.
Cécile Fecherolle

25

Saya menggunakan ini untuk membersihkan semua file yang diakhiri dengan ".orig":

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

Jika Anda adalah kucing yang ketakutan :) Anda bisa membiarkan bagian terakhir hanya untuk daftar mereka (atau tinggalkan -rjika Anda ingin menyetujui setiap penghapusan):

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

1
Sangat berguna jika Anda masih menginginkan cadangan hingga Anda siap untuk berkomitmen.
Kelly

5
Anda juga dapat menambahkan * .orig in .gitignore di tingkat atas jika Anda terus menggabungkan cadangan.
Ville

11

Saya hanya menggunakan perintah

git clean -n *.orig

periksa untuk memastikan hanya file yang ingin saya hapus yang terdaftar

git clean -f *.orig

1
Tip yang bagus! Akan lebih baik jika Anda juga menambahkan jawaban lain mengenai pengaturan gitconfig (dari jawaban lain).
AzP

10

Selain jawaban yang benar yang ditawarkan sebagai solusi jangka panjang, Anda dapat menggunakan git untuk menghapus semua file yang tidak perlu satu kali untuk Anda dengan git clean -fperintah tersebut tetapi gunakan git clean --dry-runterlebih dahulu untuk memastikan tidak ada yang tidak diinginkan akan terjadi.

Ini memiliki manfaat menggunakan fungsionalitas built-in Git yang teruji atas skrip khusus untuk OS / shell Anda untuk menghapus file.


4
Ya, tetapi berhati-hatilah karena perintah ini lebih dari sekadar menghapus file .orig.
kghastie


3
git config --global mergetool.keepBackup false

Ini harus bekerja untuk Beyond Compare (sebagai mergetool) juga


0

Windows:

  1. dalam Win/Users/HOME/.gitconfigKumpulan filemergetool.keepTemporaries=false
  2. di File git/libexec/git-core/git-mergetool, dalam fungsi cleanup_temp_files()tambah rm -rf -- "$MERGED.orig"dalam blok lain.

1
Lihat jawaban yang diterima. Ini memodifikasi alat inti dan tidak dapat diskalakan.
oligofren
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.