Có một quy ước đặt tên tiêu chuẩn cho các thẻ git? [đóng cửa]


229

Tôi đã thấy rất nhiều dự án sử dụng v1.2.3làm quy ước đặt tên cho các thẻ trong git. Tôi cũng đã thấy một số sử dụng 1.2.3. Có một phong cách chính thức được chứng thực, hoặc có bất kỳ lý lẽ tốt để sử dụng một trong hai?


19
Với 43 lần nâng cấp và đếm, tôi tự hỏi liệu câu hỏi rất có giá trị này có thể được sắp xếp lại và mở lại hay không, với một số câu trả lời tích hợp tất cả các điểm trong một bản tóm tắt hay và đứng đầu? @ PeterEisentraut dường như là hoàn thiện nhất; trong khi ATM trả lời được chấp nhận có vẻ hơi sai lệch. (Tôi nghĩ rằng tôi sẽ tự mình sử dụng v1.2.3 cho các thẻ, sau khi đọc tất cả các điểm.)
HostileFork nói không tin tưởng SE

1
SO là để sửa mã. Các thực tiễn tốt nhất dường như thuộc về phần mềmengineering.stackexchange.com
Cees Timmerman

Hãy xem qua semver.org (phiên bản ngữ nghĩa), điều đó sẽ cung cấp cho bạn một số ý tưởng.
vonbrand

kinh nghiệm của tôi cho tôi biết sử dụng một sơ đồ hơi khác. 1. thư mục con: ít nhất một thẻ Git bắt đầu bằng v/thẻ nhóm này trong một không gian tên. 2. lý tưởng, một thẻ cũng nên chứa một từ viết tắt xác định duy nhất ứng dụng. ví dụ v/myapp/1.0. Điều này làm cho việc hợp nhất kho lưu trữ git dễ dàng hơn: trong trường hợp các ứng dụng sẽ được hợp nhất, các thẻ sẽ không va chạm trong không gian tên thẻ.
axd

Câu trả lời:


166

Phiên bản 1.0.0 của Phiên bản ngữ nghĩa , bởi Tom Preston-Werner của GitHub nổi tiếng, đã có một đặc tả phụ giải quyết vấn đề này:

Đặc tả gắn thẻ (SemVerTag)

Thông số phụ này NÊN được sử dụng nếu bạn sử dụng hệ thống kiểm soát phiên bản (Git, Mercurial, SVN, v.v.) để lưu trữ mã của bạn. Sử dụng hệ thống này cho phép các công cụ tự động kiểm tra gói của bạn và xác định các phiên bản phát hành và tuân thủ SemVer.

  1. Khi gắn thẻ phát hành trong hệ thống kiểm soát phiên bản, thẻ cho phiên bản PHẢI là "vX.YZ", vd: "v3.1.0" .

Tuy nhiên, sau khi thảo luận, phần này đã bị xóa và không còn xuất hiện trong phiên bản mới nhất của thông số SemVer (2.0.0 tại thời điểm viết). Một chủ đề thảo luận sau đó ở cùng một nơi đã đi sâu hơn và dẫn đến một "v1.2.3" mới là một phiên bản ngữ nghĩa? được thêm vào Câu hỏi thường gặp trong masterchi nhánh của SemVer , mặc dù tại thời điểm viết (hơn 2 năm sau), thay đổi này vẫn chưa xuất hiện trong thông số kỹ thuật được phát hành chính thức.


9
Cảm ơn - Điều đó rất gần. Tôi muốn ông sẽ phải có trình độ lý do tại sao các vnên có mặt ở đó mặc dù.
troelskn

3
@troelskn @mojombo == Tom Preston-Werner
peritus

4
Liên kết được cập nhật: github.com/mojombo/semver.org/issues/1
Josh Lee

41
Phiên bản ngữ nghĩa 1.0.0 sử dụng định dạng "v1.2.3". Phiên bản ngữ nghĩa 2.0.0-rc.1 có thể sử dụng định dạng "1.2.3". Bài viết Đặc tả gắn thẻ (SemVerTag) đã bị xóa khỏi thông số kỹ thuật. Xem thêm tại đây: semver.org
petrnohejl

