Apa yang dilakukan git rev-parse?

283

Apa yang git rev-parseharus dilakukan

Saya telah membaca halaman manual tetapi itu menimbulkan lebih banyak pertanyaan daripada jawaban. Hal-hal seperti:

Pilih dan pijat parameter

Pijat ? Apa artinya?

Saya menggunakan sebagai resolver (untuk SHA1) dari penentu revisi, seperti

git rev-parse HEAD^

atau

git rev-parse origin/master

Apakah ini tujuan perintah? Jika tidak, apakah benar menggunakannya untuk mencapai ini?

tinggi
sumber
3
Sejauh yang saya bisa lihat di halaman manual, ini sebagian besar utilitas internal untuk mengurai revisi / nama objek untuk perintah lain. Apa yang Anda lakukan adalah tujuan dari rev-parseperintah tersebut. Anda juga dapat menggunakannya untuk menormalkan baris perintah, sehingga program yang sebenarnya tidak harus memahami sintaks nama objek yang rumit dari Git (Anda akan menggunakan git rev-parseuntuk mengubah, atau "memijat", parameter tertentu di baris perintah sebelum program aktual disebut).
60
Halaman manual untuk git rev-parseitu sangat tidak bisa dimengerti. Saya terkejut tidak ada yang peduli untuk menulis ulang jargon itu menjadi sesuatu yang dapat dibaca manusia, bahkan setelah 5 tahun.
not2qubit
@ not2qubit Me: 'Terima kasih telah menjelaskan, saya merasa lebih rendah.' Linus Torvalds: 'Saya membacanya kembali, bagian mana yang tidak Anda mengerti?'
Brain2000

Jawaban:

245

git rev-parseadalah plumbingperintah tambahan yang terutama digunakan untuk manipulasi.

Salah satu penggunaan umum git rev-parseadalah untuk mencetak hash SHA1 yang diberikan specifier revisi. Selain itu, ia memiliki berbagai opsi untuk memformat output ini seperti--short untuk mencetak SHA1 unik yang lebih pendek.

Ada juga kasus penggunaan lain (dalam skrip dan alat lain yang dibangun di atas git) yang telah saya gunakan untuk:

  • --verify untuk memverifikasi bahwa objek yang ditentukan adalah objek git yang valid.
  • --git-diruntuk menampilkan jalur abs / relatif dari .gitdirektori.
  • Memeriksa apakah Anda saat ini di dalam repositori menggunakan --is-inside-git-diratau dalam pohon kerja menggunakan--is-inside-work-tree
  • Memeriksa apakah repo itu kosong --is-bare-repository
  • Mencetak hash cabang SHA1 ( --branches), tag ( --tags) dan referensi juga dapat difilter berdasarkan remote (menggunakan --remote)
  • --parse-optuntuk menormalkan argumen dalam skrip (sejenis mirip dengan getopt) dan mencetak string keluaran yang dapat digunakaneval

Massagehanya menyiratkan bahwa adalah mungkin untuk mengubah info dari satu bentuk ke bentuk lain yaitu perintah transformasi. Ini adalah beberapa contoh cepat yang dapat saya pikirkan:

  • cabang atau nama tag ke SHA1 komit yang ditunjuknya sehingga dapat diteruskan ke perintah plumbing yang hanya menerima nilai SHA1 untuk komit.
  • rentang revisi A..Buntuk git logatau git diffke argumen yang setara untuk perintah pipa ledeng yang mendasarinya sebagaiB ^A
Tuxdude
sumber
102

Hanya untuk menguraikan etimologi nama perintah rev-parse, Git secara konsisten menggunakan istilah revdalam perintah pipa sebagai singkatan dari "revisi" dan umumnya berarti hash SHA1 40-karakter untuk komit. Perintah rev-listmisalnya mencetak daftar hash commit 40-char untuk cabang atau apa pun.

Dalam hal ini nama mungkin diperluas ke parse-a-commitish-to-a-full-SHA1-hash. Sementara perintah memiliki beberapa fungsi tambahan yang disebutkan dalam jawaban Tuxdude, namanya tampaknya menjadi kasus penggunaan mengubah referensi yang ramah pengguna seperti nama cabang atau hash disingkat menjadi hash 40 karakter SHA1 yang jelas paling berguna untuk banyak pemrograman / plumbing tujuan.

Saya tahu saya berpikir itu adalah "reverse-parse" sesuatu untuk sementara waktu sebelum saya mengetahuinya dan memiliki masalah yang sama membuat pengertian istilah "memijat" dan "memanipulasi" :)

Bagaimanapun, saya menemukan gagasan "parse-to-a-revisi" ini cara yang memuaskan untuk memikirkannya, dan konsep yang dapat diandalkan untuk membawa perintah ini ke pikiran ketika saya membutuhkan hal semacam itu. Seringkali dalam skrip Git Anda mengambil referensi komit ramah-pengguna sebagai input pengguna dan umumnya ingin menyelesaikannya menjadi referensi kerja yang valid dan tidak ambigu segera setelah menerimanya mungkin. Kalau tidak, input terjemahan dan validasi cenderung berkembang biak melalui skrip.

scanny
sumber
9
Terima kasih atas penjelasannya, saya tidak mengerti sedikit pun tentang git-docs: git-scm.com/docs/git-rev-parse
Jacob McKay
dapatkah Anda memberi kami contoh messagingdan manipulationseperti yang Anda singgung sebelumnya?
Bo Chen
5
Dengan kata lain, git rev-parsekependekan dari git revision-parse. Dibutuhkan input yang diberikan dan mengembalikan ID revisi 40-karakter yang sesuai.
Jonathan Benn
36

git rev-parseJuga berfungsi untuk mendapatkan nama cabang saat ini menggunakan flag --abbrev-ref seperti:

git rev-parse --abbrev-ref HEAD
mitra
sumber
Apakah mungkin mendapatkan pesan komit dengan cara ini?
Leo Droidcoder
2
@LeoDroidcoder cobagit log --format=%B -n 1 <revision>
hipyhop