Cetak Hash Revisi Mercurial Saat Ini?

124

Apakah ada cara yang lebih baik untuk mengekstrak hash revisi saat ini di Mercurial daripada

hg log -l1|grep changeset|cut -d: -f3

?

Bagian dari skrip penerapan aplikasi web saya "menandai" tarball aplikasi yang diunggah dengan hash revisinya yang unik.

rentzsch
sumber
2
Perhatikan bahwa hg log -l 1memberi Anda kumpulan perubahan terbaru, belum tentu yang saat ini Anda perbarui! Bendera -f membatasi keluaran log hg ke leluhur dari direktori kerja saat ini, sehingga hg log -f -l1lebih mendekati apa yang Anda inginkan.
tahan air

Jawaban:

196

Mencoba:

hg id -i

Contoh:

$ hg id -i
adc56745e928
Ry4an Brase
sumber
22
Jika orang melewatkan solusi di bawah ini jika Anda ingin menggunakan hash lengkap: hg --debug id -ijika Anda ingin dukungan template, gunakan hg parent --template '{node}' Jangan gunakan hg log -l 1, ini adalah kumpulan perubahan repositori terbaru, bukan kumpulan perubahan copy pekerjaan saat ini.
Joseph Lisee
7
Menggunakan --debug dalam skrip tidak disarankan, karena output kurang dikontrol dengan cermat dengan kompatibilitas mundur. Gunakan template. Jika Anda ingin melakukannya dengan log maka gunakan .titik sebagai revisi.
Ry4an Brase
Terima kasih Ry4an Saya tidak tahu tentang "-r." mereferensikan revisi copy pekerjaan saat ini. Tampaknya ini langkah yang lebih baik daripada beralih dari "log" ke "induk".
Joseph Lisee
Tidak masalah. hg help revisionsdan hg help revsetsmemiliki beberapa pintasan hebat yang hebat seperti itu.
Ry4an Brase
Tapi itu bukan yang paling jawaban yang spesifik terhadap pertanyaan, karena afaik hg id -icetakan hanya pendek (12 karakter) bentuk hash id global dan sejak hg identifykekurangan --templateAFAICS tidak ada cara untuk mengekstrak hanya revisi dan tidak ada lagi sejak halaman manual mengatakan itu mencetak ringkasan.
Shelby Moore III
41
hg --debug id -i

Ini akan mengeluarkan hash yang panjang, dengan nilai tambah jika ada perubahan yang tidak mengikat.

jujur
sumber
Itu tampaknya menjadi default di 3.1.2
nickd
1
Downvoting karena komentar Ry4an .
Shelby Moore III
20

Anda dapat menggunakan --template dengan perintah induk, saya menggunakan ini untuk mendapatkan hash yang panjang:

hg parent --template '{node}'
bayangan hitam
sumber
The hg man page mengatakan hg parentsadalah BERLAKU LAGI , meskipun mungkin bahwa kekuatan tidak telah terjadi ketika Anda menulis jawaban ini. Jika ada gabungan tanpa ikatan, ada dua revisi induk .
Shelby Moore III
2
Bisakah seseorang memberi tahu kami mengapa orang tua hg tidak digunakan lagi dan apa yang harus kami gunakan?
Vincent
17

Meringkas jawaban dan tanggapan mereka, tampaknya ini adalah cara terbaik untuk mencetak pengenal unik (bukan bentuk pendek) dari versi saat ini:

hg log -l 1 --template '{node}\n' -r .
rog
sumber
Perhatikan jika ada penggabungan tanpa komitmen , .(titik) hanya menampilkan induk pertama dari dua induk grup kerja.
Shelby Moore III
9
hg log -l 1 --template '{node|short}\n'

Lihat dokumen , paragraf "Dasar-dasar pembuatan template" dan mengikuti.

Alex Martelli
sumber
2
Saya ingin hampir ini, tetapi dengan hash yang panjang. Aliasing liduntuk log -l 1 --template '{node}\n'mencapai hal ini - cetak ID revisi lengkap.
Michael Ekstrand
6
Ini mencetak set perubahan yang ditarik terbaru. Direktori kerja kami dapat diperbarui ke kumpulan perubahan yang lebih lama. Untuk mencetak set perubahan yang kita perbarui, gunakan "hg id". Satu-satunya masalah adalah, "hg id" tidak mendukung template atau memiliki opsi untuk mencetak hash yang panjang (kecuali seseorang tahu bagaimana melakukannya).
Eiver
1
Seperti yang dikatakan Eiver, ini tidak mencetak revisi sebenarnya di copy pekerjaan Anda hanya yang terbaru di repositori Anda. Karena menggunakan solusi ini dapat menyebabkan kesalahan pelacakan, saya telah memilih solusi ini.
Joseph Lisee
1
Ditto Joe downvoting. Juga penggunaan @Eiver hg --debug id -iseperti yang dikatakan di tempat lain.
AJP
3

Perintah non-DEPRECATED yang paling spesifik yang karena adanya --templatehanya dapat mencetak informasi revisi jika keringkasan itu diperlukan (seperti yang tersirat oleh pertanyaan):

hg log -l 1 -b . -T '{rev}:{node|short}\n'

Atau untuk bentuk hash unik yang panjang:

hg log -l 1 -r . -T '{node}\n'

The -b .atau branch(.)(dot untuk nama cabang) berarti cabang direktori kerja saat ini dan -r .berarti revisi direktori kerja saat ini, yang didokumentasikan dalam hg help revsetsdan hg help revisions.

Perhatikan jika ada penggabungan tanpa komitmen , .(titik) hanya menampilkan induk pertama dari dua induk grup kerja.

Shelby Moore III
sumber
3

Seperti yang ditunjukkan orang lain, jangan gunakan log -l.

Gunakan hg log -r .untuk mendapatkan informasi mendetail, bukan menggunakan hg idyang keluarannya terbatas dan tidak mendukung templat. Anda juga bisa membuat sedikit alias like here = log -r .and use hg here. Jika Anda hanya ingin menggunakan hash hg log -r . --template '{node}\n'.

Gru
sumber
1

Jika TortoiseHg digunakan, klik kanan baris revisi di Workbench dan pilih "Salin hash" (sesuai dokumentasi ).

masukkan deskripsi gambar di sini

texnic
sumber