Làm cách nào để tôi chỉ tìm nạp một nhánh của kho Git từ xa?


246

Tôi muốn lấy một nhánh duy nhất (không phải tất cả trong số chúng) của một kho lưu trữ từ xa và tạo một nhánh theo dõi cục bộ có thể theo dõi các cập nhật tiếp theo cho nhánh từ xa đó. Các nhánh khác trong kho lưu trữ từ xa rất lớn, vì vậy tôi muốn tránh tìm nạp chúng. Làm thế nào để tôi làm điều này?

Chỉnh sửa: Tôi đã tự mình tìm ra điều này nhưng StackOverflow từ chối để tôi cung cấp câu trả lời dưới dạng câu trả lời vì vậy tôi sẽ đặt nó ở đây trong câu hỏi thay thế.

Bạn sử dụng tùy chọn -t để thêm từ xa, ví dụ:

git remote add -t remote-branch remote-name remote-url

Bạn có thể sử dụng nhiều -t branchtùy chọn "" để lấy nhiều nhánh.


3
Một bản sao git lấy toàn bộ kho lưu trữ, bao gồm tất cả các nhánh. Bạn có thể tạo các bản sao nông, nhưng điều đó chỉ cho phép bạn chỉ định số lượng bản sửa đổi, không phải chi nhánh nào.
Ikke

Chắc chắn bạn có thể trả lời câu hỏi của riêng bạn, tại sao bạn không thể?
CharlesB

2
Tôi nghĩ OP có nghĩa là anh ấy không thể trả lời nó sau đó. StackOverflow đặt thời gian tối thiểu phải vượt qua trước khi bạn có thể trả lời câu hỏi của riêng mình.
Lars Nordin

1
Xin chào OP, bây giờ có thể tốt hơn để thêm câu trả lời của bạn. Bằng cách này, chúng tôi có thể bỏ phiếu cho nó (và so sánh với các câu trả lời khác)
lulalala 21/07/2015

3
Lệnh git remote add của bạn đang thêm một nhánh từ xa, không liên quan gì đến việc tìm nạp một nhánh!
Chris Halcrow

Câu trả lời:


220
git fetch <remote_name> <branch_name>

Đã làm cho tôi.


13
Chỉ cần biết rằng nhánh tìm nạp có sẵn như FETCH_HEADsau khi tìm nạp. Cảm ơn!
Christoph

4
sau đó git checkout FETCH_HEADđể thanh toán
d9k

Đơn giản và dễ dàng.
gsumk

Làm cách nào để nhận <remote_name>?
mrgloom

@mrgloom trong hầu hết các trường hợp remote_nameorigin. ví dụ:git fetch origin <branch_name>
Saahithyan Vigneswaran

67

Một cách là như sau:

git fetch <remotename> <remote branch>:refs/remotes/<remotename>/<local branch>

Điều này không thiết lập theo dõi mặc dù.

Để biết thêm thông tin, xem tài liệu của git fetch .

EDIT : Như @ user1338062 lưu ý bên dưới : nếu bạn chưa có bản sao cục bộ của kho lưu trữ nơi bạn muốn thêm nhánh mới, nhưng bạn muốn tạo một kho lưu trữ cục bộ mới, thì git clone --branch <branch_name> --single-branch <repo_url>cung cấp giải pháp ngắn hơn.


1
Cảm ơn điều này làm những gì op đã yêu cầu. Để thực hiện kiểm tra git chi nhánh theo dõi -t <chi nhánh từ xa> / <tên chi nhánh> <tên chi nhánh>
ken

7
Nếu tôi chỉ đơn giản làm git checkout <branchname>, tôi thấy rằng git sẽ tự động thiết lập nhánh theo dõi, nếu nhánh duy nhất có tên đó là nhánh từ xa.
bukzor

