2015-02-02 16 views
8

Come aprire tutti i file cancellati, modificati e creati dall'ultimo commit Git, ho provato ad usare prima git status, ma era difficile da analizzare, quindi ho trovato git status --porcelain era più facile da analizzare e con awk + vim + un po 'di magia bash era facile da fareCome aprire tutti i file modificati con git?

+2

Che cosa significa anche aprire un file cancellato? – unwind

+0

ad es .: 'a.rb' è stato eliminato,' vim a.rb' aprirà un file vuoto, salvandolo creerà un file vuoto, non fare nulla sarà utile per notare che il file è stato cancellato – Dorian

risposta

10

Così, ho trovato la soluzione con vim:

vim $(git status --porcelain | awk '{print $2}') 

E ho posto questa domanda + rispondo solo per rispondere a me stesso e condividerla a internet

+0

I backtick sono deprecati –

+0

@JID [Nope.] (Http://unix.stackexchange.com/a/126928/5381) –

+0

@HolgerJust Hai citato una risposta su questo punto, che in realtà non prova nulla. Ma a prescindere, anche se non sono deprecati, sono obsoleti e non hanno assolutamente alcun vantaggio su '$()' considerando che '$()' ha molti vantaggi su di essi. L'unica ragione per usarli è la compatibilità con una vecchia Bourne Shell. Anche se leggi il commento più importante per quel post, sono della stessa opinione. –

4
git ls-files --modified --deleted --others -z | xargs -0 vim 
+1

Ottengo tonnellate di file da 'tmp /' che sono nel mio '.gitignore' – Dorian

+0

Suggerisco' git ls-files -o -m --exclude-standard' per aprire file modificati e nuovi, ma escludere ignorati. Inoltre, per me la soluzione 'xargs' non funziona con vim (convoglia tutti i nomi dei file come una stringa per vim come nuovo file e blocca l'input del terminale), mentre' vim $() 'funziona bene. – ruuter

2

Da questo blog, è possibile modificare ~/.gitconfig e aggiungere questa riga:

[alias] 
    edit = !$EDITOR $(git status --short | awk '$1 ~ /^M|A|U/ {print $2}') 

Ora, git edit aprirà tutti i file modificati

+0

L'uso di '--porcelain' è probabilmente migliore, perché l'output sarà lo stesso indipendentemente dalla configurazione, ... – edi9999

+1

@ edi9999' --porcelain' non è relativo alla directory di lavoro corrente, che potrebbe essere un valido motivo per usa '--short' invece. –

+0

+1 per git alias, ma per il comando git preferisco usare 'git ls-files -o -m --exclude-standard', che include anche nuovi file e non richiede il passaggio awk. – ruuter

4

Per fare in modo che funzioni in una sottocartella del repository git, uso semplicemente l'opzione -s per git status. L'opzione Vim -O apre i file in split verticale.

vim -O $(git status -s | awk '{print $2}')

+0

Si vorrebbe usare il flag '-p' invece di' -O' nel comando vim per aprirli nelle schede, perché se si hanno più di 2 file modificati la schermata di vim sarà raggruppata in cluster con le divisioni. – betoharres

Problemi correlati