programing

원격 Git 저장소의 분기를 하나만 가져오려면 어떻게 해야 합니까?

muds 2023. 5. 21. 12:03
반응형

원격 Git 저장소의 분기를 하나만 가져오려면 어떻게 해야 합니까?

원격 저장소의 단일 분기(일부가 아님)를 가져와 해당 원격 분기에 대한 추가 업데이트를 추적할 수 있는 로컬 추적 분기를 만들고 싶습니다.원격 저장소의 다른 브랜치는 매우 크기 때문에 가져오는 것을 피하고 싶습니다.이거 어떻게 하는 거지?

git fetch <remote_name> <branch_name>

나를 위해 일했습니다.

이미 많은 답변이 있다는 것을 알고 있지만, 다음과 같은 단계가 저에게 효과적이었습니다.

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

이것은 @Abdulsattar Mohammed의 답변, @Christoph의 답변, 그리고 다른 스택 오버플로 질문과 답변을 기반으로 합니다.

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

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

그러나 추적을 설정하지는 않습니다.

자세한 내용은 git fetch 설명서를 참조하십시오.

편집: 아래 @user1338062 참고 사항: 새 분기를 추가할 리포지토리의 로컬 복제본이 아직 없지만 새 로컬 리포지토리를 만들려면git clone --branch <branch_name> --single-branch <repo_url>보다 짧은 솔루션을 제공합니다.

특정 분기만 추적하도록 기존 원격을 업데이트하려면 다음을 사용합니다.

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.

한 가지 방법:

.git/config fetch에서 원격 repo에 대한 모든 분기를 가져오도록 설정해야 합니다.

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

원격 분기를 가져오는 방법:

git fetch origin branch-name

원본에서 원격 분기 'vmdk-name'을(를) 추적하도록 설정된 로컬 분기 'vmdk-name'을(를) 만듭니다.

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

모든 분기를 나열합니다.

git branch -a

저자의 게시물에서 복사:

을 합니다.-t에 대한 선택권.git remote add항목:

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

여러 개를 사용할 수 있습니다.-t branch여러 분기를 가져오는 옵션입니다.

실제로 사용자가 가지고 있는 추적 지점의 현재 목록에 따라 답이 달라집니다.에서 " 에서다사용여특정분기가수져있다습니올를원격하음을▁a▁from▁you다"로 특정 지점을 가져올 수 .git fetch <remote_name> <branch_name> 분기가 추적 분기 목록에 이미 있는 경우에만 해당됩니다(으로 확인할 수 있습니다).git branch -r).

이는 " --single-branch ▁let▁i▁with--다▁the가니▁only▁i▁one합▁remote'정▁supposesingles▁branch▁--▁previous고▁tracking추▁the-cl있다적▁have▁is▁and▁cloned분ly-고▁one가▁in,기지만▁optionanchsingleanch제"▁havebroned옵이▁this▁the수동으로 git 구성을 조정하고 입력하라는 조언에 약간 당황스럽습니다.git remote add <remote_name> <remote_url>명령을 실행합니다." add때 하지 않는 것이 "-t branch" 제공하는 것은나에게 이 되지 ."git remote add" "git remote add" 가원설않때작정습지다동 "-t branch" 옵되다니습않았지이움도저게에것제은는션하공을니에하소장격새서격할존을기저원▁as▁"-다"니습되않았지g▁sets,t▁meg."이▁it▁supplying움도▁didn"

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

  1. 체크인으로 합니다.git branch -r이 분기를 추적 분기로 볼 수 있는지 여부.그렇지 않은 경우(단일 분기 복제본의 경우처럼) --add 옵션을 사용하여 "git remote set-branchs"를 사용하여 이 분기를 추적 분기 목록에 추가합니다.
  • git remote set-branches --add <remote_name> <branch_name>
  1. 원격에서 추가한 분기를 가져옵니다.
  • git fetch <remote_name> <branch_name>에서 새 에서 ": " " " " " " " " " " " " " " " " " " " " 을 할 수 .git branch -r.
  1. 추적 분기와 동일한 "branch_name"이 지정되는 "checkout --track"을 사용하여 새 로컬 분기를 만들고 체크아웃합니다.
  • git checkout --track <remote_name>/<branch_name>

