Mercurial - semua file yang diubah dalam kumpulan perubahan?

97

Bagaimana Anda bisa menentukan semua file yang diubah dalam set perubahan tertentu?

Saya tidak mencari perbedaan dalam kasus ini, hanya daftar tambah / hapus / modifikasi.

hg log -vprX melakukan daftar diff tetapi saya hanya ingin file.

Marcus Leon
sumber
Kemungkinan duplikat dari Memeriksa satu
set

Jawaban:

149

Jika Anda ingin membuat daftar hanya file yang telah diubah maka Anda harus menggunakan "perintah status" Berikut ini akan daftar perubahan file dalam revisi REV

hg status --change REV
pyfunc
sumber
13
+1, tetapi OP mungkin menginginkan bendera -n/ --no-statusjuga.
Niall C.
7
Untuk penyalinan mudah:hg status --no-status --change REV
zastrowm
+1 Ini jauh lebih mudah untuk diketik daripada hg status --rev REV~1:REVyang biasa saya lakukan.
Patrick Oscity
3
gunakan '.' untuk REV saat ini. artinya -hg status --change .
zaxy78
16

Hapus saja pdari Anda hg log -vprakan menampilkan daftar file. -pBerarti tunjukkan tambalan. Anda juga dapat menggunakan templat untuk memformat keluaran sesuai selera Anda.

Geoffrey Zheng
sumber
3
Saya pikir Anda akan membutuhkan template berikut: --template 'files: {files} \ n'
Ton Plomp
1
Saya yakin {files} adalah bagian dari -v flag default template
eskhool
2
hg log -r. --template '{join (files, "\ n")}' ke baris baru pisahkan file
Foxichu
1
Komentar @Foxichu berhasil untuk saya, tetapi agak hacky. sebenarnya jawaban atas - hg status --change .bekerja lebih baik dan memberikan awalan tindakan file (A \ M \ D dll) dan jalur relatif yang lebih baik
zaxy78
13

Saya tahu pertanyaannya adalah untuk satu set perubahan, tetapi jika Anda ingin semua file dimodifikasi untuk berbagai rangkaian perubahan, Anda dapat melakukannya

hg status --rev 1 --rev 10 -m
Nick DeVore
sumber
2
Sangat buruk. File, dimodifikasi dalam jangkauan hg log -r BEGIN:END --template "{files}\n"seperti @ geoffrey-zheng dan @ton menulis dua tahun lalu !!!
Lazy Badger
Maaf soal itu. Diasumsikan jawaban mereka adalah untuk satu set perubahan.
Nick DeVore
1
Menurut pendapat saya, jawaban ini tidak terlalu buruk. hg status --rev BEGIN --rev ENDadalah: 1. lebih mudah diingat daripada hg log -r BEGIN:END --template "{files}\n"; 2. mencetak file dalam baris terpisah tanpa menggunakan sed(@Eric Lawler) atau join()(@Foxichu); 3. tanpa -mbendera, ini tidak hanya menampilkan file yang dimodifikasi, tetapi juga ditambahkan dan dihapus (pewarnaan standar yang bagus juga berlaku di sini); 4. ada -adan -rbendera yang memungkinkan penyaringan berbeda; 5. Jika seseorang tidak menginginkan status awalan, ada -nopsi yang menekannya.
Michał Wróbel
9

Revisi Komitmen Saat Ini

hg status --change .

.adalah singkatan dari rev saat ini, seperti @HEADdi Git

Revisi Belum Terikat Saat Ini

hg status

Revisi yang Dilakukan Sewenang-wenang

hg status --change REV_ID
Gibolt
sumber
1
jawaban paling sederhana & akurat!
zaxy78
2

Temukan pertanyaan ini melalui Googling untuk konsep serupa. Untuk menampilkan semua file yang diubah melalui serangkaian rangkaian perubahan, semudah:

hg log -r [start rev]:[end rev] --template "{file_mods}{file_adds}\n" | sed -e 's/ /\n/g' | sort -d | uniq
  1. hg log -r [start rev]:[end rev] --template "{file_mods}{file_adds}\n"akan menunjukkan kepada Anda daftar setiap file yang diubah atau ditambahkan di setiap set perubahan, dari [mulai rev] hingga [akhir rev], dengan setiap file perubahan di baris baru. Tukar {file_mods}{file_adds}dengan {files}untuk menampilkan semua file yang dimodifikasi, ditambahkan, atau dihapus.
  2. sed -e 's/ /\n/g' akan membagi semua file untuk ditampilkan pada baris terpisah dan
  3. sort akan, er, mengurutkan daftar untuk Anda sehingga kami dapat memfilter daftar dengan uniq
  4. uniq akan memfilter daftar untuk menghapus duplikat — file yang diubah di lebih dari satu revisi.
Eric L.
sumber
Solusi ini merekatkan yang terakhir diubah dengan file yang ditambahkan pertama. Juga, itu tidak menangani spasi di nama file dengan benar. --templateSolusi berbasis A tanpa kekurangan ini dapat dibangun menggunakan join()seperti yang disarankan oleh @Foxichu.
Michał Wróbel
1

Saya tahu pertanyaan ini adalah pertanyaan lama dan saya terkejut tidak ada yang baru saja menawarkan formulir kode yang dimodifikasi OP. Saya mendapat daftar file yang dimodifikasi / ditambahkan / dihapus (tidak berlabel yang mana) dengan hanya menjalankan hg log -v. Atau apa yang sebenarnya saya perlukan hg log -v -l5untuk melihat file yang telah dimodifikasi / ditambahkan / dihapus dalam 5 komit terakhir (termasuk yang belum saya dorong ke repo).

Đorđe Relić
sumber
"tidak ada yang baru saja menawarkan formulir kode yang dimodifikasi OP" - @Geoffrey Zheng melakukan hal itu ~ 1 jam setelah pertanyaan diposting
Michał Wróbel
-2

Jika Anda seperti kebanyakan toko, Anda menggunakan sistem tiket untuk melacak perubahan. Jika Anda mengetahui nomor tiket dan ingin menemukan semua komit yang terkait dengan tiket itu (dengan asumsi Anda menyertakan nomor tiket di pesan komit), Anda dapat menggunakan:

hg log -k TICKET_NUMBER

Ini menampilkan semua revisi yang terkait dengan tiket. Namun, itu tidak mencantumkan file. Anda dapat menggunakan salah satu jawaban di atas untuk mendapatkan daftar file yang terkait dengan revisi.

Untuk membuatnya lebih sederhana, dengan menggabungkan info dari jawaban sebelumnya, Anda dapat melakukan hal berikut untuk mencari komit, termasuk file yang diubah:

hg log -vk TICKET_NUMBER
iDimensionz
sumber
Ini terkait dengan pertanyaan. Poster tersebut menanyakan cara mendapatkan file di kumpulan perubahan. Perubahan sering kali terkait dengan tiket. Solusi saya menunjukkan cara mendapatkan file yang terkait dengan kumpulan perubahan yang terkait dengan tiket.
iDimensionz