Comment faire pour que Git traite un fichier comme un fichier binaire?

104

Avoir un problème avec un projet de taille moyenne où les fichiers de projet de Visual Studio continuent d'avoir des problèmes en raison du fait que git les traite comme du texte et fusionne. Je voudrais simplement définir le fichier comme binaire afin que git ne fusionne jamais automatiquement ces fichiers.

Y a-t-il un moyen de faire cela?

Charles Randall
la source
2
Mais les fichiers de projet Visual Studio sont des fichiers texte et doivent-ils être fusionnés?
CB Bailey
1
@CharlesBailey Ils fusionneront périodiquement de la pire manière possible, en ruinant toutes vos constructions. Je ne veux pas jouer avec le XML, je veux qu'il me demande d'ajouter manuellement de nouveaux fichiers ou peut-être même d'exécuter un outil XML différent qui sait comment gérer cela correctement.
michael.bartnett
1
@ michael.bartnett: Seulement si vous gâchez la fusion, sûrement?
CB Bailey
1
@CharlesBailey Bien sûr, si je fusionne manuellement, ce n'est pas un problème. Mais ce n'est pas quelque chose que je devrais avoir à fusionner manuellement. C'est généralement un élément de construction ajouter / supprimer / modifier ... qui est totalement auto-fusionnable, mais pas par la méthode habituelle de diff par ligne. Consultez cette présentation pour en savoir plus sur la notion.
michael.bartnett
@ michael.bartnett: Configurez un meilleur pilote de fusion, alors. Le point que je disais (il y a 10 mois) était que les fichiers de projet peuvent et doivent être fusionnés. Personnellement, je préfère de loin réparer une tentative de machine raisonnable que de le faire entièrement à la main, cela semble être un travail inutile.
CB Bailey

Réponses:

136

Oui, en utilisant des attributs . Mettez quelque chose comme ça dans votre .gitattributesfichier (créez-le s'il n'existe pas):

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

Voici en binaryfait une macro prédéfinie , équivalente à -diff -merge -text.

Si vous voulez toujours pouvoir voir le diff, vous pouvez utiliser:

*.sln -merge -text

De cette façon, les *.slnfichiers ne seront pas fusionnés, ne seront pas normalisés, mais en attendant diff-able.

Michael Wild
la source
1
où est ce fichier?
neves
@neves Partout, un fichier gitignore peut être localisé, selon la documentation fournie par le lien dans la réponse donnée.
Michael Wild
4
@neves: vous devez en créer un, soit localement dans votre dépôt, soit globalement comme par exemple ~/.gitattributes, puis en cours d'exécution, git config --global core.attributesfile ~/.gitattributesvoir stackoverflow.com/questions/28026767/…
jan-glx
Qu'arrive-t-il à ces fichiers s'ils ne sont pas automatiquement fusionnés? Une version est-elle sélectionnée ou devez-vous fusionner manuellement?
ClydeTheGhost
1
@ClydeTheGhost vous devrez en choisir un.
Michael Wild
6

Vous devez définir les attributs de fichier binaire dans votre .gitattributesfichier (créez-le s'il n'existe pas) en y mettant ces lignes, pour l'empêcher de le traiter comme un fichier de différence de texte:

# 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
la source