Saya telah menggunakan Git untuk sementara waktu sekarang, dan saya baru-baru ini mulai menggunakannya untuk menandai rilis saya sehingga saya bisa lebih mudah melacak perubahan dan dapat melihat versi mana yang dijalankan masing-masing klien kami (sayangnya kode saat ini diamanatkan bahwa setiap klien memiliki salinan situs PHP mereka sendiri; Saya mengubah ini, tetapi lambat).
Bagaimanapun, kami mulai membangun momentum, saya pikir akan sangat bagus untuk dapat menunjukkan kepada orang-orang apa yang telah berubah sejak rilis terakhir. Masalahnya adalah, saya belum memelihara changelog karena saya tidak punya ide bagus tentang bagaimana melakukannya. Untuk waktu khusus ini, saya dapat menjalankan log dan membuatnya secara manual, tetapi itu akan sangat melelahkan.
Saya mencoba googling "git changelog" dan "git manage changelog" tetapi saya tidak menemukan apa pun yang benar-benar berbicara tentang alur kerja perubahan kode dan bagaimana hal itu bertepatan dengan changelog. Kami saat ini mengikuti alur kerja pengembangan Rein Henrichs dan saya akan menyukai sesuatu yang sejalan dengan itu.
Apakah ada pendekatan standar yang saya lewatkan, atau apakah ini area di mana setiap orang melakukan hal mereka sendiri?
Terima kasih banyak atas komentar / jawaban Anda!
--graph
, yang memperlihatkan secara visual kepada Anda di cabang mana komit itu berada.git log
output ke changelog tidak masuk akal. Anda perlu melakukan pekerjaan penyaringan dan pengeditan untuk memiliki changelog yang dapat dibaca, jika tidak, mengapa Anda bahkan memerlukan changelog? Saya pikir Anda dapat mengotomatiskan pembuatan changelog tapi tolong jangan lakukan salinan mentahgit log
!Anda dapat menggunakan beberapa rasa log git untuk membantu Anda:
Jika Anda memberi nama cabang Anda dengan baik, sehingga gabungan untuk dikuasai muncul sebagai sesuatu seperti "Cabang gabungan fitur-foobar", Anda bisa mempersingkat hal-hal dengan hanya menampilkan pesan itu, dan tidak semua komitmen kecil yang Anda gabungkan, yang bersama-sama membentuk fitur:
Anda mungkin dapat menambahkan ini dengan skrip Anda sendiri, yang dapat melakukan hal-hal seperti menghapus bit "Cabang gabungan", menormalkan pemformatan, dll. Pada titik tertentu Anda harus menulisnya sendiri, tentu saja.
Kemudian Anda bisa membuat bagian baru untuk changelog sekali per versi:
dan komit di komit rilis versi Anda.
Jika masalah Anda adalah bahwa subjek komit itu tidak seperti apa yang ingin Anda masukkan ke changelog, Anda cukup banyak memiliki dua opsi: tetap melakukan semuanya secara manual (dan mencoba untuk mengikutinya lebih teratur daripada bermain tangkapan) pada waktu rilis), atau perbaiki gaya pesan komit Anda. Salah satu opsi, jika subjek tidak akan melakukannya untuk Anda, akan menempatkan garis seperti "ubah: tambah fitur foobar" di badan pesan komit Anda, sehingga nanti Anda bisa melakukan sesuatu seperti
git log --pretty=%B | grep ^change:
mengambil hanya super itu bit -penting dari pesan.Saya tidak sepenuhnya yakin berapa banyak git yang bisa membantu Anda membuat changelog. Mungkin saya salah mengartikan apa yang Anda maksud dengan "kelola"?
sumber
PENOLAKAN: Saya adalah penulis gitchangelog yang akan saya bicarakan berikut ini.
TL; DR: Anda mungkin ingin memeriksa changelog gitchangelog sendiri atau output ascii yang menghasilkan sebelumnya.
Jika Anda ingin membuat changelog dari sejarah git Anda, Anda mungkin harus mempertimbangkan:
Secara opsional, Anda mungkin menginginkan beberapa kategorisasi (hal baru, perubahan, perbaikan bug) ...
Dengan semua ini dalam pikiran, saya membuat dan menggunakan gitchangelog . Ini dimaksudkan untuk memanfaatkan konvensi pesan komit git untuk mencapai semua tujuan sebelumnya.
Memiliki konvensi pesan komit wajib untuk membuat changelog yang bagus (dengan atau tanpa menggunakan
gitchangelog
).lakukan konvensi pesan
Berikut ini adalah saran untuk apa yang mungkin berguna untuk ditambahkan dalam pesan komit Anda.
Anda mungkin ingin memisahkan kira-kira komitmen Anda menjadi beberapa bagian besar:
Selain itu, Anda dapat menandai beberapa komitmen:
Cobalah untuk menulis pesan komit Anda dengan menargetkan pengguna (fungsionalitas) sesering mungkin.
contoh
Ini standar
git log --oneline
untuk menunjukkan bagaimana informasi ini dapat disimpan ::Jadi jika Anda perhatikan, format yang saya pilih adalah:
Untuk melihat hasil keluaran aktual, Anda bisa melihat di akhir halaman PyPI dari gitchangelog
Untuk melihat dokumentasi lengkap dari konvensi pesan komit saya, Anda dapat melihat file referensi gitchangelog.rc.reference
Cara menghasilkan changelog yang sangat bagus dari ini
Kemudian, sangat mudah untuk membuat changelog lengkap. Anda dapat membuat skrip Anda sendiri dengan cepat, atau menggunakannya
gitchangelog
.gitchangelog
akan menghasilkan log perubahan lengkap (dengan dukungan pembagian sebagaiNew
,Fix
...), dan dapat dikonfigurasi secara wajar untuk konvensi yang Anda buat sendiri. Mendukung jenis output berkat template melaluiMustache
,Mako templating
dan memiliki mesin standar warisan yang ditulis dalam python baku; semua 3 mesin saat ini memiliki contoh cara menggunakannya dan dapat menampilkan changelog's seperti yang ditampilkan di halaman PyPI dari gitchangelog.Saya yakin Anda tahu bahwa ada banyak lainnya
git log
untukchangelog
alat di luar sana juga.sumber
Lebih ke intinya CHANGELOG. Katakan padaku jika kalian suka.
sumber
--format
, seperti yang dijelaskan dalam git-scm.com/docs/git-log#_pretty_formatsThe
gitlog-to-changelog
Script berguna untuk menghasilkan GNU-gayaChangeLog
.Seperti yang ditunjukkan oleh
gitlog-to-changelog --help
, Anda dapat memilih komit yang digunakan untuk membuatChangeLog
file menggunakan salah satu opsi--since
:atau dengan memberikan argumen tambahan setelahnya
--
, yang akan diteruskan kegit-log
(dipanggil secara internal olehgitlog-to-changelog
):Misalnya, saya menggunakan aturan berikut di tingkat atas
Makefile.am
dari salah satu proyek saya:Aturan ini digunakan pada waktu rilis untuk memperbarui
ChangeLog
dengan pesan komit terbaru yang belum direkam. File tersebut.last-cl-gen
berisi pengidentifikasi SHA1 dari komit terbaru yang direkamChangeLog
dan disimpan dalam repositori Git.ChangeLog
juga direkam dalam repositori, sehingga dapat diedit (misalnya untuk memperbaiki kesalahan ketik) tanpa mengubah pesan komit.sumber
Karena membuat tag per versi adalah praktik terbaik, Anda mungkin ingin mempartisi changelog Anda per versi. Dalam hal ini, perintah ini dapat membantu Anda:
sumber
Untuk proyek GitHub mungkin berguna: github-changelog-generator
Ini menghasilkan changelog dari masalah tag tertutup, dan menggabungkan permintaan tarik.
Ini CHANGELOG.md dihasilkan oleh script ini.
Contoh:
sumber
Saya juga membuat perpustakaan untuk ini. Ini sepenuhnya dapat dikonfigurasi dengan template Moustache. Yang dapat:
Saya juga membuat:
Lebih detail tentang Github: https://github.com/tomasbjerre/git-changelog-lib
Dari baris perintah:
Atau di Jenkins:
sumber
Apa yang saya suka gunakan. Itu mendapatkan semua komitmen sejak tag terakhir.
cut
menyingkirkan hash komit. Jika Anda menggunakan nomor tiket di awal pesan komit Anda, mereka dikelompokkan dengansort
. Menyortir juga membantu jika Anda awalan komit tertentu denganfix
,typo
, dllsumber
Saya membiarkan server CI menyalurkan berikut ini ke file bernama
CHANGELOG
untuk setiap rilis baru dengan tanggal yang ditetapkan dalam nama file rilis:sumber
Untuk changelog gaya GNU , saya telah memasak fungsinya
Dengan ini:
gnuc
dan sekarang clipboard saya berisi sesuatu seperti:
Lalu saya menggunakan clipboard sebagai titik awal untuk memperbarui ChangeLog.
Itu tidak sempurna (misalnya file harus relatif terhadap jalur ChangeLog mereka, jadi
python/py-symtab.c
tanpagdb/
karena saya akan mengeditgdb/ChangeLog
), tetapi merupakan titik awal yang baik.Skrip lebih lanjut:
Saya harus setuju dengan Tromey: menduplikasi data git commit di ChangeLog tidak berguna.
Jika Anda ingin membuat changelog, buatlah ringkasan yang bagus tentang apa yang sedang terjadi, mungkin seperti yang ditentukan di http://keepachangelog.com/
sumber
Berdasarkan bithavoc , daftar
last tag
sampaiHEAD
. Tapi saya berharap daftar log antara 2 tag.Daftar log antara 2 tag.
Misalnya, ia akan mendaftar log dari
v1.0.0
kev1.0.1
.sumber