Come eliminare i file .orig dopo l'unione dal repository git?


160

Alcuni come i file .orig vengono controllati nel mio repository git durante l'unione, che ora vengono visualizzati in settori modificati e non tracciati. Ma non voglio più questo file nel mio repository. Come farlo.

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

    etc...

Qualsiasi aiuto sarà apprezzato.



@ziu, voglio rimuovere i file che sono già presenti nel mio repository, registrati da git merge o da qualche altro sviluppatore
maximus ツ

1
Ho perso la parte relativa ai file archiviati. Tuttavia, i file .orig sono scritti da mergetool. Mi sembra una risoluzione non chiara del conflitto.
ziu,

Devi rimuovere completamente il file da tutta la cronologia?
Linquize,

Risposte:


253

La migliore soluzione in questo caso è di mantenerlo semplice e sbarazzarsi di quei file indipendentemente da git:

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

In alternativa, in Windows / PowerShell, è possibile eseguire il comando seguente

cd \your\repo\directory
Get-ChildItem -Recurse -Filter '*.orig' | Remove-Item

14
Se viene visualizzato un errore predicato, utilizzare: trova. -name '* .orig' | xargs rm -f
Neil

Proprio come un avvertimento, l'uso di 'find -delete' può essere pericoloso. Verifica che la directory (in questo caso '.')
Sia

8
È un dolore che git clean -dfnon lo fa. Perché dovremmo ripulire manualmente i rifiuti che si lasciano alle spalle?
Sridhar Sarnobat,

Che mi dici di Windows?
Panzercrisis,

3
@Panzercrisis se stai usando Windows probabilmente avrai già un emulatore di terminale tramite il quale ti interfaccia con Git. Consiglierei "gitforwindows" che contiene BASH con tutti gli altri strumenti comunemente necessari.
TheChymera,

151

Prova git cleanaltre informazioni che puoi trovare qui o qui


1
Posso pulire i file non tracciati, ma per quanto riguarda la rimozione di tali file che sono già nel repository.
maximus ツ

devi prima rimuovere il file dal repository git rm <filename>e quindi commit.after questo aggiungi * .orig file in git ignore.
Amar,

4
Penso che questa sia una soluzione migliore di quella contrassegnata come risposta.
Orgmir

51
git clean -iè davvero carino. ti fornirà un elenco di file che verranno eliminati e ti darà le opzioni su come gestire l'elenco (filtrare l'elenco, essere in grado di eliminare tutto sull'elenco e alcune altre opzioni).
PPPaul

1
Puoi usare git clean con i pattern per eliminare solo i file * .orig: git clean -f -e '*.*' -e '!*.orig' esiste solo un pattern exclude, ma ha un piccolo supporto per i pattern negativi. Quindi possiamo escludere tutti i file *.*e quindi negare l'esclusione dei soli *.origfile.
leorleor,


6

Puoi ignorare i file usando .gitignore

Inserisci * .orig nell'elenco come mostrato qui

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

per eliminare i file correnti è possibile creare script di shell ed eseguire dalla cartella del progetto come di seguito

for file in `find *.orig -type f -print`
do
   echo "Deleting file $file"
   git rm $file -f       
done

5
Anche se sicuramente può farlo, non è la cosa giusta da fare qui :)
Sergio Tulentsev,

1
Penso che sia una buona idea in quanto mantiene il backup ma non interferisce con i file di gestione
temporanea

@akazemis - lo penseresti, ma quando cerchi il codice vedi il doppio dei risultati di ricerca che desideri (il che ti dà una falsa percezione di ciò che è nel tuo ultimo codice). È così raro che preferirei semplicemente vivere con il pericolo di non avere file orig. È meglio solo impegnarsi regolarmente.
Sridhar Sarnobat,

5

Sfortunatamente git cleannon funziona per me perché ho *.origaggiunto al mio file gitignore globale, quindi vengono ignorati anche da clean. Anche la corsa git clean -xnon va bene perché non voglio che tutti i miei file ignorati vengano eliminati. git clean -iè utile, ma in realtà non voglio rivedere ogni singolo file.

Tuttavia, possiamo usare un modello di esclusione e annullare la corrispondenza. Anteprima con questo comando:

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

Quindi, quando sei sicuro, passa la forcebandiera per eliminarli davvero:

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

Basato sul commento di leorleor


3

git rm Gemfile.lock.orig e il resto dei file non è necessario. git commit --amend

Per rimuovere completamente quei BLOB, git gc --prune=0 --aggressive


@linquizebut commit di git rm Gemfile.lock.orig andrà nell'ultimo commit usando un tipo di modifica, giusto? c'è un altro modo per non avere alcun commit per tale file?
maximus ツ

2

Per me git clean -frimosso tutti i file * .oig. E mantiene quelli che erano già lì prima.

Questo è quello che (quasi) sembrava dopo l'unione:

$ 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/era già lì prima dell'unione come file non tracciato. .idea/misc.xml.orig(e molto altro) dovevano essere rimossi.

=> Utilizzando git clean -f:

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

provocato:

$ 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/

0

puoi semplicemente fare git status -s | grep "\.orig$" | awk '{print $2}' | xargs -n1 -r echo rm

TL; DR;

git status -s ti permette di ottenere tutti i file modificati / mancanti rispetto all'indice

grep "\.orig$" filtrare i file, mantenendo la fine di ".orig"

awk '{print $2}' elenca il nome del file (ignorando le informazioni git, ad es. A, M, ??)

xargs -n1 -r echo rm stampa rimuove i comandi su ogni argomento (-n1: uno alla volta e -r: salta quando è vuoto) basta copiare e incollare i comandi controllando due volte i file da rimuovere.


Sebbene ciò possa rispondere alla domanda degli autori, manca alcune parole esplicative e / o collegamenti alla documentazione. Gli snippet di codice non elaborati non sono molto utili senza alcune frasi attorno a loro. Puoi anche trovare molto utile come scrivere una buona risposta . Modifica la tua risposta
giallo

-4

git rm <file>

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

Aggiungi anche file / directory che desideri ignorare nel tuo file .gitignore.


git rm <file> <file>Elencali e basta.
veritas1,

Quindi è necessario elencare tutti i file o utilizzare uno strumento come find per passarli a git rm, oppure usare un glob shell e passare su di essi. Git non duplica questa funzionalità standard della riga di comando Unix.
mabraham,

1
i file orig non vengono aggiunti al repository, quindi non è necessario utilizzarli git rm, basta usare rminvece
Edson Medina
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.