Nếu tôi rẽ nhánh một dự án được lưu trữ trên github. Tôi có ngã ba tất cả các chi nhánh? Làm thế nào để tôi biết nhánh của mình dựa trên nhánh nào? Nói cách khác, nhánh nào sẽ được tải xuống PC của tôi?
Nếu tôi rẽ nhánh một dự án được lưu trữ trên github. Tôi có ngã ba tất cả các chi nhánh? Làm thế nào để tôi biết nhánh của mình dựa trên nhánh nào? Nói cách khác, nhánh nào sẽ được tải xuống PC của tôi?
Câu trả lời:
Tất cả các chi nhánh trên GitHub sẽ được sao chép trong một ngã ba. (Rõ ràng, điều này không bao gồm các chi nhánh không bao giờ được đẩy lên GitHub ngay từ đầu.)
Nhưng một ngã ba là một hoạt động GitHub-to-GitHub; không có gì được sao chép vào PC của bạn. Nó không hoàn toàn giống như một bản sao Git . Nếu bạn muốn hỏi những gì đã sao chép khi tôi sao chép một dự án? Thì, hãy xem hướng dẫn git-clone(1)
.
Nghĩ theo cách này:
Repo [sective] tương ứng với công việc hợp tác của nhóm trên một hoặc nhiều chi nhánh. Tất cả những người đóng góp có bản sao riêng của nó.
Mỗi ngã ba của repo chính tương ứng với công việc của người đóng góp. Một ngã ba thực sự là một cấu trúc Github (không phải Git) để lưu trữ một bản sao của repo trong tài khoản người dùng của bạn. Là một bản sao, nó sẽ chứa tất cả các nhánh trong repo chính tại thời điểm bạn thực hiện ngã ba.
Mỗi chi nhánh trong ngã ba và / hoặc trong repo chính có thể tương ứng với một số loại, tùy thuộc vào cách bạn muốn làm việc. Mỗi chi nhánh có thể đề cập đến một phiên bản của dự án nhưng cũng có thể tương ứng với các kênh phát triển khác nhau, như hotfix hoặc công việc thử nghiệm.
Các yêu cầu kéo (trong hệ sinh thái GitHub) tương ứng với nhiệm vụ. Mỗi lần tôi muốn đóng góp một nhiệm vụ hoàn thành bị cô lập vào repo chính, tôi tạo một yêu cầu kéo tương ứng với các cam kết được thực hiện trong nhiệm vụ đó. Những cam kết này được kéo từ ngã ba của tôi hoặc chi nhánh của tôi đến repo chính .
Một cam kết là một tập hợp các thay đổi cho mã. Đây là một trong những điều thú vị nhất về Git. Bạn không chuyển tập tin, bạn chuyển nhật ký thay đổi.
Fork là một bản sao ở phía GitHub (nó nhân bản mọi thứ).
Khi bạn nhân bản một repo, bạn sẽ nhận được tất cả lịch sử của repo đã nói, với tất cả các chi nhánh của nó.
Mặc dù về lý thuyết bạn có thể thay đổi nhánh mặc định của repo từ xa , một bản sao từ repo GitHub chủ yếu tìm kiếm nhánh chính. Có nghĩa là để thay đổi nhánh "mặc định" mà bản sao GitHub sẽ nhận được, bạn cần đổi tên nhánh chính.
Nếu bạn tạo một nhánh của một dự án từ trang web Github, bạn sẽ nhận được tất cả các chi nhánh từ dự án ngược dòng.
Nếu bạn sao chép từ ngã ba mới đúc vào PC cục bộ, bạn sẽ có origin
điều khiển từ xa trên PC chỉ vào nhánh chính của ngã ba của bạn trên Github.
upstream
chi nhánh là việc bạn phải làm; và họ cho bạn biết làm thế nào để làm như vậy.
Điều này có thể được giải thích rất tốt. Bạn có một kho lưu trữ trung tâm tại GitHub. Bất cứ khi nào bạn lấy một bản sao của nó trên máy tính cá nhân của mình để thực hiện một số thay đổi, bản sao cục bộ này của kho lưu trữ chính được gọi là một ngã ba.
Chi nhánh là một cái gì đó khác nhau và được bao gồm trong ngã ba / repo. Trên thực tế, chi nhánh là công việc của bạn ở giai đoạn phát triển khác nhau. Chúng được tạo như và khi được yêu cầu để lưu một tập hợp các chức năng, để cấp quyền truy cập cho những người dùng khác nhau, để chứng minh trang web cho khách hàng, v.v.
Tôi muốn chia sẻ một ví dụ thực tế về thời điểm chúng ta sử dụng Chi nhánh và khi chúng ta sử dụng Fork
Chúng tôi có GitLab tại cửa hàng của chúng tôi và đôi khi chúng tôi phải làm việc với các gói từ một dự án Laravel. Chúng tôi thường tạo một nhánh và đẩy các thay đổi đến nhánh mà chúng tôi đã thử nghiệm trong môi trường phát triển VM cục bộ của chúng tôi khi làm việc với dự án Laravel thực tế.
Hãy nói rằng dự án của chúng tôi được đặt tại
https://github.com/yardpenalty/mainproject.git
Chi nhánh sử dụng:
Hãy nói rằng chi nhánh được gọi là It_doesnt_matter
Khi chúng tôi có chi nhánh theo cách chúng tôi muốn sản xuất, sau đó chúng tôi thực hiện lần đẩy cuối cùng đến chi nhánh này và tạo một yêu cầu hợp nhất sau đó đi vào UAT để thử nghiệm. Một khi thử nghiệm đã trải qua QC, các thay đổi được hợp nhất vào sản xuất.
Hợp nhất từ It_doesnt_matter
chi nhánh hiện được đẩy vào dự án tổng thể
tại https://github.com/yardpenalty/mainproject.git
Giả sử dự án trọn gói được đặt tại
https://github.com/yardpenalty/mypackage.git
Hãy nhớ rằng sản phẩm chính sử dụng gói này trong sản xuất để chúng tôi không thể thay đổi bằng cách đẩy chúng sang gói này (trong số các lý do khác). Giả sử một nhà phát triển web phải chỉnh sửa gói này để thay đổi sản xuất.
Một nhánh đơn giản sẽ không hoạt động vì chúng ta không thể thấy các thay đổi của mình mà không xuất bản gói, v.v.
Cách sử dụng ngã ba: Bây giờ là khi chúng tôi phải thực hiện một chút mánh khóe với gói của chúng tôi để chúng tôi tạo một bản sao của gói sản xuất thông qua một ngã ba. Các tập tin composer.json có thể được cập nhật để trỏ đến ngã ba hiện nằm ở đường dẫn Người dùng hoặc Nhóm
Vì vậy, chúng tôi sẽ tạo ra một ngã ba trong https://github.com/yardpenalty/mypackage.git
và gọi nó https://github.com/yardpenalty/yards/mypackage.git
Bây giờ chúng tôi có thể cập nhật tệp composer.json để trỏ đến gói này trong "kho" của chúng tôi: [mảng như vậy và chúng tôi sẽ đi!
{
"type": "github",
"url": "https://github.com/yardpenalty/yard/mypackage.git"
}
]