2009-06-09 44 views
7

Tôi có một kho git với hai nhánh; một cho mã được sử dụng để sản xuất/thử nghiệm và một là phần mềm sản xuất thực tế (chúng gần giống hệt nhau). Bây giờ là lúc cắt một bản phát hành để gửi cho nhà sản xuất, vì vậy tôi tự nhiên muốn đặt một số thẻ thích hợp trên cả hai nhánh.Gắn thẻ nhiều nhánh trong git?

Nhưng, có vẻ như git sẽ không cho phép tôi đặt cùng một tên thẻ trên cả hai nhánh. Nếu tôi cố gắng gắn thẻ các nhánh riêng lẻ, nó sẽ cho tôi biết thẻ đã tồn tại khi tôi chuyển thẻ nhánh thứ hai. Tôi đã thử chuyển hai commit vào thẻ git, nhưng nó cũng không giống như vậy. Tôi không nhất thiết phải luôn luôn gắn thẻ hai nhánh ở hàng rào, nhưng tôi không muốn thêm các ký tự ngẫu nhiên vào các thẻ chỉ để tránh xung đột tên.

Có cách nào để làm những gì tôi muốn hay tôi muốn làm điều sai trái?


Chi nhánh là mã sản xuất đặt trên thiết bị để kiểm tra xem nó đã được lắp ráp đúng chưa. Chi nhánh khác là mã gửi trong sản phẩm. Nó không thực sự là hai nhánh mỗi bản phát hành. Đây là bản phát hành đầu tiên cho sản phẩm này, và do đó phát hành lần đầu tiên cho cả hai nhánh, vì vậy tôi đã cố gắn thẻ cả hai nhánh bằng 'release-1.0'.

Trả lời

13

Bạn đang muốn làm điều sai trái. Mục đích của thẻ là xác định rõ ràng một bản sửa đổi cụ thể. Nếu tôi là bạn, tôi chỉ gắn thẻ chi nhánh sản xuất và để nhánh thử nghiệm không được gắn thẻ.

Tuy nhiên, thật lạ khi bạn có hai nhánh độc lập trên mỗi bản phát hành. Tại sao điều này? Câu trả lời có thể giúp mô tả một giải pháp tốt hơn.


Kể từ khi thẻ được không thực sự phải để trỏ đến các phiên bản tương tự, nhưng (khả năng) phiên bản khác nhau, các thẻ nên một cái gì đó như thế này:

  • appname-1.0-manufacturing
  • appname-1.0-production

Bằng cách đó, bạn sẽ biết mỗi thẻ thuộc về bản phát hành nào, cũng như nơi mã kết thúc.

+1

Một nhánh là mã sản xuất đặt trên thiết bị để kiểm tra xem mã đã được lắp ráp đúng chưa. Chi nhánh khác là mã gửi trong sản phẩm. Nó không thực sự là hai chi nhánh cho mỗi bản phát hành. Đây là bản phát hành đầu tiên cho sản phẩm này, và do đó phát hành lần đầu tiên cho cả hai nhánh, vì vậy tôi đã cố gắn thẻ cả hai nhánh bằng 'release-1.0'. Tôi ngớ ngẩn quá. –

+0

Cảm ơn, tôi đã thêm thông tin bổ sung đó vào nhận xét. –

+1

BTW. tên thẻ có thể phân cấp, vì vậy bạn có thể sử dụng bản phát hành-1.0 (hoặc v1.0) và kiểm tra/release-1.0 –

5

Thẻ chỉ đưa tên cho một cam kết duy nhất, vì vậy không, có thể không có cách nào để thực hiện những gì bạn muốn.

Tôi tò mò muốn biết kết quả mong muốn là gì. Ý tôi là, một mục đích của một thẻ là tên bạn có thể kiểm tra sau. Vì vậy, nếu bạn git checkout trên thẻ đề cập đến hai chi nhánh .. điều gì sẽ xảy ra?

+0

Tôi đã nghĩ rằng các thẻ sẽ cho phép tôi có được phiên bản phù hợp của bất kỳ nhánh nào tôi đang sử dụng vào thời điểm đó. Tôi đã không đặt nhiều suy nghĩ vào nó vượt ra ngoài đó. Rõ ràng tôi nên có. –

+0

Nếu thẻ cung cấp tên cho một cam kết, điều gì sẽ xảy ra khi một cam kết cụ thể mà anh đào chọn vào nhiều nhánh? Hiệu quả của việc kiểm tra thẻ đó là gì? –

+0

Thẻ nằm trên cam kết được áp dụng cho. Một lựa chọn anh đào tạo ra một cam kết mới trên mỗi nhánh khác nhau. Các cam kết mới này có cùng (các) thay đổi như cam kết mà chúng xuất phát, nhưng chúng đều là các cam kết khác nhau. –

2

Đến bữa tiệc trễ, nhưng một giải pháp khác là hợp nhất hai nhánh, vì vậy tại bất kỳ điểm nào, cam kết chứa trạng thái của mã thử nghiệm và mã sản xuất, giả sử chúng có thể tồn tại mà không có xung đột (trong trường hợp này nó đi xuống đến mức độ hợp nhất sẽ là liệu nó có đáng để thử điều này). Điều này cũng sẽ giúp tránh các tình huống mà bạn vô tình gắn thẻ nhánh sai, cũng như có thể xảy ra với cố gắng giữ cho nhánh thử nghiệm và nhánh sản xuất đồng bộ khi bạn gắn thẻ chúng.

Các vấn đề liên quan