1
đây là điều duy nhất làm việc cho tôi mặc dù cấu hình được đặt thành chỉ tìm nạp các ref cho một nhánh, nó vẫn kéo ref cho tất cả các nhánh bằng cách tìm nạp hoặc kéo. Lệnh này chỉ kéo chi nhánh tôi muốn nên repo chỉ có 500kb chứ không phải 5mb. cảm ơn.
dị giáo

1
Câu trả lời này có lẽ đã lỗi thời. git cloneBây giờ hỗ trợ --branch--single-branchcác tùy chọn, tôi đã đăng một câu trả lời với trình diễn .
user1338062

3
@ user1338062 Điều này vẫn hợp lệ nếu bạn chỉ muốn tìm nạp một nhánh mới (không phải tất cả các nhánh sử dụng git fetch) sau khi nhân bản
rubyprince

35

Tôi biết đã có rất nhiều câu trả lời, nhưng đây là những bước làm việc cho tôi:

  1. git fetch <remote_name> <branch_name>
  2. git branch <branch_name> FETCH_HEAD
  3. git checkout <branch_name>

Những câu hỏi này dựa trên câu trả lời của @Abdulsattar Mohammed, bình luận của @Christoph về câu trả lời đó, và những câu hỏi chồng chất khác và câu trả lời của họ:


1
Câu trả lời hữu ích nhất ở đây IMO
Daniel Holmes

31

Để cập nhật từ xa hiện có để theo dõi các chi nhánh cụ thể, chỉ sử dụng:

git remote set-branches <remote-name> <branch-name>

Từ git help remote:

set-branches
    Changes the list of branches tracked by the named remote. This can be used to track a subset of the available remote branches
    after the initial setup for a remote.

    The named branches will be interpreted as if specified with the -t option on the git remote add command line.

    With --add, instead of replacing the list of currently tracked branches, adds to that list.

1
Thật tuyệt vời, tôi đã ở trong một --single-branchkho lưu trữ và không thể tải thêm các chi nhánh sau này. Cảm ơn!
Yajo

22

Một cách để làm điều đó:

