2011-02-18 9 views
1

원격 저장소의 원격 분기를 가져오고 싶습니다.원격 원격 및 원격 원격 분기 가져 오기

따라서, 예를 들어,이 상황에서 -

$ cd alpha 
$ git remote 
beta 
$ git branch -a 
master 
remotes/alpha/master 
$ cd ../beta 
$ git remote 
gamma 
$ git branch -a 
master 
remotes/gamma/slave 

- 나는 beta을 통해 이동하여 alpha 저장소에 gammaslave 분기를 가져올 싶습니다. 이것은 alpha의 리모컨으로 gamma을 추가하고 새 분기의 refspec에 gamma/slave을 사용합니다. 로컬 추적 지점을 반드시 만들지는 않습니다. 또한이 예와 달리 beta 또는 gamma에 대한 파일 시스템 액세스가 반드시 필요한 것은 아닙니다.

이런 종류의 작업은 $ git clone --mirror으로 수행 할 수 있지만 이미 존재하는 리포에서 수행 할 수있는 방법이 있습니까?

+0

나는 같은 상황에 조금 있습니다. 업스트림에서 하나의 레포를 가져온 다음 로컬에서 동일한 레포를 복제했습니다. 업스트림 저장소가 크고 모바일 인터넷에 있기 때문에 업스트림에서 모든 지점을 가져오고 싶지 않습니다. "모든 원격 지점을 가져 오는 방법은 무엇입니까?" upvotes가 많이 있고, 간단한 대답은 일반적으로 일반적인 복제/가져 오기가 수행한다는 것입니다.하지만 "중앙 저장소"로 작업 할 때만 가능합니다. – tobixen

답변

0

기본값이 아닌 refspec을 설정하면 그 곳에서 나 빠지게됩니다.

  • 초기화 beta

    • 초기화 gamma

      $ (mkdir gamma; cd gamma; git init; touch README; git add README; 
          git commit -m 'Initialized slave.'; git branch -m slave; echo) 
      Initialized empty Git repository in /tmp/test-git/gamma/.git/ 
      [master (root-commit) 0cebd50] Initialized slave. 
      0 files changed, 0 insertions(+), 0 deletions(-) 
      create mode 100644 README 
      
      원격으로 gamma을 추가합니다 :

      예를 들어,이 설정을 고려

      $ (mkdir beta; cd beta; git init; touch README; git add README; 
          git commit -m 'Initialized master.'; 
          git remote add gamma ../gamma; git fetch gamma 
          echo; echo "In repo $(basename $PWD):"; git branch -a; echo) 
      Initialized empty Git repository in /tmp/test-git/beta/.git/ 
      [master (root-commit) f6512e1] Initialized master. 
      0 files changed, 0 insertions(+), 0 deletions(-) 
      create mode 100644 README 
      warning: no common commits 
      remote: Counting objects: 3, done. 
      remote: Total 3 (delta 0), reused 0 (delta 0) 
      Unpacking objects: 100% (3/3), done. 
      From ../gamma 
      * [new branch]  slave  -> gamma/slave 
      
      In repo beta: 
      * master 
          remotes/gamma/slave 
      
    • 복제 betaalpha를 만들기 위해 :

      $ git clone beta alpha 
      Initialized empty Git repository in /tmp/test-git/alpha/.git/ 
      $ cd alpha; git branch -a 
      * master 
          remotes/origin/HEAD -> origin/master 
          remotes/origin/master 
      

    지금 치열한 얻을 : 그래서`$의 자식이 가져 오는 일을

    # Avoid errors from pulling into active branch. 
    $ git checkout origin/master | head -3 # intentionally acquire severed HEAD 
    Note: checking out 'origin/master'. 
    
    You are in 'detached HEAD' state. You can look around, make experimental 
    $ git fetch origin '+refs/*:refs/*'  # pour steroids into open esophagus 
    From /tmp/test-git/beta 
    * [new branch]  gamma/slave -> gamma/slave 
    $ git branch -a 
    * (no branch) 
        master 
        remotes/gamma/slave 
        remotes/origin/HEAD -> origin/master 
        remotes/origin/master 
    $ git remote 
    origin 
    

    '+ 심판/: 심판을/'를 끌어 당길 것 지점 자체는 포함하지만 속한 리모컨을 구성하는 구성 항목은 업데이트하지 않습니다.

    흥미롭게도, remoteless 원격 지사에 대한 추적 지점을 설정하면 자신의 repo 추적을 시작하는 데 원인이됩니다

    $ git branch --track slave gamma/slave 
    Branch slave set up to track local ref refs/remotes/gamma/slave. 
    $ git config -l | grep '^remote\|^branch' 
    remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* 
    remote.origin.url=/tmp/test-git/beta 
    branch.master.remote=origin 
    branch.master.merge=refs/heads/master 
    branch.slave.remote=. 
    branch.slave.merge=refs/remotes/gamma/slave 
    

    을 나는이 정말 작동하지 않습니다 생각합니다.

    $ git checkout slave 
    Switched to branch 'slave' 
    $ git fetch 
    From . 
    * remote branch  gamma/slave -> FETCH_HEAD 
    $ git fetch 
    From . 
    * remote branch  gamma/slave -> FETCH_HEAD