Come faccio a fare in modo che Git tratti un file come binario?


104

Problemi con un progetto di medie dimensioni in cui i file di progetto di Visual Studio continuano ad avere problemi a causa del fatto che git li tratta come testo e si fondono. Vorrei semplicemente impostare il file come binario in modo che git non unisca automaticamente questi file mai.

C'è un modo per fare questo?


2
Ma i file di progetto di Visual Studio sono file di testo e devono essere uniti?
CB Bailey

1
@CharlesBailey Si fonderanno periodicamente nel peggior modo possibile, rovinando tutte le tue build. Non voglio giocherellare con l'XML, voglio che mi chieda di aggiungere manualmente nuovi file o possibilmente anche di eseguire uno strumento di differenza XML che sappia come gestirlo correttamente.
michael.bartnett

1
@ michael.bartnett: Solo se sbagli la fusione, sicuramente?
CB Bailey

1
@CharlesBailey Ovviamente se sto unendo manualmente non è un problema. Ma non è qualcosa che dovrei dover unire manualmente. Di solito è un elemento di build aggiungi / rimuovi / modifica ... che è totalmente auto-unibile, ma non con il solito metodo diff per riga. Dai un'occhiata a questa presentazione per ulteriori informazioni sulla nozione.
michael.bartnett

@ michael.bartnett: imposta un driver di unione migliore, quindi. Il punto che stavo facendo (10 mesi fa) era che i file di progetto possono e devono essere uniti. Personalmente, preferisco di gran lunga riparare un ragionevole tentativo di macchina piuttosto che farlo totalmente a mano, che sembra un lavoro non necessario.
CB Bailey

Risposte:


135

Sì, utilizzando gli attributi . Metti qualcosa del genere nel tuo .gitattributesfile (crealo se non esiste):

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

Ecco in binaryrealtà una macro predefinita , equivalente a -diff -merge -text.

Se vuoi essere ancora in grado di vedere il diff, puoi usare:

*.sln -merge -text

In questo modo, i *.slnfile non verranno uniti, non saranno normalizzati eol, ma nel frattempo diff-in grado.


1
dov'è questo file?
neves

@neves Ovunque è possibile trovare un file gitignore, come da documentazione fornita dal collegamento nella risposta data.
Michael Wild

4
@neves: devi fare uno, sia a livello locale nel vostro repo o a livello mondiale come ad esempio ~/.gitattributese quindi eseguire git config --global core.attributesfile ~/.gitattributesvedere stackoverflow.com/questions/28026767/...
jan-GLX

Cosa succede a questi file se non vengono uniti automaticamente? È stata scelta una versione o devi unirla manualmente?
ClydeTheGhost

1
@ClydeTheGhost dovrai sceglierne uno.
Michael Wild

6

Dovresti definire gli attributi del file binario nel tuo .gitattributesfile (crearlo se non esiste) inserendovi queste linee, per evitare che lo gestisca come file di testo 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   
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.