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


Answers

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

$ git pull --all

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

Question

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

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




I'm going to add my 2 cents here because I got here trying to find out how to pull down a remote branch I had deleted locally. Origin was not mine, and I didn't want to go through the hassle of re-cloning everything

이것은 나를 위해 일했다 :

assuming you need to recreate the branch locally:

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

So if I forked from gituser/master to sjp and then branched it to sjp/mynewbranch it would look like this:

$ 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



나는 똑같이해야했다. 여기 내 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]



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




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

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

git checkout -b branch origin/branchname



그냥 이렇게해라.

$ 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은 (지정되지 않은 경우) 히스토리를 완료하는 데 필요한 객체와 함께 하나 이상의 다른 리포지토리에서 모든 브랜치 및 / 또는 태그 (refs, git ls-refs 참조)를 가져옵니다. 즉, 이미 다운로드 한 객체가 도달 할 수있는 객체를 가져옵니다. See : git fetch 실제로하는 일은 무엇입니까?

Sometimes you may have branches/tags which aren't directly connected to the current one, so git pull --all / git fetch --all won't help in that case, but you can list them by:

git ls-remote -h -t origin

and fetch them manually by knowing the ref names.

So to fetch them all , try:

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

The --depth=10000 parameter may help if you've shallowed repository.

Then check all your branches again:

git branch -avv

If above won't help, you need to add missing branches manually to the tracked list (as they got lost somehow):

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

by git remote set-branches like:

git remote set-branches --add origin missing_branch

so it may appear under remotes/origin after fetch:

$ 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

Troubleshooting

If you still cannot get anything other than the master branch, check the followings:

  • Double check your remotes ( git remote -v ), eg
    • Validate that git config branch.master.remote is origin .
    • Check if origin points to the right URL via: git remote show origin (see this post ).



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

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

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

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

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

git branch

출력은 다음과 같습니다.

*your current branch 
some branch2
some branch3 

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




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

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

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

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

$ git reset --hard

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

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




None of these answers cut it, except user nobody is on the right track.

I was having trouble with moving a repo from one server/system to another. When I cloned the repo, it only created a local branch for master so when I pushed to the new remote, only master branch was pushed.

So I found these two methods VERY useful. Hope they help someone else.

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






내 도구 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



에 관해서,

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

~을 사용하여

$ git checkout -t origin/experimental

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

$ git checkout --track origin/experimental

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




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



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

These code will pull all remote branches code to local repo.




Related