2011-04-06 7 views
6

복제 된 저장소와 브랜치를 사용하는 힘내에게 몇 가지 문제점이 있습니다.이 문제에 대한 답변을 찾을 수 없다고합니다. 제가 설명 드리겠습니다 : 우리는 맨손으로 Git 저장소를 가지고 있습니다. 여기에서 우리는 모두 로컬 머신을 사용하고 SSH로 연결할 수 있습니다. 나는이처럼 내 USB 썸 드라이브에이의 복제를 만든 : 이것은 물론 내 엄지 드라이브에 작업 복사본과 로컬 복제를 나에게 제공Git은 후속 클론에서 모든 브랜치를 복제하지 않습니까?

git clone ssh://[email protected]//net/repos/netcube/patches.git 

. I의 이것에 cd 및 참조 다음이 클론의 일부 지점 :

cd patches 
git branch -a 
* master 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/master 
    remotes/origin/stable 

지금까지 너무 좋아, 내 엄지 손가락에 저장소가 안정 지점이 끊어 내 노트북에 다른 시간 드라이브 복제 그러나합니다. 참조 : 복제 또는이 복제 한 후, 아무것도 patches2 저장소에 안정적인 지점을 제공하지 git fetch 때 나는 몇 가지 옵션을 시도

cd .. 
git clone patches patches2 

cd patches2 

git branch -a 
* master 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/master 

. 나는 여기에 이해가 부족하고 단순히 잘못된 방법으로 사용한다고 가정한다. 누군가 나를 사용 및/또는 이해에서의 나의 오류로 지적 해 주시겠습니까?

+1

의견 덕분에 오해가 무엇인지 알게되었습니다. 내가 원했던 것은 마스터 리포지토리의 내용으로 _ 리포지토리를 옮기는 것이었지만, Git은 추적 브랜치가 무엇인지에 따라 선택적 복제를 수행합니다. 'git clone --mirror'로 중간 저장소를 얻었는데, 예상 한대로 사용할 수 있습니다. – LeSpocky

+0

더 간단하게 말하면'git clone '(특별한 옵션이없는)은 소스 저장소의 원격 추적 브랜치를 복사하지 않고 소스의 로컬 브랜치 ('.git/refs/heads /'아래의 브랜치 .git/refs/remotes/ /'. –

답변

3

How to clone all remote branches in Git?

당신은 당신이 실제로는 복제에 포함하려는 경우 원격 지사를 기반으로 로컬 브랜치를 만들 필요가 참조하십시오. 그러나 원격 브랜치에서 작업하지 않으므로 브랜치에서 작업을 시작하자마자 로컬 브랜치를 작성하게됩니다. 그리고 그 전에는 복제본에서 실제로 필요하지 않습니다. 원격에서 언제든지 가져올 수 있기 때문입니다.

그러나 노트북에 네트워크가 연결되어 있지 않으면 원하는 모든 원격 지점에 대해 로컬 분기를 만들어 로컬 저장소를 복제 할 때 복제되도록 만들어야합니다.

그러나 네트워크에 연결되어있는 경우 git remote add origin2 ssh://[email protected]//net/repos/netcube/patches.git을 입력 한 다음 git fetch origin2을 사용하여 origin2을 더 의미있는 이름으로 바꾸십시오.

+0

에서 노트북과 네트워크가 연결되어 있다면 어쨌든 전송 저장소 (패치)가 필요하지 않습니다. 무엇이 혼란 스럽습니까? 저기, 전송 저장소의 첫 번째 복제본은 마스터 저장소의 _ 전체 _ 변경 사항을 가진 복제본 인 것처럼 보이지만 두 번째 복제본은»로컬 브랜치«레이블이 없기 때문에 일부 변경 집합을 삭제합니다. – LeSpocky

+0

아니요, 첫 번째 클론은 소스를 원격 (* origin *)으로 추가하기 때문에 브랜치를 가져옵니다. 그러나 리모콘은 복제되지 않으므로 스틱의 저장소에는이 리모컨이나 브래지어가 없습니다. nches. – ThiefMaster

+0

이것은 내가 지금 한 일입니다. 전송 저장소에 추적 분기를 만들면 이후 복제에서도 복제 분기를 복제 할 수 있습니다. 이렇게하려면 약간의 수동 작업이 필요하지만 적절한 해결책 인 것 같습니다.나는 원래의 repo에 연결할 수 없기 때문에 – LeSpocky

2

"origin"은 repo를 복제 한 장소에 지정된 기본 이름입니다.이 이름은 원격으로 자동 추가됩니다 (참고 : 원격은 "현재 repo가 ​​아닙니다"- 원격은 동일한 컴퓨터에있을 수 있음).).

