web-dev-qa-db-fra.com

GIT - Exclure / ignorer les fichiers de la validation

J'ai besoin d'ignorer les fichiers dans git! Je ne pense pas qu'ignorer soit le bon mot en fait; Je veux que les fichiers soient dans git, mais je ne veux pas pouvoir y apporter de modifications. Cela peut sembler étrange à certains, mais il y a de très nombreux cas où j'ai besoin de cette fonctionnalité. La seule instance dont j'ai besoin pour le moment est l'utilisation de git avec un CMS; le CMS ne fonctionnera pas sans les fichiers qu'il change constamment, mais je ne veux pas que ces fichiers soient validés après la validation initiale. (C'est très facile à faire avec SVN et Tortoise).

WorkFlow:

  1. Obtenez tous les fichiers nécessaires pour exécuter l'application.
  2. Ignorez les répertoires/fichiers spécifiés lors de la validation.

Voici ce que j'ai essayé:

  1. .gitignore - les fichiers n'entrent jamais dans git. Si le fichier est déjà dans le cache, le fichier .gitignore ne fait rien.
  2. /.git/info/exclude - même problème que .gitignore, mais uniquement pour le dépôt local.
  3. Branchement - maître => LocalIgnores => WorkingBranch. Lorsque la branche Working est fusionnée avec master, les modifications apportées à partir de LocalIgnores finissent dans master. De plus, lorsque vous extrayez l'une des nouvelles branches, les fichiers supprimés sont supprimés au lieu d'être ignorés.
  4. Structure de fichiers tiers - Répertoire tiers sur le nœud racine qui contient une copie de tous les fichiers tiers importants afin qu'ils puissent être copiés dans le répertoire de travail qui utilise le fichier .gitignore. (Celui-ci fonctionne, mais il doit y avoir une solution plus facile/meilleure).
38
Patrick

Voici ma réponse d'un question similaire .

git update-index devrait faire ce que vous voulez

Cela indiquera à Git que vous souhaitez commencer à ignorer les modifications apportées au fichier
git update-index --assume-unchanged path/to/file

Quand vous voulez recommencer à suivre
git update-index --no-assume-unchanged path/to/file

92
Andy

Une autre solution consiste à utiliser un pre-commit crochet. Voir git help hooks pour plus de détails.

  • C'est plus difficile à configurer: vous devez écrire un script Shell pour exprimer exactement ce que vous voulez autoriser ou interdire, ce qui signifie probablement que vous devez avoir une assez bonne compréhension de git.

  • C'est plus permanent et flexible: avec des astuces comme git update-index vous pouvez accidentellement oublier de l'exécuter, etc. Mais une fois que vous avez installé un crochet, vous n'avez plus à vous en soucier.

Comme les autres astuces suggérées, les hooks ne se propagent pas automatiquement entre les référentiels, mais vous pouvez les archiver en tant que fichiers normaux et demander à tout le monde de les lier dans .git/hooks.

2
wjl