9
Câu trả lời này được thực hiện khi tồn tại semver cũ (phiên bản 1.0). Ngày nay, tiền tố 'v' đã bị xóa khỏi semver v2.0. Để biết chi tiết xem bài viết dưới đây.
Vitalii

111

Dường như có hai quy ước thống trị (giả sử bạn cũng tuân thủ một số tiêu chuẩn hợp lý để đánh số bản phát hành):

  • v1.2.3
  • 1.2.3

Ưu điểm của v1.2.3là tài liệu Git (và cả tài liệu Mercurial) sử dụng định dạng đó trong các ví dụ của nó và một số "cơ quan" như nhân Linux và chính Git sử dụng nó. ( Phiên bản ngữ nghĩa được đề cập được sử dụng để sử dụng nhưng không còn nữa.)

Ưu điểm của 1.2.3gitweb hoặc GitHub có thể tự động cung cấp bản tải xuống tarball hoặc zip của biểu mẫu packagename-$tag.tar.gz(và tôi nghĩ rằng nó hoàn toàn không được đặt tên là không nên đặt tên cho một tarball package-v1.2.3.tar.gz). Ngoài ra, bạn có thể sử dụng git describetrực tiếp để tạo số phiên bản tarball. Đối với các dự án nhẹ mà không có quy trình phát hành chính thức, những khả năng này có thể khá thuận tiện. Cũng cần lưu ý rằng Phiên bản ngữ nghĩa không phải là tiêu chuẩn duy nhất hoặc được chấp nhận phổ biến cho việc đánh số phiên bản. Và các dự án đáng chú ý như Gnome cũng như vô số dự án khác sử dụng 1.2.3cách đặt tên thẻ.

Tôi nghĩ có lẽ đã quá muộn để củng cố các vị trí này. Như mọi khi, hãy kiên định và có ý nghĩa.


Cập nhật: Như đã đề cập trong nhận xét này , GitHub hiện cung cấp một tên tarball với 'v' bị tước khỏi thẻ.


13
Về thế hệ GitHub và tarball: nó không còn phù hợp nữa. Họ loại bỏ 'v' khỏi thẻ.
Hermann Bier

6
Tiền tố 'v' cũng khá hữu ích khi sắp xếp các thẻ theo thứ tự bảng chữ cái. Các thẻ khác cũng có thể tồn tại; cho dù chính thức trong kho lưu trữ chính hoặc để theo dõi công việc của nhà phát triển tại địa phương. Với tiền tố 'v', các thẻ phát hành tạo thành nhóm riêng của chúng, thay vì nằm rải rác trên phần còn lại của không gian tên.
Robie Basak

1
Đã cập nhật câu trả lời để phản ánh rằng SemVer không còn sử dụng v.
Adam Spiers

80

Lý do cho 'v' trước đó là lịch sử. SCCS cũ hơn (cvs, rcs) không thể phân biệt giữa số nhận dạng thẻ và số sửa đổi. Số nhận dạng thẻ bị hạn chế không bắt đầu bằng giá trị số để có thể phát hiện số sửa đổi.


5
+1: Câu trả lời đầu tiên tốt và tên từ một trong những cuốn sách yêu thích của tôi :-) Có lẽ câu trả lời tiếp theo của bạn sẽ là một câu hỏi mới hơn.
Johnsyweb

1
... nhưng nếu điều này chỉ đúng với SVCS , thì sao nếu câu trả lời này cho câu hỏi về Git hiện đại thì sao?
MestreLion

3
Điều này vẫn hữu ích trong git, vì vậy bạn có thể dễ dàng phân biệt các thẻ phiên bản, với các loại thẻ khác (thẻ rất hữu ích cho nhiều thứ khác)
Benja

19

Không phải là tôi biết.
Nhưng Git sẽ không cho phép một thẻ và một nhánh cùng tên cùng một lúc, vì vậy nếu bạn có một nhánh " 1.1" cho 1.1công việc, đừng đặt thẻ " 1.1", hãy sử dụng ví dụ " v1.1"