patches에서 "원산지"는 골륨에 원래의 레포를 나타냅니다.

patches2에서 "출처"는 patches을 의미합니다.

원격 추적 참조 (remotes/으로 시작하는 원격 추적 참조)는 실제로 로컬 브랜치가 아니며 브랜치가 원격에 마지막으로 알려 졌던 지점에 대한 포인터입니다. 따라서 patches에는 원래 repo에 대한 원격 추적 참조가 있지만 patches2에 로컬 master 분기에 대한 원격 추적 참조가 patches인데, 그 이유는 patches2의 원점을 가리키고 있기 때문입니다.

복제 후 을 사용하여 patches2에 원래 리모콘을 추가하거나 원래의 저장소에서 다시 복제 할 수 있습니다 (patches)[email protected] 외에도

+0

나는, 원래의 repo에서 _patches2_을 복제 할 수 없습니다. 저장소 _patches_는 단지 어쨌든 작동하지 않는»전송 저장소입니다. – LeSpocky

+0

@LeSpocky : 나는 당신이 놓치고있는 점이 patches2''에서 "원격"에 들어있는 지점이 그 origin'이 @처럼을 의미한다 무엇'이후 (patches''에서 "로컬"모든 사람 있다고 생각 앰버는 말했다). 'patches'에서'stable' 브랜치를 (로컬로) 체크 아웃하지 않았다면,'patches2'에 대한 리모트리스트에 없을 것입니다. – nickgrim

+0

문제는 : 나는 _patches2_에서 _all_ 가지의 _all_ 변경 집합을 보여 TortoiseGit을 사용하는 경우는 내가, 내가 '같으면 필요 체인지 알 것이다 그래서 경우에도, _patches_의 _stable_ 지점에 속하는 변경 집합이 _patches2_에 복제되지 않습니다 보인다 두 번째 repo (패치 2)에서 가져 오지 마십시오. 첫 번째 repo (패치)에서 복제되지 않았기 때문입니다. 그러나 _all_ changesets가있는 전체 저장소가 복제 된 것일뿐 아니라 일부만 복제 된 것입니다. – LeSpocky

12

:

나는 모든 (로컬 원격 &) 브랜치 심판 및 태그

추가를 업데이트

git clone --mirror 

또는

git push --mirror 

에 좋아 정보n으로 --mirror는 실제로 repo를 그대로 복제하므로 대상의 변경 사항을 덮어 씁니다. 소스에 존재하지 않는 브랜치는 무조건 정리됩니다.

본질적으로, 그 차이가 영향을 가지 로컬 브랜치뿐만 아니라 '원격'심판 수 있다는되는 원격 작업과 '자식 원격 업데이트 --prune을'하 같다 [1]

@LeSpocky (및 기타?)

변경 사항이 사라지면 병합 문제가 발생하지 않으므로 쉽습니다.

--mirror은 실제 개념의 이름을 따서 명명되었으므로 대상의 차이점을 보완하도록 설계되었습니다. 타겟이 베어 메어가 아니고 로컬 변경 사항을 커밋 한 경우 대상의 로컬 브랜치 (git log -g, git reflog)의 reflog를 통해 언제든지 다시 가져올 수 있습니다.

일반 안전 조치로 have a hook to 'git stash save' in the target 수 있습니다.

--mirror는 미러으로 설계되었으며이 질문은 모든 브랜치를 맨손으로 복제하는 방법에 관한 것이 었습니다. :)

[1] (원격 참조가 복사되지 않지만 원하는 경우 밀어 넣기 대상의 .git/config에서 .git/config로 수동 복사)

+0

나는 _patches2_에 후속 복제가 안정 지점을 가지고 _patches_ 내 전송 저장소를 작성하기 위해'--mirror' 옵션을 사용하는 경우. 나는 이것이 내가 성취하고자하는 것에 필요한 선택이다. 당신이 그것에서 복제 한 다음에 누르면 다른 사람이 당신이 사이에 미러링하고있는 저장소를 변경하는 경우 --mirror' 부작용이있을 수'있다는 – LeSpocky

+1

주 -'--mirror' 설정하는 것은 그들은 항상 리모콘을 덮어 쓰도록 밀어 새로운 변경 사항과 상관없이 – Amber

+0

@Amber : – sehe

0
$ git remote update 
$ git pull --all 
관련 문제