it-swarm-ko.tech

Git에서 모든 원격 브랜치를 복제하는 방법?

나는 masterdevelopment 브랜치를 가지고 있는데, 모두 GitHub . 나는 cloned, pulled 및 fetched을 가지고 있지만 master 브랜치 이외의 것을 얻을 수 없다.

명백한 것이 빠진 것이 틀림 없습니다. 그러나 설명서를 읽었으며 전혀 기쁨을 얻지 못합니다.

3819
Peter Coulton

먼저 원격 Git 저장소와 cd 를 복제하십시오 :

$ git clone git://example.com/myproject
$ cd myproject

다음으로 저장소의 로컬 분기를 살펴보십시오.

$ git branch
* master

그러나 저장소에 다른 브랜치가 숨어 있습니다! -a 플래그를 사용하여 다음을 볼 수 있습니다.

$ git branch -a
* master
  remotes/Origin/HEAD
  remotes/Origin/master
  remotes/Origin/v1.0-stable
  remotes/Origin/experimental

업스트림 지점을 신속하게 살펴보고 싶다면 직접 체크 아웃 할 수 있습니다.

$ git checkout Origin/experimental

그러나 해당 지점에서 작업하려면 로컬 추적 분기를 만들어야합니다.이 지점은 다음을 통해 자동으로 수행됩니다.

$ git checkout experimental

너는 볼거야.

Branch experimental set up to track remote branch experimental from Origin.
Switched to a new branch 'experimental'

그 마지막 줄은 어떤 사람들을 던졌습니다 : "새로운 지점"- 응? 그것이 실제로 의미하는 바는 그 지점이 색인에서 가져와 당신을 위해 국지적으로 만들어 졌다는 것입니다. previous line은 실제로 브랜치가 원격 브랜치를 추적하도록 설정되어 있음을 알려주며 더 많은 정보를 제공합니다. 이는 일반적으로 Origin/branch_name 브랜치를 의미합니다 

자, 당신이 당신의 지방 지점을 보면, 이것은 당신이 볼 것입니다 :

$ git branch
* experimental
  master

실제로 git remote를 사용하여 둘 이상의 원격 저장소를 추적 할 수 있습니다.

$ git remote add win32 git://example.com/users/joe/myproject-win32-port
$ git branch -a
* master
  remotes/Origin/HEAD
  remotes/Origin/master
  remotes/Origin/v1.0-stable
  remotes/Origin/experimental
  remotes/win32/master
  remotes/win32/new-widgets

이 시점에서 상황은 상당히 미쳐 가고 있습니다. 따라서 gitk을 실행하여 진행 상황을 확인하십시오.

$ gitk --all &
4191
emk

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

$ git pull --all

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

763
Gabe Kopley

Bash 스크립트는 나를 도왔습니다 :

#!/bin/bash
for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|master)$'); do
    git branch --track "${branch##*/}" "$branch"
done

마스터 (원래 복제 명령에서 얻은 것)를 제외한 모든 원격 브랜치에 대한 추적 분기를 작성합니다. 아직도 네가해야할 일이있을 것 같아. 

git fetch --all
git pull --all

확인하기.

하나의 라이너 : git branch -a | grep -v HEAD | Perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | csh -xfs 평소와 같이 : 우리가 알고있는 것처럼 rm -rf 유니버스를 복사하기 전에 설정을 테스트하십시오 

한 줄짜리 크레딧은 사용자 cfi로 이동

388
bigfish

--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 : 원격으로 추적되는 모든 지점을 가진 저장소를 어떻게 복제합니까?

300
Dave

멋진 "git checkout -b somebranch Origin/somebranch"구문을 사용하지 않고도 쉽게 분기로 전환 할 수 있습니다. 할 수있는 일은 다음과 같습니다.

git checkout somebranch

힘내는 자동으로 옳은 일을 할 것이다.

$ git checkout somebranch
Branch somebranch set up to track remote branch somebranch from Origin.
Switched to a new branch 'somebranch'

Git은 같은 이름을 가진 브랜치가 정확히 하나의 리모트에 존재 하는지를 체크 할 것이고, 존재한다면, 브랜치가 원격 브랜치라고 명시 적으로 지정한 것과 같은 방식으로 그것을 추적 할 것입니다. Git 1.8.2.1의 git-checkout 맨 페이지에서 :

