将“权威”git存储库从Github转移到私有github

时间:2012-04-27 05:28:50

标签: git github

我的任务是将我们的存储库从公共github移动到我们本地网络上的github私有实例。

我的想法是用

移动它们
git clone --bare <github-repo-url>
git push --mirror <local-github-url>

在转换期间,我应该能够从daddy github上的存储库中更新镜像。 (或者我会吗?我没有在UI中找到执行更新的命令。)

然后我将删除“权威”github存储库,镜像将成为权威。

但这是怎么发生的?每个开发人员是否需要在.git / config中更改“origin”的URL?

镜像是否接受不是来自其clone-parent的更新的推送?

2 个答案:

答案 0 :(得分:5)

您的过程几近完美。唯一的问题是初始克隆上缺少--mirror参数。

# 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回购开放进行更改,因为项目中的每个人都不清楚哪个回购现在是正确的回购。如果你在server-repo上运行

,你仍然可以这样做
ssh private-server
cd /path/to/shared/repos/internalrepo.git
git remote add --mirror github $Github-URL

然后定期(比如在cron工作中)

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 :(得分:0)

最简单的过程是开发人员克隆新的(私人)仓库并从那里继续 如果他们在以前的仓库中有任何待处理的更改,他们可以将这些更改导出为补丁并将其应用于新的本地克隆仓库,然后再将其推回到新的origin。 (请参阅What is the difference between 'git format-patch' and 'git diff'?git format-patch man