Comment supprimer des fichiers .orig après la fusion du référentiel git?

160

Certains comment les fichiers .orig sont vérifiés dans mon référentiel git pendant la fusion, qui sont maintenant affichés dans le secteur modifié et non suivi. Mais je ne veux plus de ces fichiers dans mon référentiel. Comment faire ça.

    modified:   Gemfile.lock.orig
    #   modified:   Gemfile.orig
    #   modified:   app/assets/images/bg_required.png.orig
    #   modified:   app/assets/javascripts/application.js.orig

    etc...

Toute aide serait appréciée.

maximus ツ
la source
Possible duplication stackoverflow.com/questions/61212/…
ziu
@ziu, je veux supprimer les fichiers déjà présents dans mon référentiel, archivés par git merge ou par un autre développeur
maximus ツ
1
J'ai manqué la partie sur les fichiers enregistrés. Cependant, les fichiers .orig sont écrits par mergetool. Cela me semble être une résolution de conflit non propre.
ziu du
Avez-vous besoin de supprimer complètement le fichier de tout l'historique?
linquize le

Réponses:

253

La meilleure solution dans ce cas est de rester simple et de se débarrasser de ces fichiers indépendamment de git:

cd /your/repo/directory
find . -name '*.orig' -delete 

Sinon, dans Windows / PowerShell, vous pouvez exécuter la commande suivante

cd \your\repo\directory
Get-ChildItem -Recurse -Filter '*.orig' | Remove-Item
TheChymera
la source
14
Si vous obtenez une erreur de prédicat, utilisez: find. -nom '* .orig' | xargs rm -f
Neil
Tout comme un avertissement, utiliser «find -delete» peut être dangereux. Veuillez vérifier que le répertoire (dans ce cas '.') Est correct pour vous assurer que vous ne supprimez que ce que vous voulez supprimer
kingledion
8
C'est une douleur qui git clean -dfne le fait pas. Pourquoi devrions-nous nettoyer manuellement les déchets qu'il laisse derrière lui?
Sridhar Sarnobat
Et Windows?
Panzercrisis
3
@Panzercrisis si vous utilisez Windows, vous aurez probablement déjà un émulateur de terminal via lequel vous vous interfacez avec Git. Je recommanderais "gitforwindows" qui contient BASH avec tous les autres outils couramment nécessaires.
TheChymera
151

Essayez git cleanplus d'informations que vous pouvez trouver ici ou ici

Amar
la source
1
Je peux nettoyer les fichiers non suivis, mais qu'en est-il de la suppression de ces fichiers qui sont déjà dans le référentiel.
maximus ツ
vous devez d'abord supprimer le fichier du référentiel git rm <filename>, puis le valider.Après ce fichier, ajoutez * .orig dans git ignore.
Amar du
4
Je pense que c'est une meilleure solution que celle indiquée comme réponse.
Orgmir
51
git clean -iest vraiment agréable. il vous donnera une liste de fichiers qui seront supprimés et vous donnera des options sur la façon de traiter la liste (filtrer la liste, pouvoir supprimer tout sur la liste, et quelques autres options).
PPPaul
1
Vous pouvez utiliser git clean avec des modèles pour aider à supprimer uniquement les fichiers * .orig: git clean -f -e '*.*' -e '!*.orig' il n'y a qu'un modèle d'exclusion, mais il prend en charge un peu les modèles négatifs. Nous pouvons donc exclure tous les fichiers *.*, puis annuler l'exclusion des seuls *.origfichiers.
leorleor
6

Vous pouvez ignorer les fichiers en utilisant .gitignore

Mettez simplement * .orig dans la liste comme indiqué ici

https://help.github.com/articles/ignoring-files

pour supprimer les fichiers actuels, vous pouvez créer un script shell et exécuter à partir du dossier du projet comme ci-dessous

for file in `find *.orig -type f -print`
do
   echo "Deleting file $file"
   git rm $file -f       
