Saya butuh bantuan dengan skrip Bash yang secara otomatis akan menambahkan nama cabang git sebagai hash dalam pesan komit.
git
bash
git-branch
Tomer Lichtash
sumber
sumber
git branch | grep ...
untuk mendapatkan cabang saat ini adalah cara yang salah untuk melakukan ini. Pertimbangkan baikgit symbolic-ref -q HEAD
(seperti yang ditunjukkan dalam jawaban ini ) ataugit rev-parse --abbrev-ref HEAD
. Perintah symbolic-ref akan gagal jika Anda berada di HEAD yang terpisah, jadi jika Anda ingin mendeteksi kasus itu, gunakanlah. Jika tidak, metode rev-parse --abbrev-ref mungkin yang terbaik.Jawaban:
Gunakan
prepare-commit-msg
ataucommit-msg
githook .Ada beberapa contoh di
PROJECT/.git/hooks/
direktori Anda .Sebagai tindakan keamanan, Anda harus mengaktifkan pengait semacam itu secara manual pada setiap repositori yang ingin Anda gunakan. Padahal, Anda dapat memasukkan skrip dan menyalinnya pada semua klon ke dalam
.git/hooks/
direktori.sumber
.git/hooks/prepare-commit-msg.sample
. =) Yang perlu Anda ubah (setelah mengikuti petunjuk di komentar) adalah menyalin-tempel solusi apa pun dari stackoverflow.com/questions/1593051/… yang Anda inginkan.git/hooks/prepare-commit-msg.sample
berisi tiga contoh. Satu untuk mengomentari bagian konflik, menambahkangit diff --name-status -r
output ke dalamnya dan menambahkan garis Signed-off-by ... Tidak menambahkan nama cabang ke pesan komit. Jadi saya terpaksa menulis pengait saya sendiri.you will have to manually enable such a hook on each repository you wish to use it
berarti Anda harus memberikan izin eksekusi FILE? Jika demikian, bolehkah saya mengedit jawaban untuk memasukkannya (atau bisakah Anda, tolong)?Berikut
commit-msg
skrip saya sebagai contoh:Membuat pesan komit berikut:
Saya menggunakan nomor masalah karena
branch_name
, deskripsi masalah ditempatkan ke perintahbranch_description
usinggit branch --edit-description [branch_name]
.Lebih lanjut tentang deskripsi cabang dapat Anda temukan di T&J ini .
Contoh kode disimpan dalam Gist berikut .
sumber
echo $NAME: "$(cat $1)" > $1
. Ini berfungsi karena alasan hilangnya baris baru adalah karena gema memperlakukan setiap baris$(cat "$1")
sebagai argumen baru dan menggema masing-masing dengan spasi di antaranya. Dengan mengapit$(cat "$1")
tanda kutip ganda, echo memperlakukan keluaran cat sebagai satu argumen. Juga saya rasa tidak perlu mengutip$1
karena nilainya adalah.git/COMMIT_EDITMSG
Skrip yang lebih sederhana yang menambahkan nama cabang ke pesan komit sebelum Anda mengeditnya. Jadi jika Anda ingin mengubah atau menghapusnya Anda bisa.
Buat file ini .git / hooks / prepared-commit-msg :
sumber
sed: 1: ".git/COMMIT_EDITMSG": invalid command code .
saat menggunakan ini.sed -i '.bak' "1s/^/$branchName : \n/" $1
@
sebagaised
pemisah daripada sebagai/
garis miring ke depan lebih mungkin untuk muncul di nama cabang atau pesan komit, mengacaukansed
.Anda dapat melakukannya dengan kombinasi hook persiapan-commit-msg dan pra-commit.
.git / hooks / prepared-commit-msg
.git / hooks / pre-commit
Setel izin
sumber
--amend
misalnya. Alih-alih menggunakanecho
Anda harus menggunakansed
sebagai gantinya. Ini dia dalam satu kalimat:sed -i "1s@^@$(git branch | grep '^\*' | cut -b3-) @" $1
tambahkan kode di bawah ini di file prepared-commit-msg.
Ini akan menambahkan nama cabang untuk melakukan pesan kecuali merge-commit. Merge-commit memiliki informasi cabang secara default sehingga nama cabang tambahan tidak diperlukan dan membuat pesan menjadi jelek.
sumber
Terinspirasi oleh jawaban Tim yang dibangun di atas jawaban teratas, ternyata hook siap-commit-msg mengambil argumen seperti apa yang terjadi . Seperti yang terlihat di preparasi-commit-msg default jika $ 2 adalah 'merge' maka itu adalah komit gabungan. Jadi case switch dapat diubah untuk menyertakan fungsi addBranchName () Tim.
Saya telah menyertakan preferensi saya sendiri untuk bagaimana menambahkan nama cabang, dan semua bagian yang tidak diberi komentar dari
prepare-commit-msg.sample
hook default .sumber
Jika Anda ingin menjadikannya global (untuk semua proyek):
Buat
git-msg
file dengan isi jawaban shytikov , dan taruh di beberapa folder:Sekarang aktifkan kait:
dan
git init
sekali lagi di setiap proyek Anda ingin menggunakannya.sumber
Saya mengalami masalah dalam mendapatkan solusi ini untuk bekerja di MacOS karena ia menggunakan BSD dan
sed
bukan GNUsed
. Saya berhasil membuat skrip sederhana yang melakukan pekerjaan itu. Masih menggunakan.git/hooks/pre-commit
:Ini mengasumsikan standar penamaan cabang yang mirip dengan
functional-desc_JIRA-NUMBER
. Jika nama cabang Anda hanya nomor tiket Jira Anda, Anda dapat dengan mudah menyingkirkan semuanya mulai dari pipa hingga f2. Ini juga mengharuskan Anda memiliki file bernama.gitmessage
di direktori home Anda.sumber
Jika Anda ingin tiket JIRA ditambahkan ke pesan komit, gunakan skrip di bawah ini.
Lakukan pesan seperti
PROJECT-2313: Add awesome feature
ini. Ini memerlukan nama cabang Anda diawali dengan Jira Ticket.Ini adalah kombinasi dari solusi ini:
Itu dimodifikasi untuk OS X, dengan
sed -i '.bak'
dan bekerja juga dari SourceTree.https://gist.github.com/georgescumihai/c368e199a9455807b9fbd66f44160095
sumber