8
Sử dụng cho các nhánh 1.1.x. Đó là nó.
Vitalii 6/11/2015

1
bắt tốt đẹp, cảm ơn.
RÚT

10

Các nhà quản lý gói mới khuyên nên gắn thẻ các phiên bản không có tiền tố v(như trình soạn thảo cho các dự án PHP). SemVer 2.0 không có gì về đặc tả thẻ. Nó được thực hiện có chủ ý do tránh xung đột. Tuy nhiên, nên thêm tiền tố vvào tài liệu và tài liệu tham khảo. Như định dạng ví dụ v1.0.4thay vì đầy đủ version 1.0.4hoặc ver. 1.0.4đủ dài dòng và thanh lịch trong tài liệu.


22
Tôi đã khuyên mọi người về vấn đề này, và chúng tôi có thể thấy lời khuyên đó ở đâu trong bối cảnh ban đầu?
bignose

8

Chúng tôi sử dụng các nhánh và thẻ cho công việc dành riêng cho phát hành, theo sau là bản phát hành thực tế, tương ứng:

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

Mọi nhà phát triển đưa ra quyết định tinh thần về việc công việc họ sắp cam kết có thể áp dụng chỉ để làm chủ hay nếu nó cũng liên quan đến chi nhánh. Bạn có thể thấy rằng những thay đổi được thực hiện cho nhánh được hợp nhất trở lại trên master, nhưng một số thay đổi trên master sẽ không bao giờ đi trên nhánh (nghĩa là những thay đổi không dành cho phiên bản 1.6, trong ví dụ này).

Khi chúng tôi sẵn sàng phát hành, chúng tôi gắn thẻ và sau đó hợp nhất lại lần cuối và chúng tôi đặt tên cho thẻ có cùng tên với chi nhánh, nhưng với một định danh bổ sung về phiên bản cụ thể của nó, ví dụ: "1.6-phát hành" hoặc "1.6-beta" hoặc "1.6-RC2", et cetera.

... ------o---o---o--o---o--- ...   master
         /       /
        /       /
... ---o------(*)--- ...      1.6 branch
          1.6-release

Cảm ơn - đó là một câu trả lời tốt để mô tả cách bạn thực hiện phân nhánh, nhưng tôi thực sự chỉ có ý nghĩa nếu có một số lý do cụ thể (kỹ thuật) để sử dụng một sơ đồ đặt tên nhất định trong git. Vẫn cung cấp cho bạn một upvote cho các sơ đồ đẹp mặc dù;)
troelskn

À, gotcha! Xin lỗi vì đã hiểu nhầm câu hỏi của bạn. Không, không có lý do kỹ thuật cụ thể để sử dụng một tên cụ thể, ngoài giao tiếp với con người. Bạn có thể đặt tên cho các chi nhánh và thẻ của bạn khá nhiều bất cứ điều gì bạn thích.
John Women'sella

Chi nhánh phát hành-1.6 của bạn được đặt tên là "1.6 chi nhánh"? Tôi nghĩ không gian không được hỗ trợ trong tên chi nhánh.
Cees Timmerman

8

Tôi không biết bất kỳ tiêu chuẩn. Tôi chỉ cần chọn tên thẻ của mình để tôi có thể dán

VERSION = `git describe --tags`

trong các kịch bản xây dựng của tôi. Vì vậy, quy ước đặt tên thẻ thực sự phụ thuộc vào quy ước đặt tên phiên bản của dự án.


1
git mô tả --tags:>
Damien Carol

1

Không có ai thực hành tốt nhất mà tôi biết. Dưới đây là một số liên kết:

Nói chung, phiên bản ( 0.0.1,, v0.2.1...) có thể bắt tay với một số theo dõi vấn đề có thể được coi là một cách tiếp cận hợp lý. (.. mặc dù tôi thường sử dụng vtên thẻ -prefixed .. xem thêm câu trả lời @VonC)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.