Come elencare tutti i file per ogni revisione in Git (come hg manifest di Mercurial - tutti)?


10

Mercurial ha un comando per elencare tutti i file che il repository ha per ogni revisione:

hg manifest --all

Esiste un comando equivalente in Git?


Qualcosa come git log --stat?
jmreicha,

4
git ls-files?
NN,

Solo curioso, per quale motivo hai bisogno di questo?
Stephen Jennings,

@StephenJennings: è un modo migliore per sapere che tipo di file si ha sotto il controllo della versione rispetto a fare " ls -Rmeno .gitignore" mentalmente . L'utilità in generale: si può più o meno sapere cosa sta succedendo, ma l'introspezione del repository dà una fiducia che si conosce. Soprattutto per gli utenti principianti, tale sicurezza fa una grande differenza nella piacevolezza del programma. Git non rende rassicurante i suoi utenti una priorità, motivo per cui così tante persone comprensibilmente lo odiano fino a quando non lo imparano.
Esteis,

Risposte:


3

Sono assolutamente terribile con gli script di shell, quindi questo è sicuramente non ottimale, ma questo genere di cose potrebbe farlo per te, supponendo che tu stia usando bash. Spero che qualcun altro possa venire a ripulirlo, o sostituirlo con qualcosa di meglio. L'ho provato solo sul mio Mac, quindi attenzione.

Dovrebbe stampare tutti i file in commit che sono antenati dell'attuale HEAD. Salvalo in un file chiamato manifest.shda qualche parte nel tuo percorso:

#!/bin/bash

TFILE=$(mktemp -t git-manifest)

for sha in $(git log --pretty=format:%H)
do
    git ls-tree --name-only --full-tree -r $sha >> $TFILE
done

sort -u $TFILE
rm $TFILE

1
Non è necessario exportpoiché non deve essere disponibile nei processi figlio. Se il loop è su hash SHA, il loop funziona bene, altrimenti readsarebbe meglio usare e citare la variabile. sortha -uun'opzione che fa quello che uniqfa. Il file non verrà visualizzato rmquando si annulla a metà, ne avresti bisogno trap, ma probabilmente sarebbe eccessivo per questo script.
Daniel Beck

@DanielBeck: grazie, l'ho leggermente aggiornato. mktempnon esiste in Git Bash, dovrei trovare un modo per affrontarlo in modo che anche Windows possa giocare.
Stephen Jennings,
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.