Wie lösche ich .orig-Dateien nach dem Zusammenführen aus dem Git-Repository?

160

Einige Möglichkeiten, wie .orig-Dateien während des Zusammenführens in meinem Git-Repository überprüft werden, werden jetzt im geänderten und nicht verfolgten Sektor angezeigt. Aber ich möchte diese Dateien nicht mehr in meinem Repository haben. Wie geht das.

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

    etc...

Jede Hilfe wird geschätzt.

maximus ツ
quelle
Mögliches Duplikat stackoverflow.com/questions/61212/…
ziu
@ziu, ich möchte Dateien entfernen, die bereits in meinem Repository vorhanden sind, durch Git Merge oder von einem anderen Entwickler eingecheckt wurden
maximus
1
Ich habe den Teil über eingecheckte Dateien verpasst. Die .orig-Dateien werden jedoch von mergetool geschrieben. Es klingt für mich nach einer nicht sauberen Konfliktlösung.
ziu
Müssen Sie die Datei vollständig aus dem gesamten Verlauf entfernen?
Linquize
1
Überprüfen Sie dies aus stackoverflow.com/questions/872565/…
ziu

Antworten:

253

Die beste Lösung in diesem Fall ist es, es einfach zu halten und diese Dateien unabhängig von Git zu entfernen:

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

Alternativ können Sie in Windows / PowerShell den folgenden Befehl ausführen

cd \your\repo\directory
Get-ChildItem -Recurse -Filter '*.orig' | Remove-Item
TheChymera
quelle
14
Wenn Sie einen Prädikatfehler erhalten, verwenden Sie: find. -name '* .orig' | xargs rm -f
Neil
Nur als Warnung kann die Verwendung von 'find -delete' gefährlich sein. Bitte überprüfen Sie, ob das Verzeichnis (in diesem Fall '.')
Korrekt
8
Es ist ein Schmerz, der git clean -dfes nicht tut. Warum sollten wir den zurückgelassenen Müll manuell beseitigen müssen?
Sridhar Sarnobat
Was ist mit Windows?
Panzercrisis
3
@Panzercrisis Wenn Sie Windows verwenden, haben Sie wahrscheinlich bereits einen Terminalemulator, über den Sie mit Git kommunizieren. Ich würde "gitforwindows" empfehlen, das BASH mit allen anderen häufig benötigten Tools enthält.
TheChymera
151

Probieren Sie git cleanweitere Informationen finden Sie hier oder hier

Amar
quelle
1
Ich kann nicht verfolgte Dateien bereinigen, aber was ist mit dem Entfernen solcher Dateien, die sich bereits im Repository befinden?
Maximus
Sie müssen zuerst die Datei aus dem Repository entfernen git rm <filename>und dann festschreiben. Danach fügen Sie die * .orig-Datei in git ignore hinzu.
Amar
4
Ich denke, dies ist eine bessere Lösung als die als Antwort gekennzeichnete.
Orgmir
51
git clean -iist wirklich nett. Sie erhalten eine Liste der Dateien, die gelöscht werden sollen, sowie Optionen zum Umgang mit der Liste (Filtern der Liste, Löschen aller Elemente in der Liste und einige andere Optionen).
PPPaul
1
Sie können git clean mit Mustern verwenden, um nur Dateien zu löschen, die * .orig-Dateien: git clean -f -e '*.*' -e '!*.orig' Es gibt nur ein Ausschlussmuster, aber es unterstützt ein wenig negative Muster. So können wir alle Dateien ausschließen *.*und dann den Ausschluss nur der *.origDateien negieren .
leorleor
6

Sie können Dateien mit .gitignore ignorieren

Fügen Sie einfach * .orig wie hier gezeigt in die Liste ein

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

Zum Löschen aktueller Dateien können Sie ein Shell-Skript erstellen und wie unten beschrieben aus dem Projektordner ausführen

for file in `find *.orig -type f -print`
do
   echo "Deleting file $file"
   git rm $file -f       
done
Loken Makwana
quelle
5
Obwohl er dies sicherlich kann, ist es hier nicht das Richtige :)
Sergio Tulentsev
1
Ich denke, es ist eine gute Idee, da es das Backup
beibehält,
@akazemis - Sie würden es glauben, aber wenn Sie nach Code suchen, sehen Sie doppelt so viele Suchergebnisse, wie Sie möchten (was Ihnen eine falsche Vorstellung davon gibt, was in Ihrem neuesten Code enthalten ist). Es ist so selten, dass ich lieber mit der Gefahr leben möchte, keine Orig-Dateien zu haben. Es ist besser, sich regelmäßig zu verpflichten.
Sridhar Sarnobat
5

Funktioniert leider git cleannicht für mich, da ich *.origmeine globale Gitignore-Datei hinzugefügt habe, sodass sie auch von Clean ignoriert werden. Selbst das Ausführen git clean -xist nicht gut, da ich nicht möchte, dass alle meine ignorierten Dateien gelöscht werden. git clean -iist hilfreich, aber ich möchte wirklich nicht jede einzelne Datei überprüfen müssen.

Wir können jedoch ein Ausschlussmuster verwenden und die Übereinstimmung negieren. Vorschau mit diesem Befehl:

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

Wenn Sie sicher sind, übergeben Sie die forceFlagge, um sie wirklich zu löschen:

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

Basierend auf Leorleors Kommentar

Jeff Puckett
quelle
3

git rm Gemfile.lock.orig und den Rest der Dateien, die Sie nicht benötigen. git commit --amend

Um diese Blobs vollständig zu entfernen, git gc --prune=0 --aggressive

linquize
quelle
@linquizebut Commit von git rm Gemfile.lock.orig wird in das letzte Commit mit Amendment gehen, oder? Gibt es eine andere Möglichkeit, für eine solche Datei kein Commit durchzuführen?
Maximus
2

Für mich git clean -fwurden alle * .oig-Dateien entfernt. Und behält die, die schon vorher da waren.

So sah es nach der Fusion (fast) aus:

$ 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/war schon vor dem Zusammenführen als nicht verfolgte Datei da. .idea/misc.xml.orig(und vieles mehr) mussten entfernt werden.

=> Verwenden von git clean -f:

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

führte zu:

$ 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
quelle
0

Sie können einfach tun git status -s | grep "\.orig$" | awk '{print $2}' | xargs -n1 -r echo rm

TL; DR;

git status -s ermöglicht es Ihnen, alle geänderten / fehlenden Dateien in Bezug auf den Index abzurufen

grep "\.orig$" Filtern Sie Dateien heraus und behalten Sie das Ende mit ".orig" bei.

awk '{print $2}' listet den Dateinamen auf (Überspringen von Git-Informationen, z. B. A, M, ??)

xargs -n1 -r echo rm druckt Entfernungsbefehle für alle Argumente (-n1: einzeln und -r: überspringen, wenn leer). Kopieren Sie einfach die Befehle und fügen Sie sie ein. Überprüfen Sie dabei, ob Dateien entfernt werden sollen.

Fiorentinoing
quelle
Dies könnte zwar die Frage des Autors beantworten, es fehlen jedoch einige erklärende Wörter und / oder Links zur Dokumentation. Rohcode-Schnipsel sind ohne einige Ausdrücke nicht sehr hilfreich. Möglicherweise ist es auch sehr hilfreich , eine gute Antwort zu schreiben . Bitte bearbeiten Sie Ihre Antwort.
Gelb
-4

git rm <file>

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

Fügen Sie Ihrer .gitignore-Datei auch Dateien / Verzeichnisse hinzu, die Sie ignorieren möchten.

veritas1
quelle
git rm <file> <file>Listen Sie sie einfach auf.
Veritas1
Dann müssen Sie alle Dateien auflisten oder ein Tool wie find verwenden, um sie an git rm zu übergeben, oder einen Shell-Glob verwenden und sie durchlaufen. Git dupliziert diese Standard-Unix-Befehlszeilenfunktionalität nicht.
Mabraham
1
Orig-Dateien werden nicht zum Repository hinzugefügt, daher ist keine Verwendung erforderlich. git rmVerwenden Sie rmstattdessen stattdessen
Edson Medina,