Saya tahu cara mengambil tanggal modifikasi terakhir dari satu file di repositori git:
git log -1 --format="%ad" -- path/to/file
Apakah ada cara sederhana dan efisien untuk melakukan hal yang sama untuk semua file yang ada di repositori?
Jawaban sederhana adalah untuk beralih melalui setiap file dan menampilkan waktu modifikasinya, yaitu:
git ls-tree -r --name-only HEAD | while read filename; do
echo "$(git log -1 --format="%ad" -- $filename) $filename"
done
Ini akan menghasilkan output seperti:
Fri Dec 23 19:01:01 2011 +0000 Config
Fri Dec 23 19:01:01 2011 +0000 Makefile
Tentunya, Anda dapat mengontrol ini karena ini hanya skrip bash pada titik ini - jadi silakan menyesuaikannya dengan isi hati Anda!
git ls-tree -r --name-only HEAD | while read filename; do echo "$(git log -1 --format="%ai" -- $filename) $filename"; done | sort
Pendekatan ini juga berfungsi dengan nama file yang mengandung spasi:
Contoh output:
Output dapat diurutkan berdasarkan cap waktu modifikasi dengan menambahkan
| sort
sampai akhir:sumber
Ini adalah perubahan kecil dari jawaban Andrew M. (Saya tidak dapat mengomentari jawabannya.)
Bungkus $ nama file pertama dalam tanda kutip ganda , untuk mendukung nama file dengan ruang tertanam.
Output sampel:
Saya menghargai bahwa solusi Andrew (berdasarkan ls-tree ) bekerja dengan repositori kosong! (Ini tidak berlaku untuk solusi yang menggunakan file ls.)
sumber
Ini adalah versi kulit ikan dari jawaban Andrew M, bagi mereka yang menggunakan ikan.
Saya menyimpan ini sebagai fungsi ikan untuk akses mudah.
sumber
Bagi kita yang menggunakan Windows dan PowerShell, jawaban Andrew M, dengan tweak yang dapat dibaca komputer:
Contoh output:
sumber