Supprimez le fichier du référentiel mais conservez-le localement

369

J'ai un dossier que j'aimerais supprimer dans mon référentiel distant. Je voudrais le supprimer, mais garder le dossier sur mon ordinateur

Rodrigo Souza
la source
Veuillez examiner les questions connexes suggérées pendant que vous rédigez la vôtre - le double était probablement l'une des deux premières.
Cascabel
Un autre doublon: stackoverflow.com/questions/1273108/…
Cascabel

Réponses:

637
git rm --cached -r somedir

Organisera la suppression du répertoire, mais ne touchera à rien sur le disque. Cela fonctionne également pour un fichier, comme:

git rm --cached somefile.ext

Ensuite, vous voudrez peut-être ajouter somedir/ou somefile.extà votre .gitignorefichier afin que git n'essaye pas de le rajouter.

jamessan
la source
24
Et puis ajoutez le chemin vers .gitignore pour que git n'essaye pas de vous faire l'ajouter plus tard.
grossvogel
3
Cela entraînera-t-il la suppression de (fichiers dans) le répertoire lorsqu'il tirera de la télécommande?
bstpierre
Pas quand il tire; les fichiers resteront supprimés localement pendant le processus de fusion automatique de l'extraction. Après cela, une poussée entraînera la suppression des fichiers côté serveur.
Walter Mundt
7
Que se passe-t-il si j'ai une troisième télécommande? Les fichiers correspondants seront-ils supprimés lors d'une prochaine traction? Je demande parce que je pense que c'est un cas d'utilisation assez courant, c'est-à-dire archiver certains fichiers dans le référentiel, réaliser à une date ultérieure qu'ils divergent entre les télécommandes, pour une bonne raison, et qu'ils n'auraient jamais dû être dans le référentiel en premier lieu, vouloir pour résoudre ce problème en conservant toutes les extractions locales exactement comme elles sont, mais en supprimant les fichiers du référentiel.
Bobby Jack
6
Pour les fichiers simples, vous pouvez le fairegit rm --cached path/to/file
Travis Reeder
3

Je voudrais juste:

  • Déplacez le dossier hors de votre arborescence de travail
  • git rm le dossier, validez la modification
  • Ajouter à .gitignore(ou .git/info/excludes), valider la modification
  • Déplacer le dossier en arrière
Jeff
la source
8
ce n'est pas une bonne solution - et si vous avez un très grand répertoire?
ioleo
probablement besoin d'utilisergit rm -r
theUtherSide
1
@loostro ne le déplace simplement pas vers un autre périphérique de bloc. La plupart des systèmes de fichiers mettront juste à jour l'inode du fichier et ne déplaceront pas littéralement le répertoire entier
648trindade