Apakah ada konvensi penamaan standar untuk tag git? [Tutup]

229

Saya telah melihat banyak proyek menggunakan v1.2.3sebagai konvensi penamaan untuk tag di git. Saya juga melihat beberapa kegunaan 1.2.3. Apakah ada gaya yang disahkan secara resmi, atau adakah argumen yang bagus untuk menggunakan keduanya?

troelskn
sumber
19
Dengan 43 peningkatan dan penghitungan, saya bertanya-tanya apakah pertanyaan yang sangat berharga ini dapat ditulis ulang dan dibuka kembali, dengan beberapa jawaban mengintegrasikan semua poin dalam ringkasan yang bagus dan berada di puncak? @ PeterEisentraut sepertinya paling lengkap; sedangkan jawaban ATM yang diterima agak menyesatkan. (Saya pikir saya akan menggunakan v1.2.3 untuk tag sendiri, setelah membaca semua poin.)
HostileFork mengatakan jangan percaya
1
SO adalah untuk memperbaiki kode. Praktik terbaik tampaknya berasal dari softwareengineering.stackexchange.com atau codereview.stackexchange.com
Cees Timmerman
Mengintip semver.org (versi semantik), yang seharusnya memberi Anda beberapa ide.
vonbrand
pengalaman saya memberitahu saya untuk menggunakan skema yang sedikit berbeda. 1. subdirektori: tag Git setidaknya harus dimulai dengan v/ini sebagai grup tag dalam namespace. 2. idealnya, sebuah tag juga harus mengandung akronim yang secara unik mengidentifikasi aplikasi. mis v/myapp/1.0. Hal ini membuat penggabungan repositori git lebih mudah: jika aplikasi digabungkan, tag tidak akan bertabrakan di namespace tag.
axd

Jawaban:

166

Versi 1.0.0 dari Semantic Versioning , oleh Tom Preston-Werner dari ketenaran GitHub, memiliki sub-spesifikasi yang membahas hal ini:

Spesifikasi Penandaan (SemVerTag)

Sub-spesifikasi ini HARUS digunakan jika Anda menggunakan sistem kontrol versi (Git, Mercurial, SVN, dll) untuk menyimpan kode Anda. Menggunakan sistem ini memungkinkan alat otomatis untuk memeriksa paket Anda dan menentukan kepatuhan SemVer dan versi yang dirilis.

  1. Saat menandai rilis di sistem kontrol versi, tag untuk versi HARUS "vX.YZ" mis. "V3.1.0" .

Namun, setelah diskusi ini dihapus, dan tidak lagi hadir dalam versi terbaru dari spesifikasi SemVer (2.0.0 pada saat penulisan). Sebuah utas diskusi selanjutnya di tempat yang sama masuk ke kedalaman yang lebih dalam, dan menghasilkan Is "v1.2.3" yang baru versi semantik? sedang ditambahkan ke FAQ di mastercabang SemVer , meskipun pada saat penulisan (lebih dari 2 tahun kemudian) perubahan ini masih belum ada dalam spesifikasi yang dirilis secara resmi.

peritus
sumber
9
Terima kasih - Sangat dekat. Saya berharap ia akan memiliki kualifikasi mengapa yang vharus ada meskipun.
troelskn
3
@troelskn @mojombo == Tom Preston-Werner
peritus
4
Tautan yang diperbarui: github.com/mojombo/semver.org/issues/1
Josh Lee
41
Versi Semantik 1.0.0 menggunakan format "v1.2.3". Semantic Versioning 2.0.0-rc.1 mungkin menggunakan format "1.2.3". Artikel Spesifikasi Tagging (SemVerTag) telah dihapus dari spesifikasi. Lebih lanjut di sini: semver.org
petrnohejl
9
Jawaban ini dilakukan ketika ada semver lama (versi 1.0). Saat ini awalan 'v' dihapus dari semver v2.0. Untuk detail lihat posting di bawah ini.
vitalii
111

Tampaknya ada dua konvensi yang mendominasi (dengan asumsi Anda juga mematuhi standar yang masuk akal untuk menentukan nomor rilisnya sendiri):

  • v1.2.3
  • 1.2.3

Keuntungannya v1.2.3adalah bahwa dokumentasi Git (dan juga dokumentasi Mercurial) menggunakan format itu dalam contoh-contohnya, dan bahwa beberapa "otoritas" seperti kernel Linux dan Git sendiri menggunakannya. ( Versi Semantic yang disebutkan itu digunakan untuk menggunakannya tetapi tidak lagi.)

Keuntungannya 1.2.3adalah bahwa gitweb atau GitHub dapat secara otomatis menawarkan unduhan tarball atau zip dari formulir packagename-$tag.tar.gz(dan saya pikir cukup mapan bahwa tarball tidak boleh disebutkan namanya package-v1.2.3.tar.gz). Atau, Anda dapat menggunakan git describesecara langsung untuk menghasilkan nomor versi tarball. Untuk proyek ringan tanpa proses rilis formal, kemungkinan ini bisa sangat nyaman. Juga harus dicatat bahwa Versi Semantic sama sekali bukan satu-satunya atau standar yang diterima secara universal untuk penomoran versi. Dan proyek-proyek penting seperti GNOME serta banyak proyek lain menggunakan 1.2.3penamaan tag.

