Git mergetool สร้างไฟล์. orig ที่ไม่ต้องการ


486

เมื่อฉันทำการแก้ไขข้อขัดแย้งผสานกับ Kdiff3 (และเครื่องมือการผสานอื่น ๆ ที่ฉันลอง) ฉันสังเกตว่าการแก้ไข*.origไฟล์ถูกสร้างขึ้น มีวิธีที่จะไม่สร้างไฟล์พิเศษหรือไม่?

คำตอบ:


771

ทางออกที่เป็นไปได้จากgit config:

git config --global mergetool.keepBackup false

หลังจากทำการผสานไฟล์ต้นฉบับที่มีตัวทำเครื่องหมายความขัดแย้งสามารถบันทึกเป็นไฟล์ที่มี.origนามสกุล
หากตัวแปรนี้ถูกตั้งค่าfalseเป็นไฟล์นี้จะไม่ถูกสงวนไว้
ค่าเริ่มต้นเป็นtrue(เช่นเก็บไฟล์สำรองข้อมูล)

ที่ถูกทางเลือกที่ไม่เพิ่มหรือละเว้นไฟล์เหล่านั้นได้รับการแนะนำในเรื่องนี้บทความ gitguru ,

git mergetoolบันทึกเวอร์ชันผสานไฟล์ที่ขัดแย้งกันด้วย.origส่วนต่อท้าย“”
ตรวจสอบให้แน่ใจที่จะลบมันก่อนที่จะเพิ่มและการกระทำการผสานหรือเพิ่มที่คุณ*.orig.gitignore

Berikแนะนำในความคิดเห็นที่จะใช้:

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

Charles Baileyให้คำแนะนำในคำตอบของเขาให้ระวังการตั้งค่าเครื่องมือ diff ภายในซึ่งสามารถสร้างไฟล์สำรองข้อมูลเหล่านั้นได้

  • kdiff3 มีการตั้งค่าของตัวเอง (ดู " การผสานไดเรกทอรี " ในคู่มือ)
  • เครื่องมืออื่น ๆ เช่น WinMerge สามารถมีนามสกุลไฟล์สำรองของตัวเองได้ (WinMerge: .bakตามที่กล่าวไว้ในคู่มือ )

ดังนั้นคุณต้องรีเซ็ตการตั้งค่าเหล่านั้นด้วย


7
@Sophistifunk: จุดดี ฉันได้แก้ไขคำตอบเพื่อใช้เครื่องหมายที่ถูกต้อง
VonC

10
การแก้ไขการตั้งค่าใน kdiff นั้นใช้ได้สำหรับฉัน: การตั้งค่า> กำหนดค่า Kdiff3> ไดเรกทอรี ยกเลิกการทำเครื่องหมายที่ช่องชื่อ "ไฟล์สำรอง (.orig)"
kmgdev

2
git config --global mergetool.keepBackup falseแก้ไขเพื่อ P4Merge บน Mavericks 10.9.2 ขอบคุณ :)
kpsfoo

1
@ พูดขอบคุณ ฉันได้คืนลิงค์
VonC

5
โปรดทราบว่าหากคุณแก้ไข. gitconfig ด้วยตนเองคุณต้องการkeepBackup = falseภายใต้[mergetool]ไม่อยู่ภายใต้[mergetool "BeyondCompare4"]หรือเครื่องมือผสานภาพใด ๆ
TrueWill

85

คุณต้องใช้ความระมัดระวังเล็กน้อยkdiff3ในgit mergetoolการกำหนดค่าให้บันทึก.origไฟล์ระหว่างการรวมพฤติกรรมเริ่มต้นสำหรับkdiff3คือการบันทึก.origไฟล์สำรองgit mergetoolไว้ด้วย

คุณต้องตรวจสอบให้แน่ใจว่าการmergetoolสำรองข้อมูลถูกปิด:

git config --global mergetool.keepBackup false

และการตั้งค่าของ kdiff3 นั้นไม่ได้สร้างการสำรองข้อมูล:

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

4
Configure/Options => Directory Merge => Backup Files (*.orig)ช่วยกำจัดไอโอแปลก ๆ , klauncher «»โปรโตคอลที่ไม่รู้จักและไม่สามารถสร้างข้อผิดพลาด. orig ได้ ขอบคุณ
Geremia

2
ทำไมgit config --global mergetool.keepBackup falseต้องตั้งค่า?
Geremia

1
ให้ฉันแก้ไขบรรทัดแรกของคุณ "คุณจะต้องเป็นบ้าเล็กน้อยที่จะใช้ kdiff3" - :-) มี:
Tim Jarvis

@ TimJarvis ฉันใช้ kdiff3 ตลอดเวลาและฉันชอบ ฉันสงสัยว่ามีเหตุผลที่จะเรียกมันว่า "บ้าเล็กน้อยที่จะใช้ kdiff3" หรือถ้านั่นเป็นเพียงการล้อเล่น (ฉันเห็นหน้ายิ้มฉันจะไม่โกรธด้วยวิธีใดฉันจะถามอย่างจริงจัง)
Quinn Wilson

35

เพื่อให้ชัดเจนคำสั่ง git ที่ถูกต้องคือ:

git config --global mergetool.keepBackup false

คำตอบอื่น ๆ ทั้งสองมีคำผิดในบรรทัดคำสั่งที่จะทำให้มันล้มเหลวหรือทำงานไม่ถูกต้อง


32

ตัวเลือกในการบันทึกไฟล์. orig สามารถปิดใช้งานได้โดยการกำหนดค่า KDiff3

ตัวเลือกไฟล์. orig ของ KDiff3 สำรอง


2
นี่ควรเป็นทางออกที่แท้จริง
Gondy

ได้ผลสำหรับฉัน ขอบคุณมาก @ richard-pierre
Andrew

ฉันมีการตั้งค่า git ทั่วโลกแล้ว แต่ยังมีไฟล์. orig ใน rebase / merge เป็นต้นการตั้งค่า Kdiff3 ในที่สุดก็ใช้กลอุบาย
Cécile Fecherolle

25

ฉันใช้สิ่งนี้เพื่อล้างไฟล์ทั้งหมดที่ลงท้ายด้วย ".orig":

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

หากคุณเป็นแมวที่น่ากลัว :) คุณสามารถปล่อยส่วนสุดท้ายออกไปเพียงเพื่อแสดงรายการเหล่านั้น (หรือออก-rหากคุณต้องการอนุมัติการลบแต่ละรายการ):

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

1
มีประโยชน์อย่างยิ่งหากคุณยังต้องการสำรองข้อมูลจนกว่าคุณจะพร้อมที่จะส่งมอบ
เคลลี่

5
นอกจากนี้คุณยังสามารถเพิ่ม * .orig ใน. gitignore ที่ระดับบนสุดหากคุณทำการสำรองข้อมูลรวม
วิลล์

11

ฉันแค่ใช้คำสั่ง

git clean -n *.orig

ตรวจสอบเพื่อให้แน่ใจว่าไฟล์ที่ฉันต้องการลบเท่านั้นที่มีอยู่ในรายการ

git clean -f *.orig

1
เคล็ดลับที่ดี! มันจะดีถ้าคุณเพิ่มคำตอบอื่น ๆ เกี่ยวกับการตั้งค่า gitconfig (จากคำตอบอื่น ๆ )
AzP

10

นอกเหนือจากคำตอบที่ถูกต้องที่นำเสนอเป็นวิธีแก้ปัญหาระยะยาวแล้วคุณสามารถใช้ git เพื่อลบไฟล์ที่ไม่จำเป็นทั้งหมดได้เพียงครั้งเดียวสำหรับคุณด้วยgit clean -fคำสั่ง แต่ใช้git clean --dry-runก่อนเพื่อให้แน่ใจว่าไม่มีสิ่งใดเกิดขึ้นโดยไม่ตั้งใจ

สิ่งนี้มีประโยชน์ในการใช้ทดสอบการทำงานของ Git ผ่านสคริปต์เฉพาะสำหรับ OS / shell ของคุณเพื่อลบไฟล์


4
ใช่ แต่ต้องระวังให้มากเพราะคำสั่งนี้ทำมากกว่าลบไฟล์. orig
kghastie


3
git config --global mergetool.keepBackup false

สิ่งนี้น่าจะใช้ได้กับ Beyond Compare (ในฐานะ mergetool) เช่นกัน


0

ของ windows:

  1. ในWin/Users/HOME/.gitconfigชุดไฟล์mergetool.keepTemporaries=false
  2. ในไฟล์git/libexec/git-core/git-mergetoolในฟังก์ชั่นcleanup_temp_files()เพิ่มrm -rf -- "$MERGED.orig"ภายในบล็อกอื่น

1
ดูคำตอบที่ยอมรับได้ เครื่องมือนี้ปรับเปลี่ยนเครื่องมือหลักและไม่สามารถปรับขนาดได้
oligofren
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.