Lấy một nhánh cụ thể bằng git


19

Tôi muốn tải xuống mã nguồn từ nhánh chính tiếp theo bằng git như được mô tả trong wiki Xilinx .

Tôi đã thử điều này:

#git clone git://github.com/Xilinx/u-boot-xlnx/tree/master-next.git

Initialized empty Git repository in /home/Hannan/master-next/.git/
fatal: remote error:
Xilinx/u-boot-xlnx/tree/master-next is not a valid repository name
Email support@github.com for help

Ngay cả điều này đã thất bại:

# git clone git://github.com/Xilinx/tree/master-next/u-boot-xlnx.git
Initialized empty Git repository in /home/Hannan/u-boot-xlnx/.git/
fatal: remote error:
Xilinx/tree/master-next/u-boot-xlnx is not a valid repository name
Email support@github.com for help

Lệnh hoạt động là:

 git clone git://github.com/Xilinx/u-boot-xlnx.git

Nhưng làm thế nào để tôi biết rằng điều này thực sự sẽ lấy nhánh chính tiếp theo chứ không phải nhánh chính ? Làm cách nào để tìm nạp chính xác một nhánh cụ thể bằng git?

Tôi đang sử dụng RHEL 6, được truy cập qua PuTTY.

Câu trả lời:


16

Giống như thông báo lỗi cho bạn biết, git clonemong đợi một kho lưu trữ git. Bạn không thể "thêm" tên của một nhánh trong đường dẫn như thế. Xem chi nhánh trong git .

Bạn có thể sao chép một nhánh duy nhất (và đó là lịch sử): git clone <url> --branch <branch> --single-branch

Xem git help clone.

Nhưng lệnh clone bạn đã chạy đã cho bạn một bản sao của toàn bộ kho lưu trữ, bạn có thể thấy các nhánh hiện có git branchvà nhiều chi tiết hơn về chúng với git show-branch.

Chuyển sang chi nhánh bạn muốn với git checkout branch-name.

Các chương đầu tiên của sách Pro Git (có sẵn trực tuyến) cung cấp thêm chi tiết về các lệnh cơ bản.


"Lệnh clone bạn đã chạy đã cho bạn một bản sao của toàn bộ kho lưu trữ". Kho lưu trữ có nghĩa là cả hai nhánh được hợp nhất?
dùng2799508

Không, họ không được hợp nhất. Một nhánh trong git không phải là một bản sao của toàn bộ thư mục, như được giải thích ở đây .
Leiaz

Những gì tôi đã làm là thế này: "git clone -b master-next github.com/Xilinx/u-boot-xlnx.git " điều này có đúng không?
dùng2799508

Bạn không cần phải nhân bản nữa. Lệnh bạn hiển thị trong câu hỏi của bạn đã cung cấp cho bạn kho lưu trữ với tất cả các nhánh. Nhưng điều này cũng đúng. Nó tương đương với việc làm git checkout master-nextsau khi nhân bản.
Leiaz

13

Lệnh này sẽ hoạt động:

$ git fetch origin [branch]

Lệnh trên chỉ tìm nạp siêu dữ liệu từ kho lưu trữ từ xa, nó không hợp nhất các nguồn.

Nếu bạn muốn tìm nạp và hợp nhất các nguồn, lệnh sẽ là:

$ git pull origin [branch]

Hãy cẩn thận với nhánh nơi bạn đang thực hiện lệnh hợp nhất. Nó sẽ là nơi các nguồn được hợp nhất.


Câu trả lời của bạn là đúng về mặt kỹ thuật nhưng tôi nghĩ nó có thể được hưởng lợi từ một số kiểm tra / viết lại ngữ pháp.
Sami Laine

điều này hoạt động độc đáo thx
nwgat

4

kho git chứa tất cả các nhánh (nhưng được nén và chỉ khác nhau do đó hiếm khi xảy ra vấn đề kích thước).

Do đó, bạn có thể sao chép toàn bộ dự án như bạn đã thực hiện thành công. Đây là một cách tiêu chuẩn để có được một kho lưu trữ, ngay cả khi bạn chỉ quan tâm đến một chi nhánh.

Cấu trúc .git sau đó sẽ bao gồm tất cả các nhánh được thực hiện trên kho lưu trữ đó.

Để sử dụng một nhánh cụ thể làm git checkout [branch_name] Nếu nhánh tồn tại, các tệp sẽ được cung cấp cục bộ (như vậy, các tệp hiện tại trong thư mục dự án).

git status sau đó sẽ hiển thị nhánh nào là nhánh hiện tại, ví dụ:

Theo Leiaz người ta có thể nhân bản một nhánh cụ thể. Trong thực tế tôi chưa bao giờ làm điều này hoặc thấy người khác sử dụng nó. Về nghiên cứu sâu hơn, tôi thấy nó còn khá mới, được thêm vào git 1.7.10 (tháng 4 năm 2012): tùy chọn 'git clone learn --single-Branch' để hạn chế nhân bản vào một nhánh duy nhất (bất ngờ!); các thẻ không trỏ vào lịch sử của chi nhánh không được tìm nạp. Ví dụ:

git clone -b master-next --single-branch git://github.com/Xilinx/

nhập mô tả hình ảnh ở đây Ở đây, đối với ứng dụng "linker" của tôi, tôi đang kiểm tra chi nhánh v3.0.10


1
Tôi cũng chưa bao giờ làm điều đó, tôi nhớ đã thấy tùy chọn này. Tôi đoán nó hiếm khi được sử dụng vì các nhánh phụ có kích thước "rẻ".
Leiaz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.