2011-05-02 3 views
2

여기 내 설정 :베어 게토 레포에서 다른 케릭터로 당길 수 없습니다

호스트 서비스가있는 마스터 저장소가 하나 있습니다. 모든 코드는 여기서 끝나야합니다. 이것을 '마스터'라고 부르십시오.

권한 (호스트 된 서비스에 사용되는 SSH 키의 수를 제한하고자 함) 때문에 다른 repo를 가리키는 코딩을 처음 시작했기 때문에 VPS에 베어 저장소가 있습니다. 이것을 'VPS'라고 부르세요.

개발시 로컬에서 작업하고 VPS를 누르고 주기적으로 VPS에 로그인 한 다음 마스터로 푸시합니다.

문제는 내가 마스터로부터 복제하여 내 웹 사이트를 배포했다는 것입니다. 나는 약간의 변화를 만들어 그들을 마스터로 밀어 넣었다. 이제 VPS에서 git pull을 실행해야 마스터에서 최신 코드를 얻을 수 있습니다. 불행히도이 작업을 시도하면 git은 맨 처지 저장소로이 작업을 수행 할 수 없다고 알려줍니다. 상황을 좀 더 복잡하게 만들기 위해 나는 이것을 깨닫지 못했습니다. 그래서 새로운 코드를 개발에서 VPS로 밀어 넣었습니다. 그래서 VPS는 로그를 통해 일부 커밋을 놓치고 있습니다 (즉, 모든 코드에서 가장 최근의 커밋이 아닙니다).

어떻게 해결할 수 있습니까? VPS를 밀고 당길 수 있도록 설정하는 좋은 방법은 무엇입니까?

감사

- 편집 -

확인, 그래서 나는 마스터의 새로운 클론으로 VPS에서 마지막 3 커밋을 병합 할 수 있어야합니다. 이것을 어떻게 할 수 있으며 git에서 저장소를 어떻게 구성해야합니까?

+0

배포 된 웹 사이트 repo에서 마스터와 VPS를 모두 가져 와서 내용을 병합 한 다음 마스터/VPS로 푸시합니다. – Artefact2

+0

@ Artefact2 - 배포 된 사이트는 VPS가 아니라 마스터에만 액세스 할 수 있습니다. – John

답변

1

병합 (또는 병합을 포함 할 수있는 cherrypick)을 수행해야하는 경우, 맨손이 아닌 저장소에서해야합니다.

로컬 개발 컴퓨터에서 할 수 있습니다. 마스터와 VPS 리모트를 만들고, 양쪽에서 가져와 로컬 개발 마스터 브랜치에 병합하십시오. 그런 다음이 브랜치를 VPS로 밀어 넣은 다음 VPS에서 마스터로 푸시합니다. 이러한 푸시는 모두 빨리 감기하고 작동해야합니다 (단, 아무도 VPS 또는 마스터를 변경하지 않은 경우).이 경우 다시 병합합니다.

또 다른 방법은 VPS를 베어드에서 표준으로 변환하고 거기에 병합하는 것입니다. VPS (--bare 스위치없이 마스터에서 복제)를 재생성하여이 작업을 수행 할 수 있습니다. 같은 장소에서 다시 만들면 로컬 개발을위한 원격 설정이 여전히이를 가리킬 것입니다.

+0

두 번째 방법으로 일종의,하지만 그것은 결국 작동하지 않을 것이다 그래서 자식과 diff 및 패치를 사용하여 결국. 일부 메타 데이터를 잃어 버렸기 때문에 이상적이지는 않지만 세상 끝은 아닙니다. 감사. – John

3

git pullgit fetch + git merge에 해당합니다.

병합에는 분명히 작업 복사본이 필요합니다 (충돌이있을 경우 해결할 수 있도록).

두 개의 베어 리포지토리간에 물건을 옮길 때 아무 것도 병합하지 않으려 고합니다 (병합은 복제본의 작업 복사본에서 수행해야합니다). 그러면 브랜치의 새로운 가치를 얻고 싶을뿐입니다. git fetch을 직접 호출하십시오.

+0

흠 ...'git fetch'는 VPS에서 작동했지만, 이후에 VPS를 사용 했으므로 마스터에서 직접 변경 한 내용을 병합해야합니다. 나는 다른 곳에서 주인을 복제했다. 지난 3 번의 커밋을 VPS로이 새 레포로 체리 수 있습니까? 그게 내가해야 할 일이야 ... – John

1

문제점을 이해하지 못합니다. VPS와 마스터 모두에 액세스 할 수 있습니다. 당신은 양쪽으로 밀거나 당길 수 있습니다. 두 가지 모두에서 끌어 와서 변경 사항을 병합 한 다음 그 결과를 두 가지 모두에 적용 할 수 있습니다.

+0

나는 양쪽에서 끌어 당길 수 있다는 것을 몰랐다. 그래서 나는 proxy.git bare-repo에서 복제를했고, CD를 non-bare clone으로 만들고, master.git bare-repo (pull도 병합을 수행했다.)에서 pull 한 다음 proxy.git로 푸시한다. 마침내 나는 proxy.git으로 cd하고 master.git에 밀어 넣었다. <이제 두 개의 맨발의 저장소가 동기화되었습니다>. 그런 다음 master.git와 proxy.git에서 복제하여 테스트했습니다. 디렉토리가 'kompare'를 사용하는 콘텐츠와 비교되었고 내용이 동일 했습니까? 두 개의 리모컨을 설정하는 것이 훨씬 쉬울까요? –

관련 문제