Tôi muốn biết sự khác biệt giữa thực hiện Fork của một dự án và thực hiện clone
nó.
Tôi chỉ có thể gửi yêu cầu kéo qua GitHub nếu tôi đã rẽ nhánh một dự án?
Tôi muốn biết sự khác biệt giữa thực hiện Fork của một dự án và thực hiện clone
nó.
Tôi chỉ có thể gửi yêu cầu kéo qua GitHub nếu tôi đã rẽ nhánh một dự án?
Câu trả lời:
Về cơ bản, có. A fork
chỉ là một yêu cầu để GitHub sao chép dự án và đăng ký nó dưới tên người dùng của bạn ; GitHub cũng theo dõi mối quan hệ giữa hai kho lưu trữ, vì vậy bạn có thể hình dung các cam kết và kéo giữa hai dự án (và các nhánh khác).
Bạn vẫn có thể yêu cầu mọi người lấy từ kho lưu trữ nhân bản của mình, ngay cả khi bạn không sử dụng fork
- nhưng bạn phải tự giải quyết công khai. Hoặc gửi các bản vá cho nhà phát triển (xem git format-patch
) mà họ có thể áp dụng cho cây của họ.
git pull
. Một ngã ba có nhiều lệnh. Và không có gì đáng ngạc nhiên, gần như mọi ngã ba tôi nhìn vào đều lỗi thời. Fork giống như vấn đề kho lưu trữ Maven trên steroid. Thay vì một repo lỗi thời (Maven), có hàng ngàn người trong số họ (Git).
git pull
vì vậy vẫn còn một số mối quan hệ tồn tại. Nếu bạn nhân bản toàn bộ bản sao, nó sẽ nằm trên máy cục bộ của bạn và ngắt kết nối với repo gốc.
Khi bạn nói rằng bạn đang Ngã ba một kho lưu trữ, về cơ bản bạn đang tạo một bản sao của kho lưu trữ dưới ID GitHub của bạn. Các điểm chính cần lưu ý ở đây là bất kỳ thay đổi đối với kho gốc sẽ được phản xạ trở lại để bạn chia hai kho (bạn cần phải lấy và rebase). Tuy nhiên, nếu bạn thực hiện bất kỳ thay đổi nào đối với kho lưu trữ rẽ nhánh của mình, bạn sẽ phải tạo một yêu cầu kéo đến kho lưu trữ ban đầu một cách rõ ràng . Nếu yêu cầu kéo của bạn được quản trị viên của kho lưu trữ ban đầu chấp thuận , thì những thay đổi của bạn sẽ được cam kết / hợp nhất với cơ sở mã gốc hiện có . Cho đến lúc đó, những thay đổi của bạn sẽ chỉ được phản ánh trong bản sao bạn đã rẽ nhánh .
Nói ngắn gọn:
Mô hình Fork & Pull cho phép mọi người rẽ nhánh một kho lưu trữ hiện có và đẩy các thay đổi đến ngã ba cá nhân của họ mà không yêu cầu quyền truy cập được cấp cho kho lưu trữ nguồn. Các thay đổi sau đó phải được người bảo trì dự án kéo vào kho lưu trữ nguồn.
Lưu ý rằng sau khi giả mạo, bạn có thể sao chép kho lưu trữ của mình (cái dưới tên của bạn) cục bộ trên máy của bạn. Thay đổi trong đó và đẩy nó vào kho lưu trữ của bạn. Tuy nhiên, để phản ánh các thay đổi của bạn trong kho lưu trữ ban đầu, yêu cầu kéo của bạn phải được chấp thuận.
Cặp đôi thú vị khác -
Bạn có thể cam kết về repo trực tuyến của bạn (hoặc cam kết với repo cục bộ của bạn và sau đó đẩy sang repo trực tuyến của bạn), sau đó gửi yêu cầu kéo.
Người quản lý dự án có thể chấp nhận nó để có được những thay đổi của bạn trong phiên bản trực tuyến chính của anh ấy.
Một bản sao là nơi bạn có sự trùng lặp thích hợp và phân tách giữa hai phiên bản (có thể khác nhau) của một kho lưu trữ. Khi một repo được sửa đổi, nội dung mới phải được sao chép tích cực sang repo khác bằng lệnh đẩy. Và thay đổi trong repo khác lấy.
Khi bạn rẽ nhánh một repo, trên một máy chủ, không cần sao chép nội dung vì cả hai repos sẽ sử dụng cùng một nội dung [đối tượng cố định] từ cùng một máy chủ đó. 'Bí quyết' là trong việc quản lý các quan điểm người dùng khác nhau để mỗi người dùng tin rằng họ có một bản sao cá nhân đầy đủ của repo. Đẩy và tìm nạp giữa các dĩa chỉ đơn giản là cập nhật con trỏ của người dùng.
Ở cấp độ thấp hơn, git làm điều tương tự trong nội bộ. Nếu bạn có ba tệp khác nhau, mỗi tệp chứa Hello World
, thì git chỉ đơn giản là 'forks' bản sao duy nhất của blob Hello World và cung cấp nó ở mỗi ba nơi theo yêu cầu.
Khả năng rẽ nhánh trên máy chủ có nghĩa là trung bình dung lượng lưu trữ lớn của Github không lớn bằng trung bình vì mọi người đều chia sẻ một repo cơ bản duy nhất.
Tóm lại, Forking có lẽ giống như "nhân bản dưới ID / hồ sơ GitHub của bạn". Một ngã ba là bất cứ lúc nào tốt hơn một bản sao, với một vài ngoại lệ, rõ ràng. Kho lưu trữ rẽ nhánh luôn được theo dõi / so sánh với kho lưu trữ ban đầu không giống như kho lưu trữ nhân bản. Điều đó cho phép bạn theo dõi các thay đổi, bắt đầu các yêu cầu kéo và cũng đồng bộ hóa thủ công các thay đổi được thực hiện trong kho lưu trữ ban đầu với kho lưu trữ của bạn.
Trong khi câu trả lời của @ AniketThakur là rất tốt. Không ai trả lời câu hỏi sau đây.
Tôi chỉ có thể gửi yêu cầu kéo qua GitHub nếu tôi đã rẽ nhánh một dự án?
Không. Nếu bạn là người đóng góp cho kho lưu trữ, bạn có thể: Tạo một bản sao cục bộ. Làm một chi nhánh địa phương. Thêm cam kết vào chi nhánh đó. Đẩy nhánh cục bộ trở lại github (tạo nhánh từ xa trong tiến trình). Tạo một yêu cầu kéo yêu cầu cho nhánh đó được sáp nhập vào nhánh chính (hoặc bất kỳ nhánh nào bạn thích).
Trong trường hợp bạn đã làm những gì người hỏi gợi ý (quên rẽ nhánh và chỉ nhân bản một repo cục bộ, thực hiện thay đổi và bây giờ cần đưa ra yêu cầu kéo), bạn có thể quay lại theo dõi:
Một sự khác biệt tinh tế kỳ lạ khác trên GitHub là những thay đổi về dĩa không được tính vào nhật ký hoạt động của bạn cho đến khi những thay đổi của bạn được kéo vào repo ban đầu. Hơn nữa, để thay đổi một ngã ba thành một bản sao thích hợp, rõ ràng bạn phải liên hệ với bộ phận hỗ trợ của Github.
Từ Tại sao những đóng góp của tôi không hiển thị :
Cam kết được thực hiện trong một ngã ba
Cam kết thực hiện trong một ngã ba sẽ không được tính vào đóng góp của bạn. Để làm cho chúng được tính, bạn phải thực hiện một trong những điều sau đây:
Mở một yêu cầu kéo để các thay đổi của bạn được hợp nhất vào kho lưu trữ mẹ. Để tách ngã ba và biến nó thành một kho lưu trữ độc lập trên GitHub, hãy liên hệ với bộ phận Hỗ trợ của GitHub . Nếu ngã ba có các nhánh riêng, hãy cho bộ phận hỗ trợ biết liệu các nhánh sẽ di chuyển với kho lưu trữ của bạn vào một mạng mới hay vẫn ở trong mạng hiện tại. Để biết thêm thông tin, xem " Giới thiệu về dĩa ."