web-dev-qa-db-fra.com

Difficulté à ignorer les fichiers précédemment ignorés dans le référentiel Git

J'ai un site qui a un /sites/default/files/ répertoire dans lequel le contenu utilisateur est généralement conservé. Pensant que je n'ai pas besoin de suivre ces trucs, j'ai ajouté/sites/default/files/à mon fichier .gitignore.

Ensuite, j'ai découvert que je voulais également conserver des téléchargements principalement permanents dans ce répertoire. Maintenant, il est plus logique de tout suivre dans/sites/default/files/et d'exclure les sous-répertoires indésirables, au lieu de faire l'inverse.

Le problème est que Git n'arrêtera pas d'ignorer ce répertoire. J'ai supprimé les lignes de .gitignore qui spécifient ce répertoire et il ne le suivra pas. J'ai la possibilité d'utiliser git add /sites/default/files/ -f pour forcer git à suivre le répertoire, mais je l'ai déjà fait et cela semble désordonné.

Si .gitignore ne spécifie plus ce répertoire comme ignoré, pourquoi devrais-je forcer Git à commencer à suivre ces fichiers?

63
doub1ejack

Pour la postérité: la réponse à mon problème était "il suffit de regarder de plus près".

@twalberg a souligné, à juste titre, qu'il pouvait y avoir une règle que j'écartais dans le fichier .gitignore. La manière en cascade dont les règles .gitignore sont appliquées facilite l’exclusion des fichiers plus largement que prévu.

Pour autant que je sache, les hypothèses que je faisais sur le fonctionnement de git étaient correctes. De même, mon cas ne semble pas soutenir (ou réfuter) les commentaires de @ J-16 SDiZ sur le rôle du assume-unchanged bit peut jouer.

6
doub1ejack

Vous savez déjà comment le faire. Oui, git add -f est la route.

Si vous demandez pourquoi ... c'est parce que git a défini un assume-unchanged peu en interne. Ce bit fait penser à git que le fichier n'est pas modifié, donc git add ne l'ajoutera pas.

Si vous voulez jouer avec les détails de l'implémentation, vous pouvez utiliser git update-index --no-assume-unchanged <file> commande.

66
J-16 SDiZ

Je ne pense pas que J-16 soit correct. De http://www.kernel.org/pub/software/scm/git/docs/git-add.html :

La commande git add n'ajoutera pas de fichiers ignorés par défaut. Si des fichiers ignorés ont été explicitement spécifiés sur la ligne de commande, git add échouera avec une liste de fichiers ignorés. Les fichiers ignorés atteints par la récursivité du répertoire ou le remplacement de nom de fichier effectué par Git (citez vos globes avant le shell) seront ignorés en silence. La commande git add peut être utilisée pour ajouter des fichiers ignorés avec l'option -f (force).

git add -f semble être uniquement pour ajouter un fichier qui existe dans un fichier ignoré quelque part.

Peut-être y a-t-il un autre fichier .gitignore dans/sites ou/sites/default qui indique également à Git d'ignorer ce répertoire, ou peut-être qu'il a été défini dans .git/info/exclude?

12
hdgarrood

Nous avons eu un problème très similaire dans notre répertoire Drupal sites. Le problème est que distribution Drupal a un fichier .gitignore au niveau supérieur drupal qui correspond à tout ce qui se trouve dans drupal/sites/files/*

2
Al Crowley