Jak sprawić, by Git traktował plik jako binarny?

104

Problem z projektem średniej wielkości, w którym pliki projektów programu Visual Studio wciąż mają problemy z powodu traktowania ich przez git jako tekstu i scalania. Chciałbym po prostu ustawić plik jako binarny, aby git nigdy nie łączył automatycznie tych plików.

Czy jest na to sposób?

Charles Randall
źródło
2
Ale pliki projektów programu Visual Studio są plikami tekstowymi i czy muszą zostać scalone?
CB Bailey
1
@CharlesBailey Będą one okresowo łączyć się w najgorszy możliwy sposób, psując wszystkie twoje kompilacje. Nie chcę majstrować przy XML-u, chcę, aby poprosił mnie o ręczne dodanie nowych plików lub nawet uruchomienie narzędzia do porównywania XML, które wie, jak poprawnie sobie z tym poradzić.
michael.bartnett
1
@ michael.bartnett: Tylko jeśli zepsujesz scalanie, na pewno?
CB Bailey
1
@CharlesBailey Oczywiście, jeśli łączę ręcznie, nie stanowi to problemu. Ale to nie jest coś, co powinienem ręcznie scalać. Zwykle jest to dodawanie / usuwanie / edycja elementu budowania ... które jest całkowicie automatycznie scalane, ale nie za pomocą zwykłej metody różnic na linię. Sprawdź tę prezentację, aby uzyskać więcej informacji na ten temat.
michael.bartnett
@ michael.bartnett: Skonfiguruj więc lepszy sterownik scalający. Chodziło mi o to (10 miesięcy temu), że pliki projektów można i należy łączyć. Osobiście wolę naprawić rozsądną próbę maszyny niż zrobić to całkowicie ręcznie, co wydaje się niepotrzebną pracą.
CB Bailey

Odpowiedzi:

135

Tak, używając atrybutów . Umieść coś takiego w swoim .gitattributespliku (utwórz go, jeśli nie istnieje):

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

W binaryrzeczywistości jest to wstępnie zdefiniowane makro , odpowiednik -diff -merge -text.

Jeśli nadal chcesz widzieć różnicę, możesz użyć:

*.sln -merge -text

W ten sposób *.slnpliki nie zostaną scalone, nie będą znormalizowane eol, ale w międzyczasie będą się różniły.

Michael Wild
źródło
1
gdzie jest ten plik?
neves
@neves Wszędzie można znaleźć plik gitignore, zgodnie z dokumentacją dostarczoną przez link w podanej odpowiedzi.
Michael Wild
4
@neves: musisz go utworzyć, lokalnie w swoim repozytorium lub globalnie, jak np., ~/.gitattributesa następnie uruchomić, git config --global core.attributesfile ~/.gitattributespatrz stackoverflow.com/questions/28026767/ ...
jan-glx
Co się stanie z tymi plikami, jeśli nie zostaną automatycznie scalone? Czy wybrano jedną wersję, czy też musisz scalić ręcznie?
ClydeTheGhost
1
@ClydeTheGhost musisz wybrać jeden.
Michael Wild
6

Powinieneś zdefiniować atrybuty pliku binarnego w swoim .gitattributespliku (utwórz go, jeśli nie istnieje), umieszczając w nim te linie, aby uniemożliwić obsługę go jako tekstowego pliku różnicowego:

# 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   
Omar Alahmed
źródło