Jak usunąć pliki .orig po scaleniu z repozytorium git?

160

W jaki sposób pliki .orig są sprawdzane w moim repozytorium git podczas scalania, które są teraz wyświetlane w zmodyfikowanym i nieśledzonym sektorze. Ale nie chcę już tych plików w moim repozytorium. Jak to zrobić.

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

    etc...

Każda pomoc zostanie doceniona.

maximus ツ
źródło
@ziu, chcę usunąć pliki, które są już obecne w moim repozytorium, zaewidencjonowane przez git merge lub przez innego programistę
maximus ツ
1
Brakowało mi części dotyczącej zarejestrowanych plików. Jednak pliki .orig są zapisywane przez Mergetool. Brzmi to jak nieczyste rozwiązanie konfliktu.
ziu
Czy musisz całkowicie usunąć plik z całej historii?
linquize

Odpowiedzi:

253

Najlepszym rozwiązaniem w tym przypadku jest uproszczenie i pozbycie się tych plików niezależnie od gita:

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

Alternatywnie w Windows / PowerShell możesz uruchomić następujące polecenie

cd \your\repo\directory
Get-ChildItem -Recurse -Filter '*.orig' | Remove-Item
TheChymera
źródło
14
Jeśli pojawi się błąd predykatu, użyj: find. -name '* .orig' | xargs rm -f
Neil
Jako ostrzeżenie, użycie polecenia „znajdź-usuń” może być niebezpieczne. Sprawdź, czy katalog (w tym przypadku „.”) Jest poprawny, aby upewnić się, że usuwasz tylko to, co chcesz usunąć
kingledion
8
To ból, który git clean -dftego nie robi. Dlaczego mielibyśmy ręcznie sprzątać śmieci, które zostawiają?
Sridhar Sarnobat
A co z systemem Windows?
Panzercrisis
3
@Panzercrisis Jeśli używasz systemu Windows, prawdopodobnie masz już emulator terminala, za pośrednictwem którego łączysz się z Git. Polecam "gitforwindows", który zawiera BASH ze wszystkimi innymi powszechnie potrzebnymi narzędziami.
TheChymera
151

Spróbuj git cleanwięcej informacji, które możesz znaleźć tutaj lub tutaj

Amar
źródło
1
Mogę wyczyścić nieśledzone pliki, ale co z usunięciem takich plików, które są już w repozytorium.
maximus ツ
musisz najpierw usunąć plik z repozytorium, git rm <filename>a następnie zatwierdzić. po tym dodaj plik * .orig do git ignore.
Amar,
4
Myślę, że jest to lepsze rozwiązanie niż to oznaczone jako odpowiedź.
Orgmir
51
git clean -ijest naprawdę fajne. wyświetli listę plików, które zostaną usunięte, oraz opcje postępowania z listą (filtrowanie listy, możliwość usunięcia wszystkiego na liście i kilka innych opcji).
PPPaul
1
Możesz użyć git clean z wzorcami, aby pomóc usunąć tylko pliki * .orig: git clean -f -e '*.*' -e '!*.orig' istnieje tylko wzorzec wykluczania, ale ma niewielką obsługę wzorców negatywnych. Możemy więc wykluczyć wszystkie pliki *.*, a następnie zanegować wykluczenie tylko *.origplików.
leorleor
6

Możesz zignorować pliki używając .gitignore

Po prostu umieść * .orig na liście, jak pokazano tutaj

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

aby usunąć bieżące pliki, możesz utworzyć skrypt powłoki i uruchomić go z folderu projektu, jak poniżej

for file in `find *.orig -type f -print`
do
   echo "Deleting file $file"
   git rm $file -f       
