원격 Git 리포지토리의 한 분기 만 가져 오는 방법은 무엇입니까?


247

원격 저장소의 단일 분기 (모두가 아님)를 잡고 해당 원격 분기에 대한 추가 업데이트를 추적 할 수있는 로컬 추적 분기를 만들고 싶습니다. 원격 저장소의 다른 분기는 매우 커서 가져 오기를 피하고 싶습니다. 어떻게해야합니까?

편집 : 나는 이것을 스스로 알아 냈지만 StackOverflow는 답변으로 답변을 제공하지 않기 때문에 대신 여기에 질문에 넣을 것입니다.

다음과 같이 -t 옵션을 사용하여 원격 추가를 git합니다.

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

여러 개의 " -t branch"옵션을 사용 하여 여러 가지를 가져올 수 있습니다.


3
git clone은 모든 브랜치를 포함하여 전체 저장소를 가져옵니다. 얕은 사본을 만들 수 있지만 어떤 브랜치가 아닌 수정 횟수 만 지정할 수 있습니다.
Ikke

물론 자신의 질문에 대답 할 수 있습니다.
CharlesB

2
나는 OP가 그에 대답 할 수 없다는 것을 의미한다고 생각합니다. StackOverflow는 자신의 질문에 대답하기 전에 통과해야하는 최소 시간을 설정합니다.
Lars Nordin

1
안녕하세요 OP, 지금 답변을 추가하는 것이 좋습니다. 이런 식으로 우리는 그것에 투표 할 수 있고 (다른 답변들과 비교할 수 있음)
lulalala

3
git remote add 명령은 원격 브랜치를 추가하고 있는데 브랜치를 가져 오는 것과는 관련이 없습니다!
Chris Halcrow

답변:


220
git fetch <remote_name> <branch_name>

나를 위해 일했다.


14
페치 된 분기는 페치 FETCH_HEAD후 와 같이 사용 가능하다는 것을 알게 되었습니다. 감사!
Christoph

4
다음 git checkout FETCH_HEAD체크 아웃
d9k

간단하고 쉽습니다.
gsumk

<remote_name>을 얻는 방법?
mrgloom

대부분의 경우 @mrgloom remote_nameorigin입니다. 예 :git fetch origin <branch_name>
Saahithyan Vigneswaran

67

한 가지 방법은 다음과 같습니다.

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

그래도 추적을 설정하지는 않습니다.

자세한 정보 는 git fetch 문서를 참조하십시오 .

편집 : @ user1338062 참고 사항 : 새 분기를 추가하려는 저장소의 로컬 복제본이 없지만 새로운 로컬 저장소를 작성하려는 git clone --branch <branch_name> --single-branch <repo_url>경우 더 짧은 솔루션을 제공합니다.


1
고마워 이것은 op가 요청한 것을 수행합니다. 추적 브랜치 git checkout -t <원격 브랜치> / <브랜치 이름> <브랜치 이름>을 만들려면
ken

7
단순히 git checkout <branchname>한다면, 그 이름을 가진 유일한 브랜치가 원격 브랜치 인 경우 git이 자동으로 추적 브랜치를 설정한다는 것을 알 수 있습니다.
bukzor

1
이것이 나를 위해 일한 유일한 것입니다. 구성이 단일 브랜치에 대한 참조를 페치하도록 설정되었지만, 페치 또는 풀을 사용하여 모든 브랜치에 대한 참조를 여전히 가져 왔습니다. 이 명령은 내가 원하는 브랜치 만 가져 왔으므로 리포지토리는 5MB가 아닌 500kb입니다. 감사.
herostwist

1
이 답변은 아마도 구식 일 것입니다. git clone이제 지원 --branch--single-branch옵션, 데모와 함께 답변을 게시 했습니다 .
user1338062 2016 년

3
@ user1338062 복제 후 새로운 브랜치 (git fetch를 사용하는 모든 브랜치 만)를 페치하려는 경우에도 여전히 유효합니다
rubyprince

35

나는 이미 많은 답변이 있다는 것을 알고 있지만 다음은 나를 위해 일한 단계입니다.

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

이들은 @Abdulsattar Mohammed의 답변, @Christoph의 답변에 대한 의견 및 기타 스택 오버플로 질문 및 답변을 기반으로합니다.


1
가장 유용한 답변 IMO
Daniel Holmes

31

특정 지점 만 추적하도록 기존 리모컨을 업데이트하려면 다음을 사용하십시오.

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

보낸 사람 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
놀랍게도, 나는 --single-branch저장소에 있었고 나중에 추가 지점을 다운로드 할 수 없었습니다. 감사!
Yajo

22

한 가지 방법 :

