Mon commit initial contenait des fichiers journaux. J'ai ajouté *log
à mon .gitignore
, et maintenant je veux supprimer les fichiers journaux de mon référentiel.
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 référentiel sans supprimer ma copie locale du fichier?
git
repository
remote-server
delete-file
git-rm
mveerman
la source
la source
Réponses:
Depuis le fichier man :
Donc, pour un seul fichier:
et pour un seul répertoire:
la source
svn rm --keep-local
.git pull
si vous êtes derrière le commit aprèsgit rm
git commit -m "Commit message"
etgit push
. Si vous avez d'autres modifications par étapes (vérifiez avecgit status
), elles seront également validées à ce moment.git rm --cached mylogfile.log
et supprime le fichier du référentiel. Pour éviter de perdre le fichier sur un système productif, je fais une sauvegarde du fichier et je tire après cela. Le fichier est supprimé comme mentionné précédemment et doit être copié à partir de votre sauvegarde. C'est assez pénible, mais je n'ai trouvé aucune meilleure solution à ce problème.Pour supprimer un dossier entier du référentiel (comme les fichiers Resharper), procédez comme suit:
J'avais commis des fichiers de resharper et je ne voulais pas qu'ils persistent pour les autres utilisateurs du projet.
la source
Git Push repo branch
pour supprimer les fichiers de la télécommande.Vous pouvez également supprimer des fichiers du référentiel en fonction de votre .gitignore sans les supprimer du système de fichiers local:
Ou, alternativement, sur Windows Powershell:
la source
git ls-files -i -X .gitignore | xargs -I{} git rm --cached "{}"
. Veuillez envisager de modifier ou d'ajouter cette solution à la réponse ici, car c'est un excellent outil pour avoir ....gitkeep
qui préserve un dossier vide dans le référentiel. Par exemple..gitignore
contient le dossieruploads
et le dépôt est obligé de garder une trace de.gitkeep
. En supprimant tout du repo sous,uploads
il sera également supprimé.gitkeep
.Selon ma réponse ici: /programming/6313126/how-to-remove-a-directory-in-my-github-repository
Pour supprimer un dossier / répertoire ou un fichier uniquement du référentiel git et non du local, essayez 3 étapes simples.
Étapes pour supprimer le répertoire
Étapes pour ignorer ce dossier dans les prochains validations
Le fichier .gitignore ressemblera à ceci
la source
De plus, 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 procéder: http://help.github.com/remove-sensitive-data/
la source
Une solution plus générique:
Modifier le
.gitignore
fichier.ECHO mylogfile.log >> .gitignore
Supprimez tous les éléments de l'index.
git rm -r -f --cached .
Reconstruire l'index.
git add .
Faire un nouveau commit
git commit -m "Removed mylogfile.log"
la source
rm --cashed
est qu'il supprimera finalement le fichier lorsque l'on tire - non? Et ce n'est pas ce que les gens veulent quand ils disent "Supprimer un fichier du référentiel sans le supprimer du système de fichiers local ". Maintenant, pourquoi la solution ci-dessus acceptée me dépasse-t-elle probablement que le PO fonctionnait seul et n'a jamais été retiré? Je ne sais pas. Je comprends le problème de github "une fois poussé toujours là" ofc(Sur https://help.github.com/articles/ignoring-files )
Par conséquent, ne le supprimez pas, mais ignorez pour toujours les modifications apportées. Je pense que cela ne fonctionne que localement, donc les collègues peuvent toujours voir des modifications à moins qu'ils exécutent la même commande que ci-dessus. (Il faut quand même vérifier cela.)
Remarque: Cela ne répond pas directement à la question, mais est basé sur des questions de suivi dans les commentaires des autres réponses.
la source
Si vous souhaitez simplement décompresser un fichier et ne pas le supprimer du référentiel local et distant, utilisez cette commande:
la source
Les réponses ci-dessus n'ont pas fonctionné pour moi. j'ai utilisé
filter-branch
pour supprimer tous les fichiers validés.Supprimez un fichier d'un référentiel git avec:
Supprimez un dossier d'un référentiel git avec:
Cela supprime le répertoire ou le fichier de toutes les validations.
Vous pouvez spécifier un commit en utilisant:
Ou une gamme:
Pour tout pousser à distance, vous pouvez faire:
la source
git rm -r --cached NAME
l'astuce pour le supprimer de votre dépôt git local et l'empêcher d'affecter toute personne qui tire plus tard (en supprimant l'historique du fichier ou du répertoire de git.)Ignorez les fichiers, supprimez les fichiers de git, mettez à jour git (pour la suppression).
Remarque: cela ne concerne pas l'historique des informations sensibles.
Ce processus nécessite définitivement une compréhension de ce qui se passe avec git. Au fil du temps, ayant acquis cela, j'ai appris à faire des processus tels que:
1) Ignorez les fichiers
.gitignore
pour les ignorer - dans de nombreux cas comme le vôtre, le répertoire parent, par exemplelog/
sera l'expression régulière à utiliser..gitignore
changement de fichier (je ne sais pas si push a besoin de vous, pas de mal si c'est fait).2) Supprimez les fichiers de git (uniquement).
git remove --cached some_dir/
3) Ajoutez et validez ce changement (il s'agit essentiellement d'un changement pour "ajouter" en supprimant des éléments, malgré la commande "ajouter" autrement déroutante!)
git add .
git commit -m"removal"
la source