trong .git / config tìm nạp cho repo từ xa nên được đặt thành tìm nạp bất kỳ nhánh nào:

   [remote "origin"]
            fetch = +refs/heads/*:refs/remotes/origin/*

để lấy chi nhánh từ xa:

git fetch origin branch-name

để tạo một nhánh cục bộ 'tên nhánh' được thiết lập để theo dõi nhánh 'tên nhánh' từ xa.

git checkout -b branch-name origin/branch-name

liệt kê tất cả các chi nhánh

git branch -a

16

Sao chép từ bài viết của tác giả:

Sử dụng -ttùy chọn để git remote add, ví dụ:

git remote add -t remote-branch remote-name remote-url

Bạn có thể sử dụng nhiều -t branchtùy chọn để lấy nhiều chi nhánh.


10
Từ chối, tại sao bạn trả lời với một câu trả lời hiện có trong cùng một chủ đề?
Bowen

13

Nếu bạn muốn thay đổi mặc định cho "git pull" và "git fetch" để chỉ tìm nạp các nhánh cụ thể thì bạn có thể chỉnh sửa .git / config để cấu hình từ xa trông giống như:

[remote "origin"]
  fetch = +refs/heads/master:refs/remotes/origin/master

Điều này sẽ chỉ lấy chủ từ gốc theo mặc định. Xem để biết thêm thông tin: https://git-scm.com/book/en/v2/Git-Iternals-The-Refspec

EDIT: Chỉ cần nhận ra đây là điều tương tự mà tùy chọn -t làm cho git remote add. Ít nhất đây là một cách hay để làm điều đó sau khi điều khiển từ xa được thêm vào nếu bạn không muốn xóa điều khiển từ xa và thêm lại bằng cách sử dụng -t.


1
liên kết progit.org/book/ch9-5 đã được chuyển đến git-scm.com/book/en/Git-Iternals-The-Refspec
tại đây

8

Để hoàn thiện, đây là một ví dụ về lệnh thanh toán mới:

git clone --branch gh-pages --single-branch git://github.com/user/repo

Như đã đề cập trong các câu trả lời khác, nó đặt remote.origin.fetchnhư thế này:

[remote "origin"]
        url = git://github.com/user/repo
        fetch = +refs/heads/gh-pages:refs/remotes/origin/gh-pages

5

phiên bản git: 2,74

Đây là cách tôi làm điều đó:

git remote add [REMOTE-NAME] [REMOTE-URL]
git fetch [REMOTE-NAME] -- [BRANCH]

4

phiên bản git 2.16.1.windows.4

Chỉ cần thực hiện một git lấy từ xaRep repositoryName BranchName (eg: git fetch origin my_local_branch) là đủ. Tìm nạp sẽ được thực hiện và một chi nhánh địa phương mới sẽ được tạo với cùng tên và theo dõi sẽ được đặt thành chi nhánh từ xa.

Sau đó thực hiện git checkout BranchName


chi nhánh không xuất hiện git branchcho đến khi bạn thanh toán vào đó
thường

3

Cách giải quyết của tôi:

git fetch --depth=1
git checkout <branch_name>

nếu bạn không có một bản sao địa phương:

git clone --depth 1 -b <branch_name> <repo_url>

3
  1. Chọn bất kỳ <remote_name>bạn muốn sử dụng (thoải mái sử dụng origin và bỏ qua bước 1.)
  2. git remote add <remote_name> <remote_url>
  3. git fetch <remote_name> <branch>
  4. Chọn bất kỳ <your_local_branch_name>bạn muốn sử dụng. Có thể giống như <branch>.
  5. git checkout <remote_name>/<branch> -b <your_local_branch_name>

Mong rằng sẽ giúp!


1

Câu trả lời thực sự phụ thuộc vào danh sách các ngành theo dõi hiện tại mà bạn có. Bạn chỉ có thể tìm nạp một nhánh cụ thể từ xa git fetch <remote_name> <branch_name> nếu nhánh đó đã có trong danh sách nhánh theo dõi (bạn có thể kiểm tra nó với git branch -r).

Giả sử tôi đã nhân bản điều khiển từ xa với tùy chọn --single-Branch trước đây và trong trường hợp này, một nhánh theo dõi duy nhất tôi có là "nhân bản". Tôi hơi hoang mang khi khuyên nên chỉnh git config bằng tay, cũng như bằng cách gõ git remote add <remote_name> <remote_url>lệnh. Vì "git remote add" thiết lập một điều khiển từ xa mới, rõ ràng nó không hoạt động với kho lưu trữ từ xa hiện có; cung cấp tùy chọn "-t chi nhánh" không giúp tôi.

Trong trường hợp điều khiển từ xa tồn tại và nhánh bạn muốn tìm nạp tồn tại trong điều khiển từ xa đó:

  1. Kiểm tra git branch -rxem bạn có thể xem chi nhánh này như một chi nhánh theo dõi hay không. Nếu không (như trong trường hợp của tôi với một bản sao nhánh đơn), hãy thêm nhánh này vào danh sách nhánh theo dõi bằng "git remote set-cành" với tùy chọn --add:

    • git remote set-branches --add <remote_name> <branch_name>
  2. Bây giờ bạn có thể tìm nạp một nhánh cụ thể (sao chép ở đây các câu trả lời khác):

    • git fetch <remote_name> <branch_name>
  3. Và tạo và kiểm tra một chi nhánh địa phương mới với "checkout --track", sẽ được cung cấp cùng một "nhánh_name" như một nhánh theo dõi:

    • git checkout --track <remote_name>/<branch_name>

0

Cách đơn giản nhất để làm điều đó

  git fetch origin <branch> && git checkout <branch>

Ví dụ: Tôi muốn tìm nạp nhánh uat từ nguồn gốc và chuyển sang nhánh này làm nhánh làm việc hiện tại.

   git fetch origin uat && git checkout uat
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.