Tôi có một dự án với mô hình phân nhánh git gần giống với mô hình git-Flow của nvie .
Các nhánh phát hành của chúng tôi được đặt tên theo định dạng SemVer , ví dụ:v1.5.2
Khi một nhánh phát hành được bật đèn xanh cho sản xuất, chúng tôi đóng chi nhánh, bằng cách hợp nhất nó thành chủ, áp dụng thẻ và sau đó xóa chi nhánh.
Khi chúng tôi xóa ngay chi nhánh phát hành, chúng tôi đã sử dụng cùng một mã định danh để gắn thẻ cho chi nhánh, ví dụ: v1.5.2
Đây là các lệnh chúng tôi sẽ sử dụng để đóng một nhánh phát hành:
$ git checkout master
$ git merge v1.5.2
$ git tag -a v1.5.2 -m "Version 1.5.2 - foo bar, baz, etc"
$ git branch -d v1.5.2
$ git branch -dr origin/v1.5.2
$ git push origin :v1.5.2
$ git push
$ git push --tags
Điều này dường như hoạt động trong phần lớn các trường hợp, tuy nhiên nó gây ra một vấn đề trong kịch bản trong đó một phiên bản khác của git repo (ví dụ: một máy dev khác, hoặc môi trường dàn dựng) có kiểm tra cục bộ của nhánh v1.5.2.
Các git push origin :v1.5.2
lệnh sẽ xóa các chi nhánh ở xa, nhưng không xóa phiên bản cục bộ của chi nhánh (nếu nó tồn tại) trong tất cả các hợp đồng mua lại.
Điều này dẫn đến một tham chiếu mơ hồ, khi thử thanh toán v1.5.2
trong các repos đó:
$ git checkout v1.5.2
warning: refname 'v1.5.2' is ambiguous.
Điều này có thể tránh được mà không sử dụng một cú pháp khác nhau cho các nhánh, ví dụ release-v1.5.2
, hoặc v1.5.2-rc
?
Hoặc là không thể tránh khỏi, và do đó, một ý tưởng tồi tệ về cơ bản để tạo ra một thẻ có cùng tên với một nhánh bị xóa?
git checkout
sẽ kiểm tra thẻ trên chi nhánh khi có một tài liệu tham khảo tuyệt vời, tuy nhiên đây không phải là hành vi tôi đang thấy, ref: gist.github.com/tommarshall/9376724 . Đây có phải là một cái gì đó đã thay đổi trong một phiên bản git hiện đại hơn? Có một lá cờ nào tôi có thể đặtgitconfig
để có được hành vi này không?