다음은 완전성을 위해 새로 체크아웃하는 명령의 예입니다.

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

"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 을 참조하십시오.

편집: 방금 이것이 -t 옵션이 원격 추가를 포기하는 것과 같은 것이라는 것을 깨달았습니다.적어도 리모컨을 삭제하고 -t를 사용하여 다시 추가하지 않으려면 리모컨을 추가한 후에 이 작업을 수행하는 것이 좋습니다.

그렇게 하는 가장 간단한 방법입니다.

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

예:저는 uat 브랜치를 오리진에서 가져와서 현재 작업 브랜치로 전환하고 싶습니다.

   git fetch origin uat && git checkout uat

매드슨 씨의 대답에 반전을 넣어 두 펜스를 넣겠습니다.

  1. git fetch <remote_name_or_url> <branch_name>
  2. git checkout FETCH_HEAD -B <branch_name>

Madsen 씨의 제안에 대한 이 두 줄의 주요 이점은 지사가 이미 현지에 존재하는 경우에도 작동할 것이라는 것입니다.

해결 방법:

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

로컬 복제본이 없는 경우:

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

깃 버전: 2.74

이렇게 해야 합니다.

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

git 버전 2.16.1.windows.4

git fetch remoteRepositoryName branchName을(를) 가져오는 중입니다. (eg: git fetch origin my_local_branch)가 완료되고 됩니다.가져오기가 수행되고 동일한 이름으로 새 로컬 분기가 생성되고 추적이 원격 분기로 설정됩니다.

그런 다음 git checkout branchName을 수행합니다.

  1. 아무거나 고르세요<remote_name>당신이 사용하고 싶은 것 (자유롭게 사용하세요.origin1단계를 건너뜁니다.)
  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>

도움이 되길 바랍니다!

이 방법은 저에게 효과가 있습니다.

대상 분기의 원격 분기를 가져옵니다.

git fetch origin branch-name

대상 분기를 확인합니다.

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

여기서 릴리스 20.10.08을 성공적으로 가져오려고 했습니다.

name:directory zgong$ git fetch release-20.10.04 release-20.10.04
fatal: 'release-20.10.04' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
WM-C02WM0T3HTD8:vdca_android_20_10_04_stable zgong$ git fetch origin release-20.10.04
From ssh://stash.trusted.visa.com:7999/vdcbc3a/vmcp-android-mobile-app
 * branch                  release-20.10.04 -> FETCH_HEAD
WM-C02WM0T3HTD8:vdca_android_20_10_04_stable zgong$ git checkout -b release-20.10.08 origin/release-20.10.08
fatal: 'origin/release-20.10.08' is not a commit and a branch 'release-20.10.08' cannot be created from it
WM-C02WM0T3HTD8:vdca_android_20_10_04_stable zgong$ git fetch origin release-20.10.08
remote: Counting objects: 637, done.
remote: Compressing objects: 100% (320/320), done.
remote: Total 637 (delta 303), reused 465 (delta 202)
Receiving objects: 100% (637/637), 312.26 KiB | 262.00 KiB/s, done.
Resolving deltas: 100% (303/303), done.
From ssh://stash.trusted.visa.com:7999/vdcbc3a/vmcp-android-mobile-app
 * branch                  release-20.10.08 -> FETCH_HEAD
 * [new branch]            release-20.10.08 -> origin/release-20.10.08
WM-C02WM0T3HTD8:vdca_android_20_10_04_stable zgong$ git checkout -b release-20.10.08 origin/release-20.10.08
M   VMCP/fmcore_android
M   VMCP/foundation_android
M   VMCP/mep_3ds_android
M   VMCP/mep_login_android
M   VMCP/mep_provisioning_and
Branch 'release-20.10.08' set up to track remote branch 'release-20.10.08' from 'origin'.
Switched to a new branch 'release-20.10.08'

