Karena birokrasi, saya perlu mendapatkan daftar semua file yang diubah dalam repositori saya untuk laporan (saya mulai dengan kode sumber yang ada).
Apa yang harus saya jalankan untuk mendapatkan daftar ini?
Karena birokrasi, saya perlu mendapatkan daftar semua file yang diubah dalam repositori saya untuk laporan (saya mulai dengan kode sumber yang ada).
Apa yang harus saya jalankan untuk mendapatkan daftar ini?
Jawaban:
Untuk file yang diubah antara SHA yang diberikan dan komit Anda saat ini:
git diff --name-only <starting SHA> HEAD
atau jika Anda ingin menyertakan file yang diubah-tetapi-belum-berkomitmen:
git diff --name-only <starting SHA>
Secara lebih umum, sintaks berikut akan selalu memberi tahu Anda file mana yang diubah antara dua komit (ditentukan oleh SHA atau nama lain):
git diff --name-only <commit1> <commit2>
git diff --name-only <SHA> <SHA>^
--name-statusflag sebagai ganti --name-onlyberguna untuk mendapatkan daftar file dan melihat status modifikasinya, seperti Ditambahkan atau Dimodifikasi.
--name-statusmenunjukkan apa yang terjadi pada mereka
Untuk menemukan nama semua file yang diubah sejak komit terakhir Anda:
git diff --name-only
Atau (untuk informasi lebih lanjut, termasuk file yang tidak dilacak):
git status
Untuk membuat daftar semua file yang diubah tidak dilacak yang dilacak:
git diff --name-only
Untuk daftar semua dipentaskan file berubah dilacak:
git diff --name-only --staged
Untuk membuat daftar semua file berubahan yang dipentaskan dan tidak dipentaskan :
{ git diff --name-only ; git diff --name-only --staged ; } | sort | uniq
Untuk membuat daftar semua file yang tidak dilacak (yang terdaftar oleh git status, jadi tidak termasuk file yang diabaikan):
git ls-files --other --exclude-standard
Jika Anda menggunakan ini dalam shell script, dan Anda ingin pemrograman memeriksa apakah perintah ini kembali apa-apa, Anda akan tertarik git diff's --exit-codepilihan.
Ketika saya telah menambahkan / memodifikasi / menghapus banyak file (sejak komit terakhir), saya ingin melihat modifikasi tersebut dalam urutan kronologis.
Untuk itu saya gunakan:
Untuk membuat daftar semua file yang tidak dipentaskan:
git ls-files --other --modified --exclude-standard
Untuk mendapatkan tanggal modifikasi terakhir untuk setiap file:
while read filename; do echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename; done
Meskipun ruvim menyarankan dalam komentar :
xargs -0 stat -c '%y %n' --
Untuk mengurutkannya dari yang terlama ke yang terbaru:
sort
Sebuah alias memudahkan penggunaan:
alias gstlast='git ls-files --other --modified --exclude-standard|while read filename; do echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename; done|sort'
Atau (lebih pendek dan lebih efisien, berkat ruvim )
alias gstlast='git ls-files --other --modified --exclude-standard|xargs -0 stat -c '%y %n' --|sort'
Sebagai contoh:
username@hostname:~> gstlast
2015-01-20 11:40:05.000000000 +0000 .cpl/params/libelf
2015-01-21 09:02:58.435823000 +0000 .cpl/params/glib
2015-01-21 09:07:32.744336000 +0000 .cpl/params/libsecret
2015-01-21 09:10:01.294778000 +0000 .cpl/_deps
2015-01-21 09:17:42.846372000 +0000 .cpl/params/npth
2015-01-21 12:12:19.002718000 +0000 sbin/git-rcd
Saya sekarang dapat meninjau modifikasi saya, dari yang terlama hingga yang terbaru.
xargsdan satu panggilan stat? Satu git ls-files -z --other --modified --exclude-standard | xargs -0 stat -c '%y %n' -- | sort
Saya perlu daftar file yang telah mengubah konten antara dua komit (hanya ditambahkan atau diubah), jadi saya menggunakan:
git diff --name-only --diff-filter=AM <commit hash #1> <commit hash #2>
Opsi-opsi filter yang berbeda dari dokumentasi git diff :
difilter = [(A | C | D | M | R | T | U | X | B)… [*]]
Pilih hanya file yang ditambahkan (A), Disalin (C), Dihapus (D), Dimodifikasi (M), Diubah nama (R), memiliki jenisnya (yaitu file biasa, symlink, submodule, ...) diubah (T), adalah Unmerged (U), Unknown (X), atau sudah dipasangkan Broken (B). Kombinasi karakter filter apa pun (termasuk tidak ada) dapat digunakan. Ketika * (Semua-atau-tidak ada) ditambahkan ke kombinasi, semua jalur dipilih jika ada file yang cocok dengan kriteria lain dalam perbandingan; jika tidak ada file yang cocok dengan kriteria lain, tidak ada yang dipilih.
Juga, huruf besar ini dapat diturunkan untuk dikecualikan. Misalnya --diff-filter = iklan mengecualikan jalur yang ditambahkan dan dihapus.
Jika Anda ingin membuat daftar status juga (mis. A / M), ubah --name-onlyke --name-status.
Daftar unstaged yang dimodifikasi dapat diperoleh dengan menggunakan git statusdan grepperintah seperti di bawah ini. Sesuatu seperti git status -s | grep M:
root@user-ubuntu:~/project-repo-directory# git status -s | grep '^ M'
M src/.../file1.js
M src/.../file2.js
M src/.../file3.js
....
Dengan git showAnda bisa mendapatkan hasil yang serupa. Untuk melihat komit (seperti yang terlihat pada git logtampilan) dengan daftar file yang disertakan, gunakan:
git show --name-only [commit-id_A]^..[commit-id_B]
Di mana [commit-id_A]komit awal dan [commit-id_B]komit terakhir dari yang ingin Anda tunjukkan.
Perhatian khusus dengan ^simbol. Jika Anda tidak mengatakannya, informasi commit-id_A tidak akan digunakan.
Jika Anda ingin memeriksa file yang diubah, Anda harus mengurus banyak hal kecil seperti mana yang terbaik untuk digunakan, seperti jika Anda ingin memeriksa file mana yang diubah, ketik saja.
git status - itu akan menampilkan file dengan perubahan
maka jika Anda ingin tahu perubahan apa yang harus dilakukan dapat diperiksa dengan cara,
git diff - akan menampilkan semua perubahan di semua file
itu baik hanya ketika hanya satu file yang dimodifikasi
dan jika Anda ingin memeriksa file tertentu maka gunakan
git diff