github branch 연결 - Git에서 모든 원격 브랜치를 복제하는 방법?





15 Answers

한 번에 가져올 원격 브랜치가 여러 개있는 경우 다음을 수행하십시오.

$ git pull --all

이제 원격 저장소를 사용하지 않고 필요한 모든 지점을 체크 아웃 할 수 있습니다.

tag 가져 오기

나는 masterdevelopment branch를 가지고 있는데, 둘 다 GitHub push했다. 나는 clone 하고 에드를 fetch 왔지만 에드를 fetch 왔지만 master 브랜치 이외의 것을 얻을 수 없다.

나는 명백한 것을 놓치고 있다고 확신하지만, 매뉴얼을 읽었고 전혀 기쁨을 얻지 못하고있다.




--mirror 옵션을 사용하면 remote 추적 분기를 제대로 복사하는 것처럼 보입니다. 그러나 저장소를 베어 리 저장소로 설정하기 때문에 이후에 저장소를 다시 일반 저장소로 되돌려 야합니다.

git clone --mirror path/to/original path/to/dest/.git
cd path/to/dest
git config --bool core.bare false
git checkout anybranch

참조 : Git FAQ : 원격으로 추적되는 모든 지점을 가진 저장소를 어떻게 복제합니까?




에 관해서,

$ git checkout -b 실험적 출발점 / 실험실

~을 사용하여

$ git checkout -t origin/experimental

또는 좀더 자세한하지만 기억하기 쉽도록

$ git checkout --track origin/experimental

원격 저장소를 추적하는 측면에서 더 좋을 수도 있습니다.




"git clone git : // location"을 수행하면 모든 브랜치와 태그가 인출됩니다.

특정 원격 브랜치의 맨 위에서 작업하기 위해 원점이라고 가정합니다.

git checkout -b branch origin/branchname



이것은 너무 복잡하지 않으며, 매우 간단하고 직선적 인 단계는 다음과 같습니다.

git fetch origin 그러면 모든 원격 브랜치가 로컬로 전달됩니다.

git branch -a 이것은 모든 원격 브랜치를 보여줍니다.

git checkout --track origin/<branch you want to checkout>

다음 명령으로 원하는 분기에 있는지 확인하십시오.

git branch

출력은 다음과 같습니다.

*your current branch 
some branch2
some branch3 

현재 분기를 나타내는 * 기호에 주목하십시오.




늦지 않을 때보 다 나은데, 여기에이 일을하는 가장 좋은 방법이 있습니다.

mkdir repo
cd repo
git clone --bare path/to/repo.git .git
git config --unset core.bare
git reset --hard

이 시점에서 모든 원격 브랜치 ( git branch 확인)가있는 원격 저장소의 전체 복사본을 얻을 수 있습니다. 원격 저장소에 자체 원격이있는 경우 --mirror 대신 --mirror 를 사용할 수 있습니다.




"git clone"만 사용하여 모든 브랜치를 가져와야합니다.

git clone <your_http_url>

master 브랜치 만 보이더라도 "git branch -a"를 사용하여 모든 브랜치를 볼 수 있습니다.

git branch -a

그리고 이미 가지고있는 지점으로 전환 할 수 있습니다.

git checkout <your_branch_name>

"git clone"후에 원격 저장소에 연결할 필요가 없다는 점에 대해 걱정하지 마십시오. wifi를 닫을 때 "git branch -a"및 "git checkout"이 성공적으로 실행될 수 있습니다. 따라서 "복제본"을 사용하면 이미 원격 저장소의 모든 분기가 복사 된 것으로 증명됩니다. 그 후, 당신은 원격 저장소가 필요하지 않습니다, 당신의 지역은 이미 모든 지점의 코드가 있습니다.




내 도구 git_remote_branch 사용하십시오 (Ruby가 컴퓨터에 설치되어 있어야합니다). 원격 지점 조작을 쉽게 처리 할 수 ​​있도록 특별히 제작되었습니다.

사용자를 대신하여 작업을 수행 할 때마다 콘솔에서 빨간색으로 인쇄합니다. 시간이 지남에 따라 마침내 두뇌에 집중하게됩니다.

grb에서 사용자를 대신하여 명령을 실행하지 않으려면 '설명'기능 만 사용하십시오. 명령은 실행되지 않고 콘솔에 인쇄됩니다.

마지막으로, 모든 명령에는 별명이있어 암기를 쉽게합니다.

이것은 git_remote_branch ;-)

grb 도움말을 실행할 때 도움이됩니다.

