Jon Purdy có ý tưởng đúng. git flow
làm cho việc quản lý thực tế của các chi nhánh này cũng dễ dàng và quản lý chi nhánh là một đối số để chuyển sang git
.
Hãy bắt đầu với một tóm tắt cơ bản về git
, vì bạn đang đến từ các svn
-to- git
quan điểm. Hãy xem xét git
những điều sau:
master--...............-.....-..............-
\ / / /
---develop---------............../
\ /
--feature---
Ở trên, bạn rẽ nhánh master
tới develop
(ký hiệu là \
) và nhánh develop
tới feature
nhánh. Chúng tôi hợp nhất các nhánh đó sao lưu (ký hiệu là /
), với các dấu ( -
) dọc theo một nhánh. (Nếu không có cam kết nhưng hợp nhất là cách bên phải, có các .
chỉ số cho thấy rằng tiếp theo -
là cam kết tiếp theo).
Vừa đủ dễ. Điều gì nếu chúng ta có một hotfix trong bản phát hành chính của chúng tôi?
master--...............-.....-................-...........-.........-
\ / / / \ /| /
\ / / / -hotfix-- V /
---develop---------............../..............-...----
\ / \ V /
--feature--- --feature2...----
Ở trên, develop
phân nhánh từ master
. Lỗi được phát hiện trong master
đã được sửa bằng cách phân nhánh từ master
, sửa nó và hợp nhất lại master
. Sau đó chúng tôi sáp nhập master
vào develop
, và sau đó develop
vàofeature2
, cuộn mã mới từ hotfix
các nhánh này.
Khi bạn hợp nhất feature2
trở lại develop
, lịch sử của nó bao gồm develop
với hotfix
. Tương tự như vậy, develop
được hợp nhất feature2
với mã mới từ đó master
, do đó, việc hợp nhất develop
trở lại master
sẽ xảy ra mà không gặp trở ngại nào, vì nó dựa trên cam kết master
đó vào thời điểm đó như thể bạn đã phân nhánh từ master
thời điểm đó.
Vì vậy, đây là một cách khác để làm điều đó.
master--..........-........-
\ /\ /
---1.0-- --1.1--
1.0 phiên bản của bạn có được tagged- 1.0.1
, 1.0.2
, 1.0.3
, và vân vân.
Bây giờ đây là một mẹo: bạn đã tìm thấy một lỗi trong 1.0 và nó ảnh hưởng đến 1.1, 1.2 và 1.3. Bạn làm nghề gì?
Bạn tách ra bản phát hành mới nhất hoặc được bảo trì sớm nhất và sửa nó. Sau đó, bạn nhập mới hotfix
chi nhánh thành 1.3
-Và vào 1.2
, 1.1
và 1.0
. Không phân nhánh từ mỗi nhánh phiên bản bảo trì; không hợp nhất 1.0
vào master
hoặc hợp nhất master
trở lại vào 1.0
. Lấy một hotfix
nhánh và hợp nhất nó vào tất cả các nhánh phiên bản của bạn. Nếu có xung đột, nó sẽ cho bạn biết; xem lại mã của bạn để đảm bảo các thay đổi là chính xác ( git diff
là bạn của bạn).
Bây giờ thay đổi cụ thể được áp dụng ở khắp mọi nơi. Dòng dõi được phân nhánh, nhưng không sao. Đó không phải là sự ngớ ngẩn. Gắn thẻ 1.3
đầu là 1.3.17, hợp nhất nó vào mọi tính năng đang thực hiện được phân nhánh từ 1.3
và tiếp tục.
Các git flow
phần mở rộng giúp quản lý các bảo trì, tính năng, và các chi nhánh hotfix cho bạn. Một khi bạn nhận được quy trình công việc, điều này là không đáng kể và gặp phải một số lượng lớn rắc rối trong việc quản lý mã nguồn.
Tôi đã thấy điều này được thực hiện trên các nhóm lập trình, nhưng bản thân tôi chưa từng làm việc sâu sắc như một lập trình viên, vì vậy tôi vẫn tự mình xoay quanh công việc hàng ngày.
git
thẻ sau mỗi lần xây dựng thành công không? Điều này sẽ có thêm lợi thế là nó làm cho nó thực sự rõ ràng nhữnggit
cam kết nào có vấn đề về xây dựng hoặc thử nghiệm thất bại, vì chúng sẽ vẫn không được gắn thẻ.