<branch>가 발견되지 않았지만 정확히 하나의 리모컨 (<remote>)과 일치하는 이름으로 추적 브랜치가 존재하면 와 같이 취급됩니다.

$ git checkout -b <branch> --track <remote>/<branch>
208
Nikos C.

에 관해서,

$ git checkout -b 실험 원점/실험군

~을 사용하여

$ git checkout -t Origin/experimental

또는보다 장황하지만 기억하기 쉽도록

$ git checkout --track Origin/experimental

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

90
murphytalk

가져 오는 작업은 모든 원격 브랜치를 가져와야하지만 로컬 브랜치는 생성하지 않습니다. gitk를 사용한다면, 원격 브랜치가 "remotes/Origin/dev"또는 이와 유사한 것으로 표시되어야합니다.

원격 분기를 기반으로 로컬 분기를 만들려면 다음과 같이하십시오.

git checkout -b dev refs/remotes/Origin/dev

다음과 같이 반환해야합니다.

원격 지점 조회/원격/Origin/dev를 추적하도록 설정된 지점 dev 
 새 지점 "dev"로 전환

이제 dev 브랜치에있을 때 "git pull"은 로컬 dev를 원격 dev 브랜치와 같은 포인트로 업데이트합니다. 모든 브랜치를 가져 오지만 트리의 맨 위로 끌어 올 것입니다.

78
Luuk Paulussen

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

특정 원격 브랜치의 맨 위에서 작업하려면 Origin 원격이라고 가정합니다.

git checkout -b branch Origin/branchname
57
elmarco

별명을 사용하십시오. 네이티브 Git one-liners는 없지만,

git config --global alias.clone-branches '! git branch -a | sed -n "/\/HEAD /d; /\/master$/d; /remotes/p;" | xargs -L1 git checkout -t'

다음과 같이 사용하십시오.

git clone-branches
49
nobody

왜 "마스터"만 보이는가

git clone는 모든 원격 원격 브랜치를 다운로드하지만 파일이 새 리포지토리에 있어도 여전히 "원격"으로 간주합니다. 이에 대한 한 가지 예외가 있습니다. 복제 프로세스는 "master"라는 원격 지점에서 "master"라는 로컬 지점을 만듭니다. 기본적으로 git branch는 로컬 지점 만 표시하므로 "마스터"만 표시됩니다.

git branch -a은 모든 분기를 보여줍니다. 원격 분기 포함.


현지 지점을 얻는 방법

실제로 지점에서 작업하려면 "로컬"버전이 필요할 것입니다. 원격 브랜치에서 로컬 브랜치를 만들려면 (작업 디렉토리의 내용을 확인하지 않고 작업 디렉토리의 내용을 변경하지 않고)

git branch branchone Origin/branchone
git branch branchtwo Origin/branchtwo
git branch branchthree Origin/branchthree

이 예에서 branchone은 (는) Origin/branchone을 (를) 기반으로 만드는 로컬 지점의 이름입니다. 다른 이름으로 로컬 브랜치를 만들려면 다음을 수행하십시오.

git branch localbranchname Origin/branchone

로컬 브랜치를 만든 후에는 git branch로 볼 수 있습니다 (로컬 브랜치를 보려면 -a이 필요하지 않습니다).

48
Cerran

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

git fetch Origin 그러면 모든 원격 지점이 로컬로 이동합니다.

git branch -a 그러면 모든 원격 브랜치가 표시됩니다.

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

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

git branch

출력은 다음과 같습니다.

*your current branch 
some branch2
some branch3 

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

44
Sam

늦어지는 것이 좋지만, 최선의 방법은 다음과 같습니다.

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

이 시점에서 원격 저장소의 모든 복사본을 갖고 있으며 git branch로 확인하십시오. 원격 저장소에 자체 원격이있는 경우 --mirror 대신 --bare를 사용할 수 있습니다.

42
Jacob Fike

그냥 이렇게해라.

$ git clone git://example.com/myproject
$ cd myproject
$ git checkout branchxyz
Branch branchxyz set up to track remote branch branchxyz from Origin.
Switched to a new branch 'branchxyz'
$ git pull
Already up-to-date.
$ git branch
* branchxyz
  master
$ git branch -a
* branchxyz
  master
  remotes/Origin/HEAD -> Origin/master
  remotes/Origin/branchxyz
  remotes/Origin/branch123

'git clone git : //example.com/myprojectt'가 모든 것을 가져오고, 심지어 브랜치까지 체크 아웃하면, 로컬 브랜치가 생성됩니다.

