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?


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.


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   
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.