Saya pikir mungkin sudah terlambat untuk mengkonsolidasikan posisi ini. Seperti biasa, konsisten dan masuk akal.


Pembaruan: Seperti yang disebutkan dalam komentar ini , GitHub sekarang menawarkan nama tarball dengan 'v' dilucuti dari tag.

Peter Eisentraut
sumber
13
Mengenai generasi GitHub dan tarball: sudah tidak relevan lagi. Mereka menghapus 'v' dari tag.
Hermann Bier
6
Awalan 'v' juga cukup berguna saat menyortir tag dalam urutan abjad. Tag lain mungkin juga ada; apakah secara resmi dalam repositori master atau untuk melacak pekerjaan pengembang secara lokal. Dengan awalan 'v', tag rilis membentuk grup mereka sendiri, alih-alih tersebar di seluruh namespace lainnya.
Robie Basak
1
Memperbarui jawaban untuk mencerminkan bahwa SemVer tidak lagi digunakan v.
Adam Spires
80

Alasan untuk 'v' sebelumnya adalah historis. SCCS yang lebih lama (cvs, rcs) tidak dapat membedakan antara pengidentifikasi tag dan nomor revisi. Pengidentifikasi tag dibatasi untuk tidak memulai dengan nilai numerik sehingga angka revisi dapat dideteksi.

Bill Door
sumber
5
+1: Jawaban pertama yang bagus dan nama dari salah satu buku favorit saya :-) Mungkin jawaban Anda berikutnya adalah pertanyaan yang lebih baru.
Johnsyweb
1
... tetapi jika ini hanya berlaku untuk SVCS lama , bagaimana jika titik jawaban ini untuk pertanyaan tentang Git modern?
MestreLion
3
ini masih berguna di git, sehingga Anda dapat dengan mudah membedakan tag versi, dari jenis tag lainnya (tag berguna untuk banyak hal lain)
Benja
19

Tidak yang saya tahu.
Tetapi Git tidak akan mengizinkan tag dan cabang dengan nama yang sama secara bersamaan, jadi jika Anda memiliki cabang " 1.1" untuk 1.1karya, jangan beri tag " 1.1", gunakan misalnya " v1.1"

VONC
sumber
8
Gunakan untuk cabang 1.1.x. Itu dia.
vitalii
1
tangkapan yang bagus, terima kasih.
RY
10

Saran manajer paket baru untuk menandai versi tanpa awalan v(seperti komposer untuk proyek PHP). SemVer 2.0 tidak memiliki spesifikasi tag. Ini dilakukan dengan sengaja karena menghindari konflik. Namun disarankan untuk menambahkan awalan vdalam dokumentasi dan referensi teks. Sebagai contoh format v1.0.4bukan full version 1.0.4atau ver. 1.0.4cukup verbose dan elegan dalam dokumentasi.

vitalii
sumber
22
"Disarankan untuk ..." Disarankan oleh siapa, dan di mana kita dapat melihat saran itu dalam konteks aslinya?
bignose
8

Kami menggunakan cabang dan tag untuk pekerjaan spesifik rilis yang diikuti oleh rilis aktual, masing-masing:

o---o-----o---o---o--- ...   master
     \   /       /
      \ /       /
       o-------o--- ...      1.6 branch

Setiap pengembang membuat keputusan mental tentang apakah pekerjaan yang akan mereka lakukan berlaku hanya untuk menguasai atau jika itu juga relevan dengan cabang. Anda bisa melihat bahwa perubahan yang dibuat untuk cabang digabungkan kembali pada master, tetapi beberapa perubahan pada master tidak akan pernah berjalan di cabang (yaitu, yang tidak dimaksudkan untuk rilis 1.6, dalam contoh ini).

Ketika kami siap untuk merilis, kami memberi tag dan kemudian menggabungkan kembali untuk yang terakhir kalinya, dan kami memberi nama tag dengan nama yang sama dengan cabang, tetapi dengan pengidentifikasi tambahan tentang versi apa itu, misalnya "1.6-release" atau "1.6-beta" atau "1.6-rc2", dan lain-lain.

... ------o---o---o--o---o--- ...   master
         /       /
        /       /
... ---o------(*)--- ...      1.6 branch
          1.6-release
John Feminella
sumber
Terima kasih - itu jawaban yang bagus untuk menggambarkan bagaimana Anda melakukan percabangan, tetapi sebenarnya saya hanya bermaksud jika ada beberapa alasan (teknis) khusus untuk menggunakan skema penamaan tertentu di git. Masih memberi Anda upvote untuk diagram yang bagus;)
troelskn
Ah, mengerti! Maaf telah salah paham pertanyaan Anda. Tidak, tidak ada alasan teknis khusus untuk menggunakan nama tertentu, selain komunikasi manusia. Anda dapat memberi nama cabang dan memberi tag apa saja yang Anda suka.
John Feminella
Cabang rilis-1.6 Anda dinamai "1.6 cabang"? Saya pikir spasi tidak didukung dalam nama cabang.
Cees Timmerman
8

Saya tidak tahu standar apa pun. Saya cukup memilih nama tag saya sehingga saya dapat menempel

VERSION = `git describe --tags`

di skrip build saya. Jadi, konvensi penamaan tag sebenarnya tergantung pada konvensi penamaan versi proyek.

Jörg W Mittag
sumber
1
git menjelaskan - tag:>
Damien Carol