done
Loken Makwana
la source
5
Bien qu'il puisse certainement le faire, ce n'est pas la bonne chose à faire ici :)
Sergio Tulentsev
1
Je pense que c'est une bonne idée car il conserve la sauvegarde mais n'interfère pas avec les fichiers
intermédiaires
@akazemis - vous le pensez, mais lorsque vous recherchez du code, vous voyez deux fois plus de résultats de recherche que vous le souhaitez (ce qui vous donne une fausse perception de ce que contient votre dernier code). C'est si rare que je préfère vivre avec le danger de ne pas avoir de fichiers orig. Il vaut mieux simplement s'engager régulièrement.
Sridhar Sarnobat
5

Malheureusement, git cleancela ne fonctionne pas pour moi car j'ai *.origajouté à mon fichier global gitignore, ils sont donc également ignorés de clean. Même courir git clean -xn'est pas bon car je ne veux pas que tous mes fichiers ignorés soient supprimés.git clean -iest utile, mais je ne veux vraiment pas avoir à examiner chaque fichier.

Cependant, nous pouvons utiliser un modèle d'exclusion et annuler la correspondance. Aperçu avec cette commande:

git clean -e '!*.orig' --dry-run

Ensuite, lorsque vous êtes sûr de vous, passez le forcedrapeau pour vraiment les supprimer:

git clean -e '!*.orig' -f

Basé sur le commentaire de Léorleor

Jeff Puckett
la source
3

git rm Gemfile.lock.orig et le reste des fichiers dont vous n'avez pas besoin. git commit --amend

Pour supprimer complètement ces blobs, git gc --prune=0 --aggressive

linquiser
la source
@linquizebut commit de git rm Gemfile.lock.orig ira dans le dernier commit en utilisant amend, non? existe-t-il un autre moyen de ne pas avoir de validation pour un tel fichier?
maximus ツ
2

Pour moi, j'ai git clean -fsupprimé tous les fichiers * .oig. Et garde ceux qui étaient déjà là avant.

Voici à quoi cela ressemblait (presque) après la fusion:

$ git status
On branch feature/xyz
Your branch is ahead of 'origin/feature/xyz' by 568 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .idea/codeStyles/
    .idea/misc.xml.orig

.idea/codeStyles/ était déjà là avant la fusion en tant que fichier non suivi. .idea/misc.xml.orig(et bien plus encore) ont dû être supprimés.

=> Utilisation git clean -f:

$ git clean -f
Removing .idea/misc.xml.orig

abouti à:

$ git status
On branch feature/xyz
Your branch is ahead of 'origin/feature/xyz' by 568 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .idea/codeStyles/
Ueffes
la source
0

tu peux simplement faire git status -s | grep "\.orig$" | awk '{print $2}' | xargs -n1 -r echo rm

TL, DR;

git status -s vous permet d'obtenir tous les fichiers modifiés / manquants par rapport à l'index

grep "\.orig$" filtrer les fichiers, en conservant la fin par ".orig"

awk '{print $2}' liste le nom du fichier (en ignorant les informations git, par exemple A, M, ??)

xargs -n1 -r echo rm imprime les commandes de suppression sur tous les arguments (-n1: un à la fois et -r: skip lorsqu'il est vide), copiez et collez simplement les commandes en vérifiant les fichiers à supprimer.

fiorentinoing
la source
Bien que cela puisse répondre à la question des auteurs, il manque des mots explicatifs et / ou des liens vers la documentation. Les extraits de code bruts ne sont pas très utiles sans quelques phrases autour d'eux. Vous pouvez également trouver comment rédiger une bonne réponse très utile. Veuillez modifier votre réponse.
hellow
-4

git rm <file>

http://git-scm.com/docs/git-rm

Ajoutez également les fichiers / répertoires que vous souhaitez ignorer à votre fichier .gitignore.

veritas1
la source
git rm <file> <file>Énumérez-les simplement.
veritas1 du
Ensuite, vous devez lister tous les fichiers, ou utiliser un outil comme find pour les transmettre à git rm, ou utiliser un shell glob et faire une boucle dessus. Git ne duplique pas cette fonctionnalité de ligne de commande Unix standard.
mabraham
1
Les fichiers orig ne sont pas ajoutés au référentiel, il n'est donc pas nécessaire d'utiliser git rm, utilisez simplement à la rmplace
Edson Medina