저의 경우 새 리모컨을 만들지 않고 브랜치를 가져오고 싶었기 때문에 다음과 같이 작동했습니다.

git fetch <remote url> <remote branch name>:<local branch name>

응답 내용은 달성하고자 하는 내용에 따라 달라집니다.

  1. 다른 리포지토리의 일회성 거래이며 참조가 필요하지 않은 경우(예: GitHub PullRequests를 병합하기 위해 <remote_url>이 https://github.com/USER/REPO.git), 과 같은 경우) 다음을 사용할 수 있습니다.
    git checkout -b <local_branch> <local_branch_to merge_into>
    git pull <remote_url> <remote_branch>
    
  2. 분기를 업데이트하고 추적하려면 먼저 원격을 설정해야 하며 다음 4가지 방법이 있습니다.
    1. 해당 하는 경우)
      git clone --single-branch --branch remote_branch remote_url
      
    2. 작업 디렉토리에 새 원격을 추가하는 경우
      # multiple -t options are allowed
      git remote add -t <remote_branch> <remote_repo> <remote_url>
      
    3. 디렉토리에 작업 디한 분 기 추 제 을 가 하 는 경 우 에 원 격 렉 토
      # with --add it will add the branch instead of setting it
      # you can add multiple branches with multiple --add lines 
      # wildcards are allowed, 
      #   e.g. branch_v\* matching branch_v1, branch_v2, ...
      git remote set-branches [--add]  <remote_repo>  <remote_branch>
      
    4. 복제는 기본적으로 기본적으로 주 분기만 가져오고 원격 추가는 분기를 가져오지 않으므로 제한을 건너뛸 수도 있습니다.하지만 그러면 remote_repo를 가져올 때마다 원격 브랜치를 모두 언급해야 합니다.
      git remote add <remote_repo> <remote_url>
      
    한 후 지점을 풀링할 수 .
    # If you set only one <remote_branch> in the restrictions above (i.e no option 4), 
    # then you can omit it and still only <remote_branch> will be fetched
    git fetch <remote_repo> [<remote_branch>]
    # without -b the local branch name is guessed to be the same as the remote one
    git checkout --track [-b <local_branch>] <remote_repo>/<remote_branch>
    

및 이미 은 원격및이미있가분확기는인가다좋같명다입니다.git remote show <remote_repo>이 페이지는 "원격 분기:" 아래에 분기 목록을 인쇄하고 해당 분기가 가져온 것인지 여부와 추적된 것인지 여부도 알려줍니다.

알려진 원격 분기를 다음과 같이 나열하여 원격에서 분기 제한을 확인할 수도 있습니다.git branch -r grep원격이 파일에서 으로써 git에 대한 정보를 확인할 수 ..git/config다음과 같은 섹션이 포함됩니다.

[remote "<remote_repo>"]
    url = <remote_url>
    fetch = +refs/heads/<remote_branch>:refs/remotes/<remote_repo>/<remote_branch>

구성 파일을 편집하면 제한 사항을 변경할 수 있지만 @alexk에 동의합니다. 이것은 좋은 생각이 아닙니다.

(""에서 할 수 있습니다." 참조)git remote show 파일수. 를 저장하고 하거나 FETCH_HEAD.git에서 할 수 .git checkout이것이 저를 이 스레드로 이끈 문제입니다(질문의 반대). GitHub과 함께 했습니다.gh repo clone USER/REPO그리고 분기된 저장소인 자동 "master"를 "master" 분기에만 추가했습니다.다른 분기를 체크아웃할 수 없어서 "fatal: '<remote_repo>/<remote_branch>는 커밋이 아니며 분기 '<local_branch>'를 만들 수 없습니다."와 같은 오류가 발생했습니다.다음을 사용하여 수정했습니다.git remote set-branches <remote_repo> \*.

언급URL : https://stackoverflow.com/questions/6368987/how-do-i-fetch-only-one-branch-of-a-remote-git-repository

반응형