Bagaimana cara mendaftar setiap file untuk setiap revisi di Git (seperti manifes hg Mercurial - semua)?

10

Mercurial memiliki perintah untuk membuat daftar setiap file yang dimiliki repositori untuk setiap revisi:

hg manifest --all

Apakah ada perintah yang setara di Git?

IT2
sumber
Sesuatu seperti git log --stat?
jmreicha
4
git ls-files?
NN
Hanya ingin tahu, untuk alasan apa Anda membutuhkan ini?
Stephen Jennings
@StephenJennings: ini adalah cara yang lebih baik untuk mengetahui jenis file apa yang dimiliki seseorang di bawah kontrol versi daripada melakukan " ls -Rminus .gitignore" secara mental . Kegunaannya secara umum: orang mungkin lebih atau kurang tahu apa yang sedang terjadi, tetapi introspeksi dari repositori memberikan satu keyakinan bahwa orang tahu. Khusus untuk pengguna pemula, kepercayaan diri seperti itu membuat perbedaan besar dalam cara menyenangkan program ini untuk digunakan. Git tidak menjadikan meyakinkan penggunanya prioritas, itulah sebabnya banyak orang yang membencinya dimengerti sampai mereka mempelajarinya.
Esteis

Jawaban:

3

Saya benar-benar mengerikan pada skrip shell jadi ini pasti sub-optimal, tetapi hal semacam ini mungkin melakukannya untuk Anda, dengan asumsi Anda menggunakan bash. Semoga orang lain bisa datang dan membersihkannya, atau menggantinya dengan sesuatu yang lebih baik. Saya hanya mengujinya di Mac saya, jadi waspadalah.

Seharusnya mencetak semua file dalam komit yang merupakan nenek moyang dari KEPALA saat ini. Simpan di file yang disebut manifest.shdi suatu tempat di jalur Anda:

#!/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
sumber
1
Tidak perlu exportkarena tidak perlu tersedia dalam proses anak. Jika loop melebihi hash SHA, loop bekerja dengan baik, jika tidak sesuatu menggunakan readdan mengutip variabel akan lebih baik. sortmemiliki -uopsi yang melakukan apa yang uniqdilakukannya. File tidak akan mendapatkan rmketika Anda membatalkan setengah jalan, Anda akan memerlukannya trapuntuk itu, tapi itu mungkin berlebihan untuk skrip ini.
Daniel Beck
@DanielBeck: Terima kasih, saya memperbaruinya sedikit. mktemptidak ada di Git Bash, saya harus mencari cara untuk menghadapinya sehingga Windows dapat bermain juga.
Stephen Jennings