Jak wyświetlić listę wszystkich plików dla każdej wersji Gita (np. Manifest hg Mercurial --all)?

10

Mercurial ma polecenie, aby wyświetlić każdy plik, który repozytorium ma dla każdej wersji:

hg manifest --all

Czy w Git istnieje równoważne polecenie?

IT2
źródło
Coś w stylu git log --stat?
jmreicha
4
git ls-files?
NN
Ciekawe, z jakiego powodu tego potrzebujesz?
Stephen Jennings,
@StephenJennings: to lepszy sposób, aby dowiedzieć się, jakie pliki masz pod kontrolą wersji, niż mentalnie robiąc „ ls -Rminus .gitignore”. Przydatność w ogóle: można mniej więcej wiedzieć, co się dzieje, ale introspekcja repozytorium daje pewność, że się wie. Szczególnie dla początkujących użytkowników taka pewność robi dużą różnicę w tym, jak przyjemny jest program. Git nie traktuje uspokajania swoich użytkowników priorytetem, dlatego tak wiele osób w zrozumiały sposób nienawidzi go, dopóki się go nie nauczy.
Esteis,

Odpowiedzi:

3

Jestem absolutnie okropny w skryptach powłoki, więc to z pewnością nie jest optymalne, ale tego rodzaju rzeczy mogą zrobić to dla ciebie, zakładając, że używasz bash. Mam nadzieję, że ktoś inny przyjdzie i posprząta go lub zastąpi czymś lepszym. Testowałem to tylko na komputerze Mac, więc uważaj.

Powinien wydrukować wszystkie pliki w commits, które są przodkami obecnego HEAD. Zapisz go w pliku nazwanym manifest.shgdzieś na swojej ścieżce:

#!/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
Stephen Jennings
źródło
1
Nie ma exporttakiej potrzeby, ponieważ nie musi być dostępny w procesach potomnych. Jeśli pętla jest ponad skrótami SHA, pętla działa dobrze, w przeciwnym razie readlepiej byłoby użyć i zacytować zmienną. sortma -uopcję, która robi to, co uniqrobi. Plik nie dostanie się rmd, gdy anulujesz w połowie, będziesz potrzebować trapdo tego, ale prawdopodobnie byłoby to nadmierne w przypadku tego skryptu.
Daniel Beck
@DanielBeck: Dzięki, zaktualizowałem to nieco. mktempnie istnieje w Git Bash, powinienem znaleźć sposób, aby sobie z tym poradzić, aby system Windows mógł także grać.
Stephen Jennings