Question

Mon contenu initial allouent des fichiers journaux. J'ai ajouté à mon *log .gitignore, et maintenant je veux supprimer les fichiers journaux de mon dépôt.

git rm mylogfile.log

supprime un fichier à partir du référentiel, mais aussi le retirer du système de fichiers local.

Comment puis-je supprimer ce fichier à partir du repo sans supprimer ma copie locale du fichier?

Était-ce utile?

La solution

A partir du fichier man :

  

Lorsque --cached est donnée, le contenu mis en scène doit correspondre soit à la pointe de la branche ou le fichier sur le disque, ce qui permet le fichier à supprimer de tout l'indice.

Alors, pour un seul fichier:

git rm --cached mylogfile.log

et pour un seul répertoire:

git rm --cached -r mydirectory

Autres conseils

Pour supprimer un dossier entier du repo (comme les fichiers ReSharper), faites ceci:

git rm -r --cached folderName

J'avais commis des fichiers ReSharper, et ne voulait pas ceux de persister pour les autres utilisateurs du projet.

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 encore, sous Windows Powershell:

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

par ma réponse ici: https://stackoverflow.com/questions/6313126/how-to-remove-a-directory -en-my-github-dépôt

Pour supprimer le dossier / répertoire ou un fichier uniquement à partir du dépôt git et non de l'essai locale 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

Les étapes d'ignorer ce dossier dans les prochains commits

  

Pour ignorer ce dossier à partir suivant commits faire un fichier racine nommé .gitignore   et de mettre ce nom des dossiers en elle. Vous pouvez mettre autant que vous voulez

.gitignore fichier sera ressembler à ceci

/FolderName

supprimer le répertoire

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

Une solution plus générique:

  1. Modifier le fichier .gitignore.

    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 nouveau commit

    git commit -m "Removed mylogfile.log"

  

Git vous permet d'ignorer ces fichiers en supposant qu'ils ne changent pas. Cette   est fait en exécutant la commande git update-index --assume-unchanged path/to/file.txt. Une fois que le marquage d'un fichier en tant que tel, git   ignorer complètement toute modification sur ce fichier; ils ne seront pas visibles lorsque   en cours d'exécution git status ou git diff, ne seront-ils jamais être commis.

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

Par conséquent, ne pas supprimer, mais sans tenir compte des modifications à jamais. Je pense que cela ne fonctionne que localement, collègues voir encore des changements à moins qu'ils exécutent la même commande que ci-dessus. (Encore faut-il vérifier si.)

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

Si vous voulez simplement untrack un fichier et non supprimer de repo local et à distance puis utilisez cette commande:

git update-index --assume-unchanged  file_name_with_path

Au-dessus de réponses ne fonctionne pas pour moi. Je filter-branch supprimer tous les fichiers engagés.

Supprimer un fichier à partir d'un dépôt git avec:

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

Supprimer un dossier à partir d'un dépôt git avec:

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

Ceci supprime le répertoire ou un fichier de tous les commits.

Vous pouvez spécifier une validation 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top