J'ai un projet Visual Studio existant dans mon référentiel. J'ai récemment ajouté un fichier .gitignore dans mon projet et je suppose que cela indique à Git d'ignorer les fichiers répertoriés dans le fichier.
Mon problème est que tous ces fichiers font déjà l'objet d'un suivi et que je sache, Git n'ignorera pas un fichier qui avait déjà été suivi avant qu'une règle ne soit ajoutée à ce fichier pour l'ignorer.
Il a été suggéré d'utiliser: git rm --cached
et de les dépiler manuellement, mais cela me prendra une éternité pour les parcourir un à un.
J'ai pensé à supprimer le référentiel et à le recréer à nouveau, mais cette fois avec le fichier .gitignore présent, mais il doit y avoir un meilleur moyen de le faire.
Cette réponse a résolu mon problème:
Tout d’abord, commit toutes les modifications en attente.
Puis lancez cette commande:
git rm -r --cached .
Cela supprime tout de l'index, puis lancez simplement:
git add .
Engagez-le:
git commit -m ".gitignore is now working"
Créez un fichier .gitignore. Pour ce faire, vous créez simplement un fichier .txt vierge.
Ensuite, vous devez changer son nom en écrivant la ligne suivante sur la cmd (où git.txt
est le nom du fichier que vous venez de créer):
rename git.txt .gitignore
Ensuite, vous pouvez ouvrir le fichier et écrire tous les fichiers non suivis que vous souhaitez ignorer définitivement. Par exemple, le mien ressemble à ceci:
`` `
OS junk files
[Tt]humbs.db
*.DS_Store
#Visual Studio files
*.[Oo]bj
*.user
*.aps
*.pch
*.vspscc
*.vssscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.[Cc]ache
*.ilk
*.log
*.lib
*.sbr
*.sdf
*.pyc
*.xml
ipch/
obj/
[Bb]in
[Dd]ebug*/
[Rr]elease*/
Ankh.NoLoad
#Tooling
_ReSharper*/
*.resharper
[Tt]est[Rr]esult*
#Project files
[Bb]uild/
#Subversion files
.svn
# Office Temp Files
~$*
Il y a une collection complète de fichiers .gitignore utiles par GitHub
Une fois que vous avez cela, vous devez l'ajouter à votre référentiel git, comme tout autre fichier, mais il doit être à la racine du référentiel.
Ensuite, dans votre terminal, vous devez écrire la ligne suivante:
git config --global core.excludesfile ~/.gitignore_global
De la doc officielle:
Vous pouvez également créer un fichier global .gitignore, qui est une liste de règles pour ignorer les fichiers de chaque référentiel Git sur votre ordinateur. Pour Par exemple, vous pouvez créer le fichier dans ~/.gitignore_global et ajouter du règles à elle.
Terminal ouvert. Exécutez la commande suivante dans votre terminal: git config --global core.excludesfile ~/.gitignore_global
Si le référentiel existe déjà, vous devez exécuter ces commandes:
git rm -r --cached .
git add .
git commit -m ".gitignore is now working"
Si l’étape 2 ne fonctionne pas, écrivez le chemin des fichiers que vous souhaitez ajouter.
Comme spécifié ici Vous pouvez mettre à jour l'index:
git update-index --assume-unchanged /path/to/file
En faisant cela, les fichiers ne seront pas affichés dans git status
ou git diff
.
Pour recommencer à suivre les fichiers, vous pouvez exécuter:
git update-index --no-assume-unchanged /path/to/file
Voici un moyen de «désencombrer» tous les fichiers qui seraient autrement ignorés sous l'ensemble actuel de modèles d'exclusion:
(GIT_INDEX_FILE=some-non-existent-file \
git ls-files --exclude-standard --others --directory --ignored -z) |
xargs -0 git rm --cached -r --ignore-unmatch --
Cela laisse les fichiers dans votre répertoire de travail mais les supprime de l'index.
Le truc utilisé ici est de fournir un fichier d’index inexistant à git ls-files afin qu’il pense qu’il n’ya pas de fichiers suivis. Le code Shell ci-dessus demande tous les fichiers qui seraient ignorés si l'index était vide, puis les supprime de l'index actuel avec git rm.
Une fois les fichiers «décompressés», utilisez le statut git pour vérifier que rien d’important n’a été supprimé (si tel est le cas, réglez vos modèles d’exclusion et utilisez git reset - path pour restaurer l’entrée d’index supprimée). Ensuite, faites un nouveau commit qui laisse de côté le "crud".
Le "crud" sera toujours dans n'importe quel vieux commet. Vous pouvez utiliser git filter-branch pour produire des versions propres des anciens commits si vous avez vraiment besoin d'un historique vierge (si vous utilisez un git filter-branch, vous «réécrivez l'historique». Il ne faut donc pas le prendre à la légère si des collaborateurs ont l’un de vos commits historiques après la création du «crud»).
Si vous avez ajouté votre .gitignore
trop tard, git continuera malgré tout à suivre les fichiers déjà validés. Pour résoudre ce problème, vous pouvez toujours supprimer toutes les instances mises en cache des fichiers indésirables.
Tout d’abord, pour vérifier quels fichiers suivez-vous réellement, vous pouvez exécuter:
git ls-tree --name-only --full-tree -r HEAD
Disons que vous avez trouvé des fichiers indésirables dans un répertoire tel que cache/
, il est donc préférable de cibler ce répertoire plutôt que tous vos fichiers.
Donc au lieu de:
git rm -r --cached .
Il est préférable de cibler le fichier ou le répertoire indésirable:
git rm -r --cached cache/
Ensuite, ajoutez toutes les modifications,
git add .
et commettre ...
git commit -m ".gitignore is now working"
Référence: https://amyetheredge.com/code/13.html
Je pense que c’est un moyen facile d’ajouter un fichier .gitignore à un référentiel existant.
Prérequis:
Vous avez besoin d’un navigateur pour accéder à votre compte github.
Pas
S'amuser!