문제

나는 master 그리고 development 지점, 둘 다로 푸시됨 GitHub.나는 clone디, pull에드, 그리고 fetch에드, 하지만 난 여전히 그 외에는 아무것도 얻을 수 없습니다 master 다시 가지.

나는 분명한 것을 놓치고 있다고 확신하지만 설명서를 읽었지만 전혀 기쁨을 얻지 못했습니다.

도움이 되었습니까?

해결책

먼저 리모컨을 복제하세요. 힘내 저장소 및 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'

마지막 줄은 어떤 사람들을 던집니다."새 지점" - 응?이것이 실제로 의미하는 바는 분기가 인덱스에서 가져와 로컬로 생성된다는 것입니다.그만큼 이전의 줄은 실제로 원격 지점(일반적으로 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 &

다른 팁

한 번에 가져오려는 원격 분기가 많은 경우 다음을 수행하세요.

$ git pull --all

이제 원격 저장소를 방문하지 않고도 필요에 따라 모든 브랜치를 체크아웃할 수 있습니다.

이것 세게 때리다 스크립트가 나를 도와주었습니다.

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

master(원래 clone 명령에서 얻은 것임)를 제외한 모든 원격 분기에 대한 추적 분기를 생성합니다.내 생각엔 네가 아직 뭔가를 해야 할 것 같아

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로 이동합니다.

사용하여 --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

참조: 힘내 FAQ:원격으로 추적되는 모든 분기가 포함된 저장소를 어떻게 복제합니까?

멋진 "git checkout -b somebranch Origin/somebranch" 구문을 사용하지 않고도 쉽게 브랜치로 전환할 수 있습니다.당신은 할 수 있습니다 :

git checkout somebranch

Git은 자동으로 올바른 작업을 수행합니다.

$ 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 매뉴얼 페이지에서:

만약에u003Cbranch> 찾을 수 없지만 정확히 하나의 원격에 추적 브랜치가 있습니다 (호출u003Cremote> ) 일치하는 이름으로

$ git checkout -b <branch> --track <remote>/<branch>

에 관하여,

$ git checkout -b 실험적 기원/실험적

사용하여

$ git checkout -t origin/experimental

또는 더 장황하지만 기억하기 더 쉽습니다.

$ git checkout --track origin/experimental

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

수행 중인 가져오기는 모든 원격 분기를 가져와야 하지만 이에 대한 로컬 분기를 생성하지는 않습니다.gitk를 사용하는 경우 "remotes/origin/dev" 또는 이와 유사한 것으로 설명된 원격 분기가 표시되어야 합니다.

원격 브랜치를 기반으로 로컬 브랜치를 생성하려면 다음과 같이 하십시오:

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

다음과 같은 결과가 반환되어야 합니다.

Branch dev set up to track remote branch refs/remotes/origin/dev.
Switched to a new branch "dev"

이제 dev 브랜치에 있을 때 "git pull"은 로컬 dev를 원격 dev 브랜치와 동일한 지점으로 업데이트합니다.모든 브랜치를 가져오지만 현재 있는 브랜치만 트리 상단으로 끌어옵니다.

"git clone git://location"을 실행하면 모든 브랜치와 태그를 가져옵니다.

특정 원격 분기 위에서 작업하려면 원본 원격 분기라고 가정합니다.

git checkout -b branch origin/branchname

별칭을 사용하세요.기본 Git 한 줄짜리 코드는 없지만 다음과 같이 직접 정의할 수 있습니다.

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

왜 '마스터'만 표시되나요?

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 현지 지점을 보려면).

이는 너무 복잡하지 않으며 매우 간단하고 간단한 단계는 다음과 같습니다.

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 대신에 --bare 원격 저장소에 자체 리모컨이 있는 경우.

이렇게 하세요:

$ 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'는 모든 것, 심지어 브랜치까지 가져옵니다. 체크아웃만 하면 로컬 브랜치가 생성됩니다.

모든 브랜치를 얻으려면 "git clone"만 사용하면 됩니다.

git clone <your_http_url>

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

git branch -a

그리고 이미 가지고 있는 어떤 브랜치로도 전환할 수 있습니다.

git checkout <your_branch_name>

"git clone"을 수행한 후에는 원격 저장소에 연결할 필요가 없으므로 Wi-Fi를 닫을 때 "git Branch -a" 및 "git checkout"을 성공적으로 실행할 수 있다는 점에 대해 걱정하지 마세요.따라서 "git clone"을 수행하면 이미 원격 저장소의 모든 분기가 복사되었다는 것이 증명됩니다.그 후에는 원격 저장소가 필요하지 않으며 로컬에 이미 모든 지점의 코드가 있습니다.

git clone 전체 저장소를 복사해야 합니다.복제한 후 실행해 보세요. git branch -a.모든 지점을 나열해야 합니다.그런 다음 "master" 대신 "foo" 분기로 전환하려면 다음을 사용하세요. git checkout foo.

내 도구를 사용하세요 git_remote_branch (컴퓨터에 Ruby가 설치되어 있어야 합니다).원격 지점 조작을 매우 쉽게 만들기 위해 특별히 제작되었습니다.

사용자를 대신하여 작업을 수행할 때마다 콘솔에 빨간색으로 인쇄됩니다.시간이 지남에 따라 마침내 뇌에 달라붙습니다 :-)