git_remote_branch version 0.2.6

  Usage:

  grb create branch_name [origin_server] 

  grb publish branch_name [origin_server] 

  grb rename branch_name [origin_server] 

  grb delete branch_name [origin_server] 

  grb track branch_name [origin_server] 



  Notes:
  - If origin_server is not specified, the name 'origin' is assumed 
    (git's default)
  - The rename functionality renames the current branch

  The explain meta-command: you can also prepend any command with the 
keyword 'explain'. Instead of executing the command, git_remote_branch 
will simply output the list of commands you need to run to accomplish 
that goal.

  Example: 
    grb explain create
    grb explain create my_branch github

  All commands also have aliases:
  create: create, new
  delete: delete, destroy, kill, remove, rm
  publish: publish, remotize
  rename: rename, rn, mv, move
  track: track, follow, grab, fetch



질문에 대한 답변 중 하나를 살펴보면 단축 할 수있는 것으로 나타났습니다.

for branch in  `git branch -r | grep -v 'HEAD\|master'`; do  
 git branch --track ${branch##*/} $branch;
done

그러나 원격 지점 중 하나가 예를 들어 admin_master로 명명 된 경우 다운로드되지 않습니다!

원래 생각에 대한 bigfish 덕분에




#!/bin/bash
for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master `; do
   git branch --track ${branch#remotes/origin/} $branch
done

이 코드는 모든 원격 지점 코드를 로컬 저장소로 가져옵니다.




git clone & git fetch를 사용하면 로컬 저장소에서 복제 할 수 없습니다. 많은 브랜치 / 태그가 유지됩니다.

모든 가지와 꼬리표를 가진 복제물을 얻으려면.

git clone --mirror git://example.com/myproject myproject-local-bare-repo.git

모든 브랜치와 태그뿐만 아니라 작업 카피를 가진 복제본을 얻으려면 :

git clone --mirror git://example.com/myproject myproject/.git
cd myproject
git config --unset core.bare
git config receive.denyCurrentBranch updateInstead
git checkout master



필자는이 작은 Powershell 함수를 작성하여 원격으로 원점에있는 모든 git 브랜치를 체크 아웃 할 수있게했습니다.

Function git-GetAllRemoteBranches {
     iex "git branch -r"                       <# get all remote branches #> `
     | % { $_ -Match "origin\/(?'name'\S+)" }  <# select only names of the branches #> `
     | % { Out-Null; $matches['name'] }        <# write does names #>
}


Function git-CheckoutAllBranches {
    git-GetAllRemoteBranches `
        | % { iex "git checkout $_" }          <# execute ' git checkout <branch>' #>
}

더 많은 자식 기능은 나의 자식 설정 repo 에서 찾을 수 있습니다.




Git은 (지정되지 않은 경우) git ls-refs하나 이상의 다른 리포지토리에서 모든 분기 및 / 또는 태그 (참조 :, 참조)를 가져와 해당 기록을 완료하는 데 필요한 객체와 함께 가져옵니다. 즉, 이미 다운로드 한 객체가 도달 할 수있는 객체를 가져옵니다. 참조 : 실제로 무엇을 git fetch합니까?

때로는 현재의 것과 직접적으로 연결되어 있지 않은 가지들 / 꼬리표를 가지고있을 수 있습니다. 그래서 git pull --all/ git fetch --all그 경우에는 도움이되지 않지만, 다음과 같이 목록을 작성할 수 있습니다 :

git ls-remote -h -t origin

참조 이름을 알면 수동으로 가져올 수 있습니다.

따라서 모두 가져 오려면 다음을 시도하십시오.

git fetch origin --depth=10000 $(git ls-remote -h -t origin)

--depth=10000매개 변수는 저장소를 얕게 만든 경우 도움이 될 수 있습니다.

그런 다음 모든 지점을 다시 확인하십시오.

git branch -avv

위의 방법으로도 도움이되지 않는다면 잃어버린 브랜치를 수동으로 추적 목록에 추가해야합니다.

$ git remote -v show origin
...
  Remote branches:
    master      tracked

으로 git remote set-branches같은 :

git remote set-branches --add origin missing_branch

remotes/origin가져온 후에 표시 될 수 있습니다 .

$ git remote -v show origin
...
  Remote branches:
    missing_branch new (next fetch will store in remotes/origin)
$ git fetch
From github.com:Foo/Bar
 * [new branch]      missing_branch -> origin/missing_branch

문제 해결

마스터 브랜치 이외의 다른 것을 얻을 수 없다면 다음을 확인하십시오 :

  • 리모콘 ( git remote -v)을 다시 확인하십시오.
    • 그 유효성을 검사 git config branch.master.remote입니다 origin.
    • 다음 originURL을 통해 올바른 URL을 가리키는 지 확인 git remote show origin하십시오 (이 post 참조 ).



이 답변 중 어느 것도 사용자를 제외하고는 잘리지 않습니다.

한 서버 / 시스템에서 다른 서버 / 시스템으로 리포를 이동하는 데 문제가있었습니다. 내가 repo를 복제 할 때 마스터에 대한 로컬 브랜치 만 생성 했으므로 새 리모컨으로 밀어 넣을 때 마스터 브랜치 만 푸시되었습니다.

그래서 저는이 두 가지 방법이 매우 유용하다는 것을 알았습니다. 희망 그들은 다른 사람을 도웁니다.

방법 1 :

git clone --mirror OLD_REPO_URL
cd new-cloned-project
mkdir .git
mv * .git
git config --local --bool core.bare false
git reset --hard HEAD
git remote add newrepo NEW_REPO_URL
git push --all newrepo
git push --tags newrepo

방법 2 :

git config --global alias.clone-branches '! git branch -a | sed -n "/\/HEAD /d; /\/master$/d; /remotes/p;" | xargs -L1 git checkout -t'
git clone OLD_REPO_URL
cd new-cloned-project
git clone-branches
git remote add newrepo NEW_REPO_URL
git push --all newrepo
git push --tags newrepo



여기서 2 센트를 추가 할 것입니다. 왜냐하면 제가 로컬에서 삭제 한 원격 브랜치를 끌어 내려는 방법을 알아 내려고했기 때문입니다. 오리진은 내 것이 아니었고 모든 것을 다시 복제하는 번거 로움을 겪고 싶지 않았습니다.

이것은 나를 위해 일했다 :

로컬로 브랜치를 재 작성해야한다고 가정하십시오.

git checkout -b recreated-branch-name
git branch -a (to list remote branches)
git rebase remotes/remote-origin/recreated-branch-name

그래서 gituser / master에서 sjp로 분기 한 다음 sjp / mynewbranch로 분기하면 다음과 같이 보입니다.

$ git checkout -b mynewbranch
$ git branch -a
  master
  remotes/sjp/master
  remotes/sjp/mynewbranch
$ git fetch (habit to always do before)
$ git rebase remotes/sjp/mynewbranch



Related