Question Supprimer un fichier d'un référentiel Git sans le supprimer du système de fichiers local


Ma validation initiale contenait des fichiers journaux. J'ai ajouté *log à mon .gitignore, et maintenant je veux enlever les dossiers de notation de mon dépôt.

git rm mylogfile.log

supprimera un fichier du référentiel, mais le supprimera également du système de fichiers local.

Comment puis-je supprimer ce fichier du repo sans pour autant supprimer ma copie locale du fichier?


2435
2017-07-17 14:56


origine


Réponses:


Pour un seul fichier:

git rm --cached mylogfile.log

Pour un seul répertoire:

git rm --cached -r mydirectory

3499
2017-07-17 14:57



Pour supprimer un dossier entier du repo (comme les fichiers Resharper), procédez comme suit:

git rm -r --cached folderName

J'avais commis quelques fichiers de resharper, et je ne voulais pas que ceux-ci persistent pour les autres utilisateurs du projet.


249
2018-04-04 18:14



Vous pouvez également supprimer des fichiers du référentiel en fonction de votre .gitignore sans les supprimer du système de fichiers local:

git rm --cached `git ls-files -i -X .gitignore`

Ou, alternativement, sur Windows PowerShell:

git rm --cached $(git ls-files -i -X .gitignore)

162
2018-01-31 10:05



En outre, si vous avez validé des données sensibles (par exemple, un fichier contenant des mots de passe), vous devez les supprimer complètement de l'historique du référentiel. Voici un guide expliquant comment faire cela: http://help.github.com/remove-sensitive-data/


66
2017-08-21 12:16



Selon ma réponse ici: https://stackoverflow.com/questions/6313126/how-to-remove-a-directory-in-my-github-repository

Pour supprimer un dossier / répertoire ou un fichier uniquement depuis le dépôt git et non depuis le local, essayez 3 étapes simples.


Étapes pour supprimer le répertoire

git rm -r --cached File-or-FolderName
git commit -m "Removed folder from repository"
git push origin master

Étapes pour ignorer ce dossier dans les prochains commits

Pour ignorer ce dossier à partir des validations suivantes, créez un fichier en racine nommé .gitignore   et mettez le nom de ce dossier dedans. Vous pouvez en mettre autant que vous voulez

.gitignore le fichier ressemblera à ceci

/FolderName

remove directory


58
2017-08-24 12:16



Une solution plus générique:

  1. modifier .gitignore fichier.

    ECHO mylogfile.log >> .gitignore

  2. Supprimer tous les éléments de l'index.

    git rm -r -f --cached .

  3. Reconstruire l'index.

    git add .

  4. Faire un nouveau commit

    git commit -m "Removed mylogfile.log"


54
2017-12-13 11:42



Git vous permet d'ignorer ces fichiers en supposant qu'ils sont inchangés. Ce   est fait en exécutant le git update-index --assume-unchanged path/to/file.txt commander. Une fois le fichier en tant que tel marqué, git   ignore complètement les changements sur ce fichier; ils ne vont pas apparaître quand   git status ou git diff, ils ne seront jamais validés.

(De https://help.github.com/articles/ignoring-files)

Par conséquent, ne pas le supprimer, mais en ignorant les changements pour toujours. Je pense que cela ne fonctionne que localement, donc les collègues peuvent toujours voir les changements à moins qu'ils exécutent la même commande que ci-dessus. (Encore besoin de vérifier cela.)

Note: Ceci ne répond pas directement à la question, mais est basé sur des questions de suivi dans les commentaires des autres réponses.


17
2018-01-28 11:46



Les réponses ci-dessus n'ont pas fonctionné pour moi. J'ai utilisé filter-branch pour supprimer tous les fichiers validés

supprimer un fichier d'un dépôt git avec:

git filter-branch --tree-filter 'rm  file'

supprimer un dossier d'un dépôt git avec:

git filter-branch --tree-filter 'rm -rf directory'

Cela supprime le répertoire ou le fichier de tous les commits

vous pouvez spécifier un commit en utilisant:

git filter-branch --tree-filter 'rm -rf directory' HEAD

Ou une gamme

git filter-branch --tree-filter 'rm -rf vendor/gems' t49dse..HEAD

Pour tout pousser à distance, vous pouvez faire:

git push origin master --force

4
2018-01-12 13:59