grb가 사용자를 대신하여 명령을 실행하는 것을 원하지 않으면 'explain' 기능을 사용하십시오.명령이 실행되는 대신 콘솔에 인쇄됩니다.

마지막으로 모든 명령에는 별칭이 있어 기억하기가 더 쉽습니다.

참고로 이는 알파 소프트웨어 ;-)

grb help를 실행할 때 나타나는 도움말은 다음과 같습니다.

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

여기서 본 모든 답변은 유효하지만 저장소를 복제하고 모든 분기를 한 번에 가져오는 훨씬 더 깔끔한 방법이 있습니다.

리포지토리를 복제하면 브랜치의 모든 정보가 실제로 다운로드되지만 브랜치는 숨겨집니다.명령으로

$ 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. 세 번째 단계

현재 폴더 내부의 모든 항목을 가져와 로컬 시스템에 모든 분기를 생성하므로 이를 일반 저장소로 만듭니다.

$ git reset --hard

이제 "git Branch" 명령을 입력하면 모든 브랜치가 다운로드되는 것을 볼 수 있습니다.

이는 모든 브랜치가 포함된 git 저장소를 동시에 복제할 수 있는 빠른 방법이지만 모든 단일 프로젝트에 대해 이런 방식으로 수행하고 싶은 작업은 아닙니다.

질문에 대한 답변 중 하나를 살펴보면 다음과 같이 단축할 수 있다는 것을 알았습니다.

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

그러나 원격 지점 중 하나의 이름이 예를 들어 다음과 같은 경우 조심하십시오.admin_master 다운로드가 되지 않습니다!

독창적인 아이디어를 주신 bigfish에게 감사드립니다.

로컬 저장소에서의 복제는 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

좋아요, 저장소를 복제하면 거기에 모든 분기가 있습니다.

그냥 하면 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

#!/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 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. master를 확인하세요. (현재 있는 브랜치를 삭제할 수 있도록)
  2. 원격 선택 결제하려면 (당신이 가지고 있는 리모컨으로 변경하세요)
  3. 모든 지점을 순환 마스터와 HEAD를 제외한 리모콘의
    1. 삭제 로컬 지점(강제 업데이트된 지점을 확인할 수 있도록)
    2. 확인해 보세요 원격에서 분기
  4. 마스터를 확인해 보세요(그러니까)

기반 답변 ~의 VonC.

나도 똑같은 일을 해야 했어요.여기 나의 루비 스크립트.

#!/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]

이렇게 작게 썼어요 파워셸 Origin Remote에 있는 모든 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>' #>
}

더 많은 Git 기능은 다음에서 찾을 수 있습니다. 내 자식 설정 저장소

Git은 일반적으로 (지정되지 않은 경우) 모든 브랜치 및/또는 태그를 가져옵니다(refs, 참조: 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

문제 해결

그래도 master 브랜치 외에는 아무것도 얻을 수 없다면 다음을 확인하세요.

  • 리모컨을 다시 확인하세요(git remote -v), 예를 들어
    • 검증 git config branch.master.remote ~이다 origin.
    • 다음 사항을 확인하세요. origin 다음을 통해 올바른 URL을 가리킵니다. git remote show origin (이것 좀 봐 우편).

사용자가 올바른 길을 가고 있지 않다는 점을 제외하면 이러한 답변 중 어느 것도 잘리지 않습니다.

한 서버/시스템에서 다른 서버/시스템으로 저장소를 이동하는 데 문제가 있었습니다.리포지토리를 복제했을 때 마스터에 대한 로컬 브랜치만 생성되었으므로 새 원격으로 푸시하면 마스터 브랜치만 푸시되었습니다.

그래서 저는 이 두 가지 방법이 매우 유용하다고 생각했습니다.그들이 다른 사람을 돕기를 바랍니다.

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

기억할 수 있는 명령을 사용하세요.

저는 Atlassian의 리포지토리 호스팅 서비스인 Bitbucket을 사용하고 있습니다.그래서 나는 그들의 문서를 따르려고 노력합니다.그리고 그것은 나에게 완벽하게 작동합니다.다음과 같은 쉽고 짧은 명령을 사용하여 원격 지점을 체크아웃할 수 있습니다.

먼저 저장소를 복제한 다음 대상 폴더로 변경하세요.그리고 마지막으로 가져오기 및 체크아웃은 다음과 같습니다.

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

그게 다야.좀 더 실제적인 예는 다음과 같습니다.

git clone https://username@bitbucket.org/team/repository.git project_folder
cd project_folder
git fetch && git checkout develop

문서에서 명령에 대한 자세한 정보를 찾을 수 있습니다.복제 명령, 가져오기 명령, 결제 명령

2017년 초 기준으로 답변은 이 댓글에 공장:

git fetch <origin-name> <branch-name> 당신을 위해 지점을 내려줍니다.한 번에 모든 분기를 가져오지는 않지만 이 분기별로 단독으로 실행할 수 있습니다.

다음은 모든 원격 브랜치에 대한 로컬 브랜치를 만드는 또 다른 짧은 1 라이너 명령입니다.

(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

git clone --mirror 원본 저장소에서는 이에 적합합니다.

git clone --mirror /path/to/original.git
git remote set-url origin /path/to/new-repo.git
git push -u origin
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top