web-dev-qa-db-fra.com

Ignorer le contenu d'un répertoire déjà enregistré?

J'ai un référentiel Git qui est utilisé uniquement pour contenir des fichiers graphiques et audio utilisés dans plusieurs projets. Ils sont tous dans un répertoire sans sous-répertoires. Maintenant, je viens de créer un script pour copier ces ressources depuis un autre répertoire structuré, avec plusieurs niveaux de sous-répertoires.

Maintenant, je veux seulement que la structure hiérarchique des fichiers (source) soit suivie par git, et que le répertoire plat (cible) (avec tous les fichiers d'une pile) soit ignoré.

J'ai ajouté le répertoire cible à .gitignore, mais git suit toujours les modifications. Je pensais que si je commettais la suppression de l'ancien fichier dans le répertoire cible, git pourrait ne plus suivre le nouveau contenu (copié par le script), mais ce n'est pas le cas.

Comment faire pour que git oublie le répertoire cible?

214
Felixyz

Cette commande amènera git à extraire votre répertoire et tous les fichiers qu'il contient sans les supprimer réellement:

git rm -r --cached <your directory>

L'option -r entraîne la suppression de tous les fichiers de votre répertoire. 

L'option --cached permet uniquement de supprimer les fichiers de l'index de git, pas de votre copie de travail. Par défaut, git rm <file> supprime <file>.

506
Gordon Wilson

Si vous avez besoin d'un fichier suivi (archivé), mais que vous ne voulez pas suivre les modifications ultérieures d'un fichier tout en le conservant dans votre référentiel local ainsi que dans le référentiel distant, vous pouvez le faire avec:

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

Après cela, toutes les modifications apportées à ce fichier n'apparaîtront plus dans git status.

69
jone

Pour un sous-répertoire appelé blah/ ajouté à git, les deux éléments suivants semblent fonctionner pour ignorer les nouveaux fichiers dans blah/. Ajouté à .gitignore:

blah 
blah/*
4
Stef