94 votes

Comment empêcher Git de suivre tous les changements apportés à un fichier à partir de ce commit ?

Je dispose d'un fichier de configuration de base de données qui contient des valeurs par défaut sans importance. Cependant, toute modification apportée à ce fichier contiendrait des informations sensibles qui ne devraient pas être suivies dans le dépôt.

J'aimerais que les futures récupérations du dépôt Git incluent la version par défaut mais ignorent les modifications apportées par les utilisateurs.

La méthode suivante conserve une configuration locale mais pousse la suppression dans le dépôt, ce qui pose des problèmes pour les récupérations futures.

cat "app/dir/config.file" >> .gitignore
git rm --cached app/dir/config.file

La méthode suivante fait le travail mais ne persiste pas au-delà de la poussée vers le dépôt.

git update-index --assume-unchanged app/dir/config.file

Cela semble être une exigence courante pour le contrôle de version autour des informations sensibles, mais je ne semble pas trouver de solution.

206voto

Rob Points 1819

Comme d'habitude, github a une documentation formidable sur ce sujet.

https://help.github.com/articles/ignoring-files#ignoring-versioned-files

Voici l'extrait pertinent:

Ignorer les fichiers versionnés

Certains fichiers dans un dépôt changent souvent mais sont rarement validés. Habituellement, ce sont différents fichiers de configuration locaux qui sont édités, mais ne devraient jamais être validés en amont. Git vous permet d'ignorer ces fichiers en supposant qu'ils ne changent pas.

  1. Dans Terminal, naviguez jusqu'à l'emplacement de votre dépôt Git.
  2. Exécutez la commande suivante dans votre terminal:

git update-index --assume-unchanged path/to/file.txt

Une fois que vous marquez un fichier de cette manière, Git ignore complètement tout changement qui lui est appliqué. Il n'apparaîtra jamais lorsque vous exécutez git status ou git diff, et il ne sera jamais validé.

Pour que Git recommence à suivre le fichier, exécutez simplement:

git update-index --no-assume-unchanged path/to/file.txt.

7voto

bikermusician Points 71

Pas sûr que ce soit la meilleure façon... mais voici ce que j'ai trouvé qui fonctionne en quelques étapes.

Nouvel exemple Laravel :

  1. git init
  2. Modifier les fichiers .gitignore pour obtenir les résultats souhaités, comme ne pas perdre les dossiers vendors.
  3. Faire une copie des fichiers que vous ne voulez pas suivre (par exemple : .htaccess, .env, etc)
  4. git add .
  5. git commit -m "premier commit"
  6. git rm --cached public /.htaccess puis git rm --cached .env
  7. git commit
  8. git status devrait montrer que ces fichiers ont été supprimés.
  9. Maintenant remettez en place les fichiers que vous aviez copiés. Comme ils ont le même nom que ceux que vous avez demandé à git de ne plus suivre, git les ignorera complètement.

Maintenant vous pouvez les éditer, et avoir des versions locale et de production. REMARQUE : Vous devrez peut-être répéter toutes ces étapes la première fois sur la configuration de production également. Jusqu'à présent, cela a bien fonctionné pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X