원격 저장소에 대한 .git / config 페치에서 분기를 페치하도록 설정해야합니다.

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

원격 브랜치를 가져 오려면 :

git fetch origin branch-name

원점에서 원격 지점 'branch-name'을 (를) 추적하도록 설정된 로컬 지점 'branch-name'을 만듭니다.

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

모든 가지를 나열

git branch -a

16

저자의 게시물에서 복사 :

다음과 같은 -t옵션을 사용하십시오 git remote add.

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

-t branch여러 가지 옵션을 사용하여 여러 가지를 잡을 수 있습니다.


10
하향식, 왜 동일한 스레드에서 기존 답변으로 답변합니까?
Bowen

13

특정 분기 만 가져 오기 위해 "git pull"및 "git fetch"의 기본값을 변경하려는 경우 원격 구성이 다음과 같이되도록 .git / config를 편집 할 수 있습니다.

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

기본적으로 원점에서만 마스터를 가져옵니다. 자세한 내용은 https://git-scm.com/book/en/v2/Git-Internals-The-Refspec을 참조하십시오.

편집 : 방금 이것이 git remote add에 대해 -t 옵션과 동일한 기능임을 깨달았습니다. 원격을 삭제하고 -t를 사용하여 다시 추가하지 않으려는 경우 원격을 추가 한 후이 작업을 수행하는 것이 좋습니다.


1
progit.org/book/ch9-5 링크로 이동 한 git-scm.com/book/en/Git-Internals-The-Refspec
여기

8

완벽을 기하기 위해 다음은 새로운 체크 아웃 명령의 예입니다.

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

다른 답변에서 언급했듯이 remote.origin.fetch다음과 같이 설정됩니다 .

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

5

자식 버전 : 2.74

이것이 내가하는 방법입니다.

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

4

자식 버전 2.16.1.windows.4

그냥 일을 자식이 remoteRepositoryName BRANCHNAME를 가져 오는 것은 (eg: git fetch origin my_local_branch) 충분하다. 가져 오기가 완료되고 동일한 이름으로 새 로컬 지점이 생성되고 추적이 원격 지점으로 설정됩니다.

그런 다음 git checkout branchName을 수행 하십시오.


1
분기는 git branch체크 아웃 할 때까지 아래에 나타나지 않습니다
commonpike

3

내 해결 방법 :

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

로컬 클론이없는 경우 :

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

3
  1. <remote_name>사용하려는 항목을 선택하십시오 (사용 origin 하고 1 단계를 건너 뛰십시오).
  2. git remote add <remote_name> <remote_url>
  3. git fetch <remote_name> <branch>
  4. <your_local_branch_name>사용하려는 것을 선택하십시오 . 와 동일 할 수 있습니다 <branch>.
  5. git checkout <remote_name>/<branch> -b <your_local_branch_name>

희망이 도움이됩니다!


2

대답은 실제로 현재 추적 지점의 현재 목록에 따라 다릅니다. 지점이 이미 추적 지점 목록에있는 git fetch <remote_name> <branch_name> 경우에만 원격에서 특정 지점을 가져올 수 있습니다 (로 확인 가능 git branch -r).

이전에 --single-branch 옵션을 사용하여 리모컨을 복제했다고 가정하겠습니다.이 경우, 내가 보유한 유일한 추적 분기는 "복제 된"것입니다. git config를 수동으로 조정하고 git remote add <remote_name> <remote_url>명령 을 입력하여 조언하는 것에 약간 당황 합니다. "git remote add"는 새로운 원격을 설정하기 때문에 기존 원격 저장소에서는 작동하지 않습니다. "-t branch"옵션을 제공해도 도움이되지 않았습니다.

원격이 존재하고 가져 오려는 분기가 해당 원격에 존재하는 경우 :

  1. git branch -r이 지점을 추적 지점으로 볼 수 있는지 확인하십시오 . 그렇지 않은 경우 (단일 브랜치 복제와 같이) --add 옵션을 사용하여 "git remote set-branches"를 사용하여이 브랜치를 추적 브랜치 목록에 추가하십시오.

    • git remote set-branches --add <remote_name> <branch_name>
  2. 이제 특정 브랜치를 가져올 수 있습니다 (다른 답변은 여기에 중복).

    • git fetch <remote_name> <branch_name>
  3. 그리고 "checkout --track"으로 새로운 로컬 브랜치를 생성하고 체크 아웃하면 추적 브랜치와 동일한 "branch_name"이 부여됩니다 :

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

0

가장 간단한 방법은

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

예 : 원점에서 uat 브랜치를 가져오고 이것을 현재 작업 브랜치로 전환하고 싶습니다.

   git fetch origin uat && git checkout uat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.