38
rapher

모든 브랜치를 얻으려면 "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"이 성공적으로 실행될 수 있습니다. 그래서 "자식 복제"를하면 이미 원격 저장소의 모든 브랜치를 복사했음을 증명합니다. 그 후, 당신은 원격 저장소가 필요하지 않습니다, 당신의 지역은 이미 모든 지점의 코드를 가지고 있습니다. 

23
Haimei

git clone는 전체 저장소를 복사해야합니다. 복제를 시도한 다음 git branch -a를 실행하십시오. 모든 지점을 나열해야합니다. "master"대신 "foo"브랜치로 전환하려면 git checkout foo를 사용하십시오.

22
MattoxBeckman

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

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

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

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

이것은 알파 소프트웨어 ;-)입니다.

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

 git_remote_branch 버전 0.2.6 
 
 사용법 : 
 
 grb create branch_name [Origin_server] 
 
 grb publish branch_name [Origin_server] 
 
 grb 이름 바꾸기 branch_name [Origin_server] 
 
 grb delete branch_name [원본 서버] 
 
 grb track branch_name [ Origin_server] 
 
 
 
 Notes : 
 - Origin_server가 지정되지 않으면 'Origin'이라는 이름이 사용됩니다. 
 (git 's 기본값) 
 - 이름 바꾸기 기능은 현재 분기의 이름을 바꿉니다. 
 
 Explain 메타 명령 : 
 키워드 'explain'과 함께 모든 명령을 시작할 수 있습니다. 명령을 실행하는 대신 git_remote_branch 
는 그 목표를 달성하기 위해 실행해야하는 명령 목록을 출력합니다. 
 
 예 : 
 모든 명령에는 또한 별칭이있다 : 
 창조 : 창조하다, 새 
 삭제하다 : 삭제하다, 파괴하다. 이름 바꾸기 : 이름 바꾸기, rn, mv, 이동 
 트랙 : 트랙, 팔로우, 잡기, 가져 오기 
19
webmat

여기서 본 모든 대답은 유효하지만 저장소를 복제하고 모든 브랜치를 한 번에 가져 오는 훨씬 더 깨끗한 방법이 있습니다. 

저장소를 복제하면 실제로 분기의 모든 정보가 다운로드되지만 분기는 숨겨집니다. 명령으로

$ git branch -a

저장소의 모든 가지와 명령을 표시 할 수 있습니다.

$ git checkout -b branchname Origin/branchname

한 번에 하나씩 수동으로 다운로드 할 수 있습니다. 


그러나 많은 지사가있는 저장소를 복제하려는 경우 위의 모든 방법이 길고 지루한데 훨씬 복잡하고 빠른 방법으로 보여줄 것입니다. 이 작업을 수행하려면 세 가지 단계가 필요합니다.

  1. 첫 번째 단계

컴퓨터에 새 빈 폴더를 만들고 리포지토리에서 .git 폴더의 미러 복사본을 복제합니다.

$ cd ~/Desktop && mkdir my_repo_folder && cd my_repo_folder
$ git clone --mirror https://github.com/planetoftheweb/responsivebootstrap.git .git

my_repo_folder 폴더 내의 로컬 리포지토리가 여전히 비어 있습니다. 터미널에서 "ls -alt"명령으로 볼 수있는 숨겨진 .git 폴더가 있습니다.

  1. 두번째 단계

git 구성의 부울 값 "bare"를 false로 전환하여이 저장소를 빈 (베어) 저장소에서 일반 저장소로 전환하십시오.

$ git config --bool core.bare false
  1. 3 단계

현재 폴더 안에있는 모든 것을 가져 와서 로컬 컴퓨터의 모든 브랜치를 생성합니다. 따라서 이것은 정상적인 repo가됩니다. 

$ git reset --hard

이제 "git branch"명령을 입력하면 모든 브랜치가 다운로드되었음을 알 수 있습니다. 

이것은 모든 브랜치를 가진 git 저장소를 한 번에 복제 할 수있는 빠른 방법이지만 모든 단일 프로젝트에 대해 이렇게하는 것이 아닙니다. 

15
FedericoCapaldo

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

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

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

원래 아이디어에 대한 bigfish 덕분에

12
Tebe

OK, 레포를 복제하면 모든 지점이 있습니다 ...

git branch를 수행하면 숨겨진 것입니다 ...

따라서 모든 브랜치 이름을보고 싶다면 다음과 같이 --all 플래그를 추가하면됩니다.

git branch --all 또는 git branch -a

지회에 체크 아웃하면 필요한 모든 것을 얻을 수 있습니다.

그러나 복제 한 후 다른 누군가가 만든 지회지는 어떨까요?

이 경우 다음을 수행하십시오.

git fetch

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

동시에 가져오고 체크 아웃하려는 경우 다음을 수행 할 수 있습니다.

git fetch && git checkout your_branch_name

또한 내가 말한 것을 단순화하기 위해 아래 이미지를 만들었습니다.

 git branch --all to get all branches

12
Alireza

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
11
raisercostin
#!/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

이 코드는 모든 원격 분기 코드를 로컬 repo로 가져옵니다.

11
Albert.Qing

명령 줄에 복사 - 붙여 넣기 :

git checkout master ; remote=Origin ; for brname in `git branch -r | grep $remote | grep -v master | grep -v HEAD | awk '{gsub(/^[^\/]+\//,"",$1); print $1}'`; do git branch -D $brname ; git checkout -b $brname $remote/$brname ; done ; git checkout master

더 읽기 쉽게하려면 :

git checkout master ;
remote=Origin ;
for brname in `
    git branch -r | grep $remote | grep -v master | grep -v HEAD 
    | awk '{gsub(/^[^\/]+\//,"",$1); print $1}'
`; do
    git branch -D $brname ;
    git checkout -b $brname $remote/$brname ;
done ;
git checkout master


이것은 :

  1. 마스터 체크 아웃 (그래서 우리는 우리가 지회를 삭제할 수 있습니다)
  2. 체크 아웃 할 원격 선택 (가지고있는 리모컨으로 변경)
  3. 마스터와 HEAD 를 제외한 원격의 모든 브랜치를 반복합니다.
    1. 삭제 로컬 브랜치 (강제 업데이트 된 브랜치를 체크 아웃 할 수 있도록)
    2. 체크 아웃 원격 지점에서
  4. 체크 아웃 마스터 (그것을 위해서)

답변VonC 기준

10
ikaruss

필자는이 작은 Powershell functions을 작성하여 Origin의 원격 저장소에있는 모든 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에서 찾을 수 있습니다

8
gringo_dave

나는 똑같이해야했다. 여기에 Ruby 스크립트가 있습니다.

#!/usr/bin/env Ruby

local = []
remote = {}

# Prepare
%x[git reset --hard HEAD]
%x[git checkout master] # Makes sure that * is on master.
%x[git branch -a].each_line do |line|
  line.strip!
  if /Origin\//.match(line)
     remote[line.gsub(/Origin\//, '')] = line
   else
     local << line
   end
end
# Update 
remote.each_pair do |loc, rem|
  next if local.include?(loc)
  %x[git checkout --track -b #{loc} #{rem}]
end
%x[git fetch]
8
user43685

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

때로는 현재 연결되어 있지 않은 분기/태그가있을 수 있으므로 git pull --all/git fetch --all는이 경우 도움이되지 않지만 다음과 같이 나열 할 수 있습니다.

git ls-remote -h -t Origin

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

그래서 모두 가져 오기 , try :

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.remoteOrigin임을 확인하십시오.
    • 다음을 통해 Origin이 올바른 URL을 가리키고 있는지 확인하십시오 : git remote show Origin (이 post 참조).
6
kenorb

2017 년 초 현재 답변 이 의견에서 작동합니다.

git fetch <Origin-name> <branch-name>가 지점을 다운시킵니다. 이것이 모든 분기를 한 번에 가져 오는 것은 아니지만 분기별로이 분기를 개별적으로 실행할 수 있습니다.

6
ashes999

이 답변 중 아무도 사용자를 제외하고는 아무 것도하지 않습니다.

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

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

방법 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
6
Gaui

기억할 수있는 명령어를 사용하십시오.

Atlassian의 Repository Hosting Service 인 Bitbucket을 사용하고 있습니다. 그래서 나는 그들의 문서를 따르려고 노력한다. 그리고 그것은 저를 위해 완벽하게 작동합니다. 다음의 쉽고 간단한 명령을 사용하여 원격 지점을 체크 아웃 할 수 있습니다.

먼저 저장소를 복제 한 다음 대상 폴더로 변경하십시오. 마지막으로 중요한 것은 가져 오기 및 체크 아웃입니다.

git clone <repo> <destination_folder>
cd <destination_folder>
git fetch && git checkout <branch>

그게 전부 야. 여기 litte 더 현실적인 예 :

git clone https://[email protected]/team/repository.git project_folder
cd project_folder
git fetch && git checkout develop

명령에 대한 자세한 정보는 docs : 복제 명령 , 가져 오기 명령 , 체크 아웃 명령

6
Phil

다음은 모든 원격 브랜치에 대한 로컬 브랜치를 만드는 또 다른 짧은 한 줄짜리 명령입니다.

(git branch -r | sed -n '/->/!s#^  Origin/##p' && echo master) | xargs -L1 git checkout

로컬 분기 추적이 이미 작성된 경우에도 올바르게 작동합니다. 첫 번째 git clone 이후 나 나중에 언제든지 호출 할 수 있습니다.

복제 후에 master 브랜치를 체크 아웃 할 필요가 없다면 

git branch -r | sed -n '/->/!s#^  Origin/##p'| xargs -L1 git checkout
5
jofel

다음은 awk를 사용하는 답변입니다. 이 방법은 새로운 저장소에 사용하면 충분합니다.

git branch -r | awk -F/ '{ system("git checkout " $NF) }'

기존 브랜치는 단순히 체크 아웃되거나 이미 이미 선언되어 있지만 충돌을 피하기 위해 필터를 추가 할 수 있습니다.

또한 명시적인 git checkout -b <branch> -t <remote>/<branch> 명령을 호출하도록 수정할 수도 있습니다.

이 답변은 Nikos C.idea 를 따릅니다.


또는 대신 원격 브랜치를 지정할 수 있습니다. 이것은 murphytalkanswer 을 기반으로합니다.

git branch -r | awk '{ system("git checkout -t " $NF) }'

충돌시 치명적인 오류 메시지가 표시되지만 무해합니다.


두 명령 모두 별명을 지정할 수 있습니다.

nobody 's answer 를 참조로 사용하여 다음 명령을 사용하여 별칭을 만들 수 있습니다.

git config --global alias.clone-branches '! git branch -r | awk -F/ "{ system(\"git checkout \" \$NF) }"'
git config --global alias.clone-branches '! git branch -r | awk "{ system(\"git checkout -t \" \$NF) }"'

개인적으로 나는 track-all 또는 track-all-branches를 사용합니다.

4
konsolebox

원래 Repo의 git clone --mirror는이 작업에 적합합니다.

git clone --mirror /path/to/original.git
git remote set-url Origin /path/to/new-repo.git
git Push -u Origin
3
Bernd Jungblut

여기서 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
2
Camwyn

파티에 조금 늦었지 만, 이것이 트릭이라고 생각합니다.

mkdir YourRepo
cd YourRepo
git init --bare .git                       # create a bare repo
git remote add Origin REMOTE_URL           # add a remote
git fetch Origin refs/heads/*:refs/heads/* # fetch heads
git fetch Origin refs/tags/*:refs/tags/*   # fetch tags
git init                                   # reinit work tree
git checkout master                        # checkout a branch

이것이 바람직하지 않은 일을한다면, 나는 알고 싶습니다. 그러나, 지금까지, 이것은 나를 위해 작동합니다.

0
Andy

이 변형은 각 분기를 하나씩 체크 아웃하지 않고도 로컬로 사용할 수있는 모든 분기를 사용하여 원격 저장소를 복제합니다. 환상적인 스크립트는 필요하지 않습니다.

복제하려는 repo와 동일한 이름의 폴더를 만들고 cd를 입력하십시오.

mkdir somerepo
cd somerepo

이제이 명령을 실행하지만 실제 repo usersname/reponame을 사용하십시오. 

git clone --bare [email protected]:someuser/somerepo.git .git
git config --bool core.bare false
git reset --hard
git branch

Voiala! 거기에 모든 가지가 있습니다!

0
lacostenycoder

다음은 git 프로젝트의 모든 브랜치와 태그를 스냅 샷으로 별도의 폴더에 반입하기위한 bash 스크립트입니다. 

https://Gist.github.com/hfossli/7562257

어쩌면 무엇이 직접적으로 묻지 않았을 지 모르지만, 어떤 사람들은이 해결책을 찾기 위해 여기 올 수도 있습니다.

0
hfossli