2012-04-27 3 views
6

제 일은 우리의 저장소를 public github에서 우리의 로컬 네트에있는 github의 개인 인스턴스로 이동시키는 것입니다.Github에서 개인 github로 "authoritative"git 저장소를 전송하십시오.

내 생각의 전환 시간 동안

git clone --bare <github-repo-url> 
git push --mirror <local-github-url> 

로 이동하는 것입니다, 나는 아빠의 GitHub의에 저장소에서 거울 업데이트 자체를 할 수 있어야한다. (또는 내가 UI에서 업데이트를 수행하는 명령을 찾지 못했습니다.)

그러면 "권한있는"github 저장소가 삭제되고 미러가 신뢰할 수있게됩니다.

하지만 어떻게됩니까? 각 개발자가 .git/config에서 "origin"에 대한 url을 변경해야합니까?

미러가 clone-parent로부터의 업데이트가 아닌 푸시를 수락합니까?

+0

추가 정보 : "local-github-url"은 진정한 기스 탑입니다. 개인용 Github Enterprise 서비스입니다. 사적인 Github에 대한 쉘 또는 crontab 액세스 권한이 없습니다. – Mojo

답변

0

가장 간단한 프로세스는 개발자가 새로운 (개인) repo를 복제하고 거기에서 계속 진행하는 것입니다.
이전 repo에서 진행중인 보류중인 변경 사항이있는 경우 해당 컨테이너를 패치으로 내 보낸 다음 새로운 로컬 복제 된 Repo에 적용한 다음 다시 새로운 origin으로 푸시 할 수 있습니다. (What is the difference between 'git format-patch' and 'git diff'?git format-patch man 참조)

5

프로세스가 거의 완벽합니다. 유일한 것은 초기 클론에서 누락 된 --mirror 매개 변수입니다. 지금 올바른 REPO입니다 REPO 프로젝트에있는 모든 사람에게 명확하지 않을 것이기 때문에

# create the private repo 
ssh private-server 
mkdir -p /path/to/shared/repos 
git init --shared={whatever makes sense for your environment} /path/to/shared/repos/internalrepo.git 
exit 
# go to github.com and make the public repo readonly 
# create a local mirror 
git clone --bare --mirror $Github-URL github.git 
# now the local repo github.git contains all the stuff from the github repo 
cd github.git 
git push --mirror $Private-URL 
# Tell all developers to execute `git remote set-url origin $Private-URL` 
# Done 

나는, 변화 열어 github에의 REPO을 떠나지 않을 것입니다.

당신은 또한 사용할 수 있습니다 당신은 서버 REPO (cron 작업처럼) 정기적으로 다음

ssh private-server 
cd /path/to/shared/repos/internalrepo.git 
git remote add --mirror github $Github-URL 

git fetch github # get new commits from github 
git remote prune github # drop branches, which are now deleted in the github repo 

편집에 실행하면 당신은 아직도 그것을 할 수 있습니다 교환을 할 로컬 미러. 그러나 git는 삭제 된 브랜치를 어떻게 처리 할 지 결정할 수 없으며 분기 된 브랜치를 어떻게 처리할지 결정할 수 없기 때문에 쉬운 자동화 된 프로세스가 없습니다. 소위 github-repo에서 정기적으로 물건을 가져오고, 내부 저장소에서 물건을 가져오고, 분기 기록을 해결하고,이 물건을 내부 저장소로 밀어 넣을 수있는 작업 저장소를 유지해야합니다.

+1

루디, 좋은 대답입니다! 그러나 그것은 개인 repo 내가 셸/crontab 가지고있는 컴퓨터에 있다고 가정합니다. 제 경우에는 개인 저장소가 방화벽 내부에있는 "Github Enterprise"인스턴스에 있습니다. git과 웹 사이트를 통하는 경우를 제외하고는 개인 저장소에 직접 액세스 할 수 없습니다. – Mojo

+0

나는 GHE를위한 해결책을 아직 보지 못했다. GHE 웹 사이트에 대한 일부 토론조차 삭제되었습니다. – Shane

관련 문제