done
Loken Makwana
źródło
5
Chociaż z pewnością może to zrobić, to nie jest właściwe, aby to zrobić :)
Sergio Tulentsev
1
Myślę, że to dobry pomysł, ponieważ zachowuje kopię zapasową, ale nie ingeruje w pliki w
fazie przejściowej
@akazemis - tak by się wydawało, ale gdy wyszukujesz kod, widzisz dwa razy więcej wyników wyszukiwania, niż chcesz (co daje fałszywe wyobrażenie o tym, co znajduje się w najnowszym kodzie). Jest to tak rzadkie, że wolę po prostu żyć z niebezpieczeństwem braku plików orig. Lepiej po prostu regularnie angażować się.
Sridhar Sarnobat
5

Niestety git cleannie działa dla mnie, ponieważ *.origdodałem do mojego globalnego pliku gitignore, więc są one również ignorowane podczas czyszczenia. Nawet uruchamianie git clean -xnie jest dobre, ponieważ nie chcę, aby wszystkie moje ignorowane pliki zostały usunięte. git clean -ijest pomocna, ale naprawdę nie chcę przeglądać każdego pliku.

Możemy jednak użyć wzorca wykluczania i zanegowania dopasowania. Podgląd za pomocą tego polecenia:

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

Następnie, gdy jesteś pewien, przekaż forceflagę, aby naprawdę je usunąć:

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

Na podstawie komentarza Leorleora

Jeff Puckett
źródło
3

git rm Gemfile.lock.orig i pozostałe pliki, których nie potrzebujesz. git commit --amend

Aby całkowicie usunąć te plamy, git gc --prune=0 --aggressive

linquize
źródło
@linquizebut commit z git rm Gemfile.lock.orig przejdzie do ostatniego zatwierdzenia za pomocą poprawki, prawda? czy jest jakiś inny sposób, aby nie mieć żadnego zatwierdzenia dla takiego pliku?
maximus ツ
2

U mnie git clean -fusunięto wszystkie pliki * .oig. I zachowuje te, które były tam wcześniej.

Tak to (prawie) wyglądało po scaleniu:

$ 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/istniał już przed scaleniem jako nieśledzony plik. .idea/misc.xml.orig(i wiele więcej) trzeba było usunąć.

=> Używanie git clean -f:

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

doprowadzony:

$ 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
źródło
0

możesz po prostu to zrobić git status -s | grep "\.orig$" | awk '{print $2}' | xargs -n1 -r echo rm

TL; DR;

git status -s umożliwia pobranie wszystkich zmodyfikowanych / brakujących plików w odniesieniu do indeksu

grep "\.orig$" odfiltrować pliki, zachowując końcówkę „.orig”

awk '{print $2}' wyświetla nazwę pliku (pomijając informacje git np. A, M, ??)

xargs -n1 -r echo rm wypisuje polecenia usuwania dla każdego argumentu (-n1: pojedynczo i -r: pomiń, gdy jest puste) po prostu skopiuj i wklej polecenia, dwukrotnie sprawdzając pliki do usunięcia.

fiorentinoing
źródło
Chociaż może to odpowiedzieć na pytanie autorów, brakuje w nim słów wyjaśniających i / lub linków do dokumentacji. Fragmenty surowego kodu nie są zbyt pomocne bez niektórych fraz wokół nich. Może się również okazać, że bardzo pomocne może być napisanie dobrej odpowiedzi . Zmień swoją odpowiedź.
witaj
-4

git rm <file>

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

Dodaj również pliki / katalogi, które chcesz zignorować, do pliku .gitignore.

veritas1
źródło
git rm <file> <file>Po prostu je wymień.
veritas1
Następnie musisz wyświetlić listę wszystkich plików lub użyć narzędzia takiego jak find, aby przekazać je do git rm lub użyć globalnej powłoki i pętli nad nimi. Git nie powiela tej standardowej funkcji wiersza poleceń systemu Unix.
mabraham
1
pliki orig nie są dodawane do repozytorium, więc nie ma potrzeby ich używać git rm, po prostu używaj rmzamiast tego
Edson Medina