ฉันจะทำให้ Git ถือว่าไฟล์เป็นไบนารีได้อย่างไร


104

มีปัญหากับโปรเจ็กต์ขนาดกลางที่ไฟล์โปรเจ็กต์วิชวลสตูดิโอมักมีปัญหาเนื่องจากคอมไพล์ถือว่าเป็นข้อความและรวมเข้าด้วยกัน ฉันต้องการตั้งค่าไฟล์เป็นไบนารีเพื่อที่ git จะไม่รวมไฟล์เหล่านี้โดยอัตโนมัติ

มีวิธีทำไหม?


2
แต่ไฟล์โครงการ Visual Studio เป็นไฟล์ข้อความและจำเป็นต้องรวมเข้าด้วยกันหรือไม่?
CB Bailey

1
@CharlesBailey พวกเขาจะรวมเข้าด้วยกันเป็นระยะ ๆ ในวิธีที่เลวร้ายที่สุดเท่าที่จะทำได้ ฉันไม่ต้องการเล่นกับ XML ฉันต้องการให้มันขอให้ฉันเพิ่มไฟล์ใหม่ด้วยตนเองหรืออาจเรียกใช้เครื่องมือที่แตกต่างของ XML ที่รู้วิธีจัดการอย่างถูกต้อง
michael.bartnett

1
@ michael.bartnett: เฉพาะในกรณีที่คุณสับสนในการผสานใช่หรือไม่?
CB Bailey

1
@CharlesBailey แน่นอนถ้าฉันรวมเข้าด้วยตนเองก็ไม่ใช่ปัญหา แต่นั่นไม่ใช่สิ่งที่ฉันควรต้องผสานด้วยตนเอง โดยปกติจะเป็นการเพิ่ม / ลบ / แก้ไขไอเท็มบิวด์ ... ซึ่งสามารถผสานอัตโนมัติได้ทั้งหมด แต่ไม่ใช่วิธีการแตกต่างกันตามปกติ ลองดูการนำเสนอนี้เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับแนวคิดนี้
michael.bartnett

@ michael.bartnett: ตั้งค่าไดรเวอร์การผสานที่ดีขึ้นแล้ว ประเด็นที่ฉันทำ (10 เดือนที่แล้ว) คือไฟล์โครงการสามารถและควรรวมเข้าด้วยกัน โดยส่วนตัวแล้วฉันชอบที่จะแก้ไขความพยายามของเครื่องจักรที่สมเหตุสมผลมากกว่าที่จะทำด้วยมือทั้งหมดซึ่งดูเหมือนจะไม่จำเป็น
CB Bailey

คำตอบ:


136

ใช่ใช้แอตทริบิวต์ ใส่สิ่งนี้ใน.gitattributesไฟล์ของคุณ(สร้างขึ้นหากไม่มี):

*.sln binary
*.suo binary
*.vcxproj binary

นี่binaryคือมาโครที่กำหนดไว้ล่วงหน้าซึ่งเทียบเท่ากับ-diff -merge -text.

หากคุณยังคงสามารถเห็นความแตกต่างคุณสามารถใช้:

*.sln -merge -text

ด้วยวิธีนี้*.slnไฟล์จะไม่ถูกรวมเข้าด้วยกันไม่มี eol normalized แต่ในขณะเดียวกันก็สามารถแตกต่างกันได้


1
ไฟล์นี้อยู่ที่ไหน
neves

@neves ทุกที่ที่สามารถหาไฟล์ gitignore ได้ตามเอกสารที่ลิงค์ในคำตอบที่ระบุ
Michael Wild

4
@neves: คุณต้องสร้างมันขึ้นมาไม่ว่าจะใน repo ของคุณหรือทั่วโลกเช่น~/.gitattributesจากนั้นเรียกใช้git config --global core.attributesfile ~/.gitattributesดูstackoverflow.com/questions/28026767/…
ม.ค. -glx

จะเกิดอะไรขึ้นกับไฟล์เหล่านี้หากไม่รวมเข้าด้วยกันโดยอัตโนมัติ มีการเลือกเวอร์ชันหนึ่งหรือคุณต้องรวมด้วยตนเอง?
ClydeTheGhost

1
@ClydeTheGhost คุณจะต้องเลือกหนึ่ง
Michael Wild

6

คุณควรกำหนดแอตทริบิวต์ของ.gitattributesไฟล์ไบนารีในไฟล์ของคุณ(สร้างขึ้นมาหากไม่มี) โดยใส่บรรทัดเหล่านี้ไว้เพื่อป้องกันไม่ให้จัดการเป็นไฟล์ text diff:

# Define binary file attributes.
# - Do not treat them as text.
# - Include binary diff in patches instead of "binary files differ."
*.sln     -text diff
*.suo     -text diff
*.vcxproj -text diff
*.gif     -text diff
*.gz      -text diff
*.ico     -text diff
*.jpeg    -text diff   
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.