Seorang kolega dan saya telah bergiliran berdebat / membahas masalah / manfaat mengintegrasikan versi yang berasal dari repositori git saat ini ke dalam kode kami setiap kali dibangun.
Kami pikir manfaatnya meliputi:
- Tidak perlu khawatir tentang kesalahan manusia dalam memperbarui nomor versi
- Lacak antara apa yang kami temukan di perangkat dan kode sumbernya
Masalah-masalah yang muncul (untuk kita) meliputi:
- Sistem pembangun turunan IDE (mis. MPLABX) dapat menyulitkan untuk mencari tahu di mana harus memasukkan jenis kait ini (dan akhirnya bisa juga cukup murahan)
- Lebih banyak pekerjaan untuk benar-benar mengintegrasikan ini ke dalam skrip build / makefiles
- Menggabungkan ke pendekatan pembangunan tertentu (misalnya bagaimana jika satu orang membangun dengan XCode dan MPLABX lainnya) dapat menciptakan kejutan hilir
Jadi kami ingin tahu di mana orang lain mendarat di debat ini. Sangat mudah untuk diskusi menjadi anekdotal. Ada banyak orang di luar sana yang bersikeras otomatisasi ujung ke ujung, menggantung jumlah pekerjaan depan dan menggabungkan itu menciptakan. Dan ada banyak orang lain di sisi lain perdebatan, yang hanya melakukan hal termudah yang bekerja dan hidup dengan risiko.
Apakah ada jawaban yang masuk akal untuk sisi mana yang terbaik untuk mendarat?
sumber
it describe
(bagian terakhir dari string) bukan cset-id dari tag, tetapi hash dari changeset, yang kita uraikan . Dalam bentuk yang dapat dibaca manusiav1.1.2-6-a3b27gae
akan menjadi "Enam perubahan setelah perubahan, ditandai sebagai v1.1.2-6, memiliki perubahan pendek-hash a3b27gae"git checkout v1.1.2
atau daftar komit tag dengangit rev-list v1.1.2 | head -n 1
.Kami dulunya adalah toko SVN jadi matematika ini mudah - nomor build adalah putaran SVN dan itu saja. Kami mencoba untuk terus berjalan ketika kami mulai pindah ke DCVSes dan ternyata gagal karena beberapa alasan.
Pertama, siapa yang tahu apakah rev 69bc333bc8d8 adalah sebelum, setelah atau bersamaan dengan rev 25b0f0d1052c? Ada sangat sedikit konteks dibandingkan dengan sistem SVN ketika Anda setidaknya tahu 101 setelah 100. Kedua, sifat kontrol sumber DCVS membuat hal-hal menjadi tidak linier dalam banyak hal ketika pembangunan berikutnya mungkin tidak memajukan bola yang sama.
Kami akhirnya memutuskan untuk menggunakan server build untuk mendistribusikan nomor build ke berbagai hal karena memiliki visibilitas yang tepat dan kemampuan untuk menanganinya.
sumber
Saya menggunakan skema berikut untuk sistem pembuatan studio visual C # DLL untuk secara otomatis menghasilkan nomor versi (Kami secara historis memiliki masalah dengan penyebaran tidak dilakukan dengan benar sehingga diperlukan cara yang bersih untuk menjamin penyebaran versi yang benar terjadi).
Perhatikan bahwa ini mengasumsikan Anda memiliki 2 angka tanpa tanda yang dapat ditandatangani yang dapat dimainkan. Menciptakan sistem setara yang menggunakan angka lebih kecil bisa dilakukan juga.
Perhatikan juga bahwa bidang non-numerik dapat membantu jika Anda dapat melampirkannya sebagai meta-data. Misalnya menambahkan nomor versi git sebagai nomor Versi Informasi.
sumber
Saya langsung menghubungkan output status git, log dan diff ke executable. Lalu ada opsi untuk mencetak itu. Keuntungannya adalah Anda tidak hanya bisa mengetahui dari mana biner Anda membangun, tetapi juga perubahan kode sumber yang tidak dikomit. Silahkan lihat:
https://github.com/colding/MercuryFIX/tree/master/stdlib/scm_state
Anda harus dapat menggunakan 3 file untuk membuat hal lib negara SCM Anda sendiri.
sumber
Saya akan merekomendasikan penggunaan Autorevision .
Anda bisa mendapatkan output dalam berbagai format, misalnya header gaya c .
Ada juga beberapa contoh (dalam dir contribs) tentang bagaimana Anda dapat menghubungkan semuanya sehingga tidak peduli siapa yang membangun dan bagaimana mereka melakukannya, mereka akan selalu mendapatkan informasi versi yang sama, bahkan jika mereka membangun dari tarball.
Juga, karena selain
git
Autorevision berfungsi dengansvn
danhg
membuatnya lebih mudah untuk beralih dari svn tanpa harus mengubah terlalu banyak setelah Anda mengaturnya.sumber
<VCS_TAG>-<VCS_SHORT_HASH>
,<VCS_TAG>-<VCS_TICK>
atau bahkan<VCS_ACTION_STAMP>
semua harus bekerja. Jika Anda ingin daftar lengkap dari masing-masing simbol itu, saya sarankan untuk memeriksa halaman manual .