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?

Akeem
sumber

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.

VONC
sumber
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)
CB Bailey
sumber
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.

John
sumber
32

Opsi untuk menyimpan file .orig dapat dinonaktifkan dengan mengkonfigurasi KDiff3

KDiff3 Cadangkan file .orig opsi

xx1xx
sumber
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" "
}
kghastie
sumber
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
Rodneyk
sumber
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.

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

Atau tambahkan saja

* .orig

ke gitignore global Anda

cd491415
sumber
3
git config --global mergetool.keepBackup false

Ini harus bekerja untuk Beyond Compare (sebagai mergetool) juga

Atul
sumber
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.
michal
sumber
1
Lihat jawaban yang diterima. Ini memodifikasi alat inti dan tidak dapat diskalakan.
oligofren