Git: ignorer les fichiers suivis

182

J'ai des fichiers suivis dans un référentiel qui sont automatiquement modifiés lors de la construction du code. Je ne veux pas les annuler, je ne veux simplement pas qu'ils apparaissent comme modifiés et je ne veux pas qu'ils soient mis en scène lorsque je git ajouter.

Est-ce possible?

Haymansfield
la source
7
duplication possible de git: puis-je valider un fichier et ignorer les changements de contenu?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
5
Si ces fichiers sont automatiquement générés par la construction, ils ne doivent pas être suivis dans git.
Codebling
Voici un petit tutoriel sur gitignore que vous pourriez trouver utile: learningpassion.wordpress.com/2016/06/17/…
joker

Réponses:

283

Sûr.

git update-index --assume-unchanged [<file> ...]

Pour annuler et recommencer le suivi:

git update-index --no-assume-unchanged [<file> ...]
Nick Veys
la source
3
Qu'arrive-t-il aux fichiers dans cet état si j'y apporte des modifications?
haymansfield
2
@haymansfield la page d'aide de la commande dit ce qui suitGit will fail (gracefully) in case it needs to modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is changed upstream, you will need to handle the situation manually.
Parham
3
Un moyen de postuler --assume-unchangedlors du clonage? Pour que tous les utilisateurs aient les fichiers, mais ne voient pas les modifications locales dans les diffs.
Gauthier
10
@Tyler - non, une fois qu'un fichier est suivi par git, il sera toujours suivi, même si ce fichier apparaît dans un .gitignore. Mon cas d'utilisation est quelque chose comme "voici un modèle de base d'un fichier dans lequel vous stockeriez vos informations d'identification, maintenant ne le validez plus".
Jon V
5
@watbywbarif J'ai la commande git update-index --no-assume-unchanged $(git ls-files $(git rev-parse --show-toplevel))définie comme un alias git. Chaque fois que je soupçonne que c'est certaines de ces manigances, je le fais.
Philippe Carphin
6

Une autre approche (à partir d'une réponse maintenant supprimée par Seth Robertson, mais je l'ai trouvé utile pour le ressusciter) est de maintenir un fichier modèle "suivi", puis d'en avoir une version locale non suivie, ex: "config.sample.ini" ou " config.ini.template "voir https://gist.github.com/canton7/1423106 pour un exemple complet.

Ensuite, il n'y aura aucun problème si le fichier est modifié dans git, etc. et vous pouvez utiliser .gitignore (enfin) sur les fichiers locaux non suivis.

rogerdpack
la source
5

Une autre solution utilisant les attributs git et% f dans la commande de filtre:

git config filter.orig.clean "cat %f.orig"
cp filename filename.orig
echo "filename filter=orig" >> .git/info/attributes
echo "filename.orig" >> .git/info/exclude
koct9i
la source
16
Pourriez-vous donner plus de détails sur ce que cela signifie et ce que cela fait par hasard?
rogerdpack
cela ajoute un filtre pour le fichier qui lit le contenu du fichier ".orig" contenant le texte d'origine
koct9i