J'ai un dépôt git qui est utilisé uniquement pour contenir des fichiers graphiques et sonores 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 actifs à partir d'un autre répertoire structuré, avec plusieurs niveaux de sous-répertoires.
Maintenant, je veux seulement que la structure de fichiers hiérarchique (source) soit suivie par git, et le répertoire plat (cible) (avec tous les fichiers dans une pile) doit être ignoré.
J'ai ajouté le répertoire cible à .gitignore, mais git suit toujours les modifications. Je pensais que si je validais la suppression de l'ancien fichier dans le répertoire cible, git pourrait arrêter de 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?
la source
Réponses:
Cette commande amènera git à ne pas suivre votre répertoire et tous les fichiers qu'il contient sans les supprimer réellement:
git rm -r --cached <your directory>
le
-r
option entraîne la suppression de tous les fichiers de votre répertoire.L'
--cached
option entraîne la suppression des fichiers uniquement de l'index de git, pas de votre copie de travail. Par défautgit rm <file>
, supprimerait<file>
.la source
add -f
ou être votre situation. Comme l'a dit Gordon, cela vous empêche d'effacer accidentellement un tas de fichiers - le référentiel est la liste principale, pas le gitignore. Cela vous permet également de suivre manuellement quelques éléments qui autrement seraient ignorés par une règle générique, ce que j'ai trouvé utile.-r
option n'est pas de "provoquer la suppression de tous les fichiers de votre répertoire" mais plutôt de récurrer via les sous-répertoires.Si vous avez besoin d'un fichier suivi (archivé), mais que vous ne souhaitez 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, cela peut être fait avec:
Après cela, aucune modification de ce fichier n'apparaîtra dans
git status
.la source
git update-index --no-assume-unchanged dirname/**/*
Pour un sous-répertoire appelé
blah/
ajouté à git, les deux éléments suivants semblent fonctionner pour ignorer les nouveaux fichiers dansblah/
. Ajouté à .gitignore:la source
TL; DR pour nettoyer votre référentiel git et vous assurer que TOUS vos éléments ignorés sont en effet ignorés:
Remarque: vous n'avez pas besoin de spécifier un répertoire, de cette façon, vous nettoyez l' intégralité du référentiel distant .
Pour aller plus loin lisez ceci
la source
Je ne sais pas si cela compte ou fait de moi une mauvaise personne, mais c'est parti.
*Generated*
au fichier racine .gitignoredir *.CheckedIn -Recurse | %{ copy $_.FullName "$($_.FullName)".Replace("CheckedIn","") -EA SilentlyContinue}
Je me sens un peu mal pour moi ... mais ça marche en fait.
la source
Ok, il semble que vous devez d'abord faire un check-in avec le répertoire complètement vide (ni anciens ni nouveaux fichiers), et tous les fichiers ajoutés par la suite seront ignorés. Si vous supprimez les anciens fichiers ajoutés et les nouveaux avant de les valider, les nouveaux sont ajoutés au référentiel bien qu'ils doivent être ignorés.
Au moins, cela a fonctionné pour moi dans cette situation. Ce serait toujours bien si quelqu'un pouvait fournir plus d'informations sur ce qui se passe.
la source