Git'in bir dosyayı ikili olarak işlemesini nasıl sağlarım?


104

Görsel stüdyo proje dosyalarının metin olarak işlemesi ve birleştirilmesi nedeniyle sorun yaşamaya devam ettiği orta ölçekli bir projede sorun yaşıyorsanız. Dosyayı ikili olarak ayarlamak istiyorum, böylece git bu dosyaları asla otomatik olarak birleştirmez.

Bunu yapmanın bir yolu var mı?


2
Ancak Visual Studio proje dosyaları metin dosyalarıdır ve birleştirilmeleri gerekir mi?
CB Bailey

1
@CharlesBailey Periyodik olarak mümkün olan en kötü şekilde birleşecekler ve tüm yapılarınızı alt üst edecekler. XML ile uğraşmak istemiyorum, benden manuel olarak yeni dosyalar eklememi veya muhtemelen bunun nasıl düzgün bir şekilde işleneceğini bilen bir XML ayırma aracını çalıştırmamı istemesini istiyorum.
michael.bartnett

1
@ michael.bartnett: Sadece birleştirmeyi bozarsan, kesinlikle?
CB Bailey

1
@CharlesBailey Tabii ki manuel olarak birleştiriyorsam sorun değil. Ancak bu, manuel olarak birleştirmem gereken bir şey değil. Bu genellikle bir yapı öğesi ekleme / kaldırma / düzenleme ... tamamen otomatik olarak birleştirilebilir, ancak her satır için normal fark yöntemiyle değil. Fikir hakkında daha fazla bilgi için bu sunuma göz atın .
michael.bartnett

@ michael.bartnett: O halde daha iyi bir birleştirme sürücüsü kurun. Bahsettiğim nokta (10 ay önce) proje dosyalarının birleştirilebilmesi ve birleştirilmesi gerektiğiydi. Kişisel olarak, tamamen elle yapmaktansa makul bir makine girişimini düzeltmeyi tercih ederim, bu gereksiz bir iş gibi görünüyor.
CB Bailey

Yanıtlar:


138

Evet, öznitelikler kullanılıyor . .gitattributesDosyanıza buna benzer bir şey koyun (yoksa oluşturun):

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

İşte binarybir önceden tanımlanmış makro aslında eşdeğer -diff -merge -text.

Farkı hala görebilmek istiyorsanız, şunları kullanabilirsiniz:

*.sln -merge -text

Bu şekilde, *.slndosyalar birleştirilmeyecek, eol normalize edilmeyecek, ancak bu arada değiştirilebilir.


1
bu dosya nerede
neves

@neves Her yerde, verilen yanıtta bağlantı tarafından sağlanan belgelere göre bir gitignore dosyası bulunabilir.
Michael Wild

4
@neves: Deponuzda yerel olarak veya örneğin global olarak bir tane yapmalısınız ~/.gitattributesve sonra koşmalısınız git config --global core.attributesfile ~/.gitattributesbkz. stackoverflow.com/questions/28026767/…
jan-glx

Otomatik olarak birleştirilmezlerse bu dosyalara ne olur? Bir sürüm seçildi mi yoksa manuel olarak birleştirmeniz mi gerekiyor?
ClydeTheGhost

1
@ClydeTheGhost birini seçmeniz gerekecek.
Michael Wild

7

Dosyanızın .gitattributesmetin diff dosyası olarak işlemesini önlemek için dosyanıza şu satırları koyarak ikili dosya özniteliklerini tanımlamalısınız (yoksa oluşturun):

# 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   
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.