2010-03-30 6 views
6

Ho bisogno di generare un log di tipo tra due Tag all'interno di un progetto controllato usando git, in particolare il codice sorgente di Android. Questo elenco dovrebbe includere tutti i file/directory/etc che sono stati modificati, spostati, rinominati, cancellati, creati.Creare un elenco di file/directory modificati/ecc. usando git tra due tag

Qualsiasi aiuto sarebbe fantastico. E se hai un modo per farlo su tutta la sorgente Android in una volta ... ancora meglio.

+0

per chiarire: Non mi interessa Quali modifiche sono state apportate all'interno dei file solo che hanno cambiato. Devo tuttavia sapere quali modifiche sono state apportate alle directory e ai collegamenti simbolici. – dan

+1

http://stackoverflow.com/questions/1038589/how-do-i-find-common-files-changed-between-git-branches aiuta? – VonC

+0

Eh? Hai bisogno di file ma non hai bisogno di file? La tua domanda non è molto chiara ... – drozzy

risposta

6

Se hai bisogno di trovare quale file sono diversi:

git diff --name-only <tag1> <tag2> 

Se hai bisogno di trovare tutti i file modificati:

git log --name-only --pretty=format: <tag1>..<tag2> | 
    grep -v '^$' | sort | uniq 

--pretty=format: è per sopprimere le informazioni di stampa sui commit e stampare solo la parte diff. Si noti che nel caso di Git Log l'ordine di <tag1> e <tag2> è importante.

+0

Ciò ha sicuramente aiutato e penso che risolva il mio problema per la maggior parte. Un paio di domande. 1) esiste un modo per limitare questo per mostrare solo un tipo di elemento (cioè solo le directory) o per lo meno etichettare il tipo di elemento. 2) hai detto che l'ordine del tag è importante, puoi indicarmi un documento che spiega come l'ordinamento faccia la differenza, così posso determinare il mio ordine corretto. (Continuerò a ricercare tutto da solo e postback se trovo quello che sto cercando in modo indipendente) – dan

+0

modifica l'esempio precedente per leggere (cioè solo collegamenti simbolici) come aver letto il commento qui sotto che vedo è necessario un comando diverso per trovare le directory modificate – dan

+0

@dan: Re 2) nel caso di "' git log .. '" mostra la cronologia dal tag2 successivo al tag1, ovvero tag1 deve essere precedente a tag2. Bene, puoi sempre usare simmetrico ' ... ' che mostra i cambiamenti dall'antenato comune ... –

1

Come detto nei commenti, "How do I find common files changed between git branches?" è la soluzione principale qui:

git log [--pretty=<format>] --name-only tag1..tag2 

o

git diff --name-only tag1 tag2 

(di cui pure Gitology recipe)

MA: come accennato in "How to get a list of directories deleted in my git repository? ", Git traccia solo il contenuto dei file, non le directory stesse.

Per includere informazioni sulle directory, è necessario iniziare a giocare con git diff-tree.

qualsiasi directory che è stato creato o rimosso avrà 040000 nella seconda o prima colonna e 000000 nella prima o nella seconda colonna, rispettivamente. Queste sono le "modalità" per la voce ad albero per le voci sinistra e destra.

Qualcosa di simile (secondo Charles Bailey):

git diff-tree -t origin/master master | grep 040000 | grep -v -E '^:040000 040000' 
+0

grazie per la risposta e il link per ulteriori informazioni, cercherò su di loro e vedere se funzionano per la mia situazione unica. – dan