web-dev-qa-db-fra.com

Git ignore les modifications locales apportées à des portions de fichiers suivis

Plus précisément, je maintiens un référentiel git de mes fichiers dot. J'ai récemment commencé à travailler sur une nouvelle machine et à cloner mon référentiel sur la même chose.

Maintenant, je souhaite apporter quelques modifications à mes fichiers de points, qui sont spécifiques à ce système uniquement. Je souhaite ignorer ces modifications dans mon référentiel.

Les autres modifications que je fais devraient continuer à être suivies et validées. 

Par exemple, dans mon .gitconfig, j'ai un paramètre comme:

[Push]
   default = simple

Maintenant, sur ma nouvelle machine, la version de git utilisée est très ancienne. Il ne supporte toujours pas le paramètre simple pour Push. Donc, j'aimerais changer cela, mais seulement localement.

Cependant, si j'apporte d'autres modifications à mon fichier .gitconfig, j'aimerais en garder un suivi. Quoi qu'il en soit, je peux y arriver?

MODIFIER:
Je connais git update-index --assume-unchanged. Le problème, c'est que git ne suivra plus mon fichier du tout, jusqu'à ce que je l'inverse. Et ensuite, il suivra tous les changements.
Je souhaite ignorer certains changements et suivre le reste.

64
darnir

Je ne crois pas qu'il existe une commande spécifique qui «annulera» certaines modifications apportées à un fichier. Cependant, rien ne vous empêche de créer une branche locale dans laquelle vous extrayez les modifications de vos télécommandes, mais ne les renvoyez jamais.

8
Peter Bratton

Essayez d'utiliser cette commande:

git update-index --assume-unchanged FILENAME_TO_IGNORE

Pour l'inverser (si vous souhaitez jamais y apporter des modifications), utilisez:

git update-index --no-assume-unchanged

METTRE À JOUR:

Voici comment lister 'assume inchangé' fichiers dans le répertoire courant:

git ls-files -v | grep -E "^[a-z]"

Comme l'option -v utilisera des lettres minuscules pour les fichiers "supposés non modifiés".

160
atupal

Voici une solution alternative à votre problème spécifique. Placez la configuration machine-config dans un fichier ~/.gitconfig.local, puis indiquez ce qui suit dans votre ~/.gitconfig sous contrôle de version:

[include]
    path = ~/.gitconfig.local

Cela indiquera à Git de traiter tout ce qu'il trouve dans ~/.gitconfig.local comme s'il se trouvait dans ~/.gitconfig. Oui, vous pouvez remplacer les paramètres. Non, cela n’exige pas que le fichier existe (Git ignorera le paramètre en silence s’il n’ya pas de ~/.gitconfig.local).

Voir ici pour plus d’informations sur [include].

Je suis cette stratégie dans mes configurations pour Emacs, Zsh, Git, Tmux, etc., afin qu'elles soient personnalisables sans qu'il soit nécessaire de modifier les fichiers sous contrôle de version. Pour ce faire, j'ai init.local.el, .zshrc.local, .gitconfig.local, .tmux.local.conf, etc.

2
Radon Rosborough

Comme suggéré par Peter, vous pouvez conserver ces modifications spécifiques à une machine dans une branche. Évidemment, vous devrez faire attention à séparer strictement les modifications apportées à ces fichiers spécifiques à la machine de la "ligne principale". Il y a 2 façons de le faire:

  1. Continuez à rebaser la branche chaque fois que vous modifiez la ligne principale (ce serait ma préférence)
  2. Continuez à fusionner les modifications de la ligne principale dans la branche (mais évidemment jamais fusionner dans l'autre sens)
0
kynan