【发布时间】:2012-07-18 22:26:46
【问题描述】:
我想知道将我目前托管在 github 上的所有 git 存储库移动到基于 gitolite 的新 git 服务器的更好方法。
只是为了知道,我这样做的原因是采用 Redmine 来支持我们的项目管理流程。
【问题讨论】:
我想知道将我目前托管在 github 上的所有 git 存储库移动到基于 gitolite 的新 git 服务器的更好方法。
只是为了知道,我这样做的原因是采用 Redmine 来支持我们的项目管理流程。
【问题讨论】:
参考这个:http://gitolite.com/gitolite/basic-admin/#appendix-1-bringing-existing-repos-into-gitolite。怎么样:
git clone --mirror <github git repo path> 制作 github 存储库的镜像
【讨论】:
要将 GitHub 存储库镜像到 Gitolite,首先在 Gitolite 上创建一个新存储库(使用 gitolite-admin 存储库 - 我假设 Gitolite 管理员知道如何执行此操作),但这里有一个示例配置条目:
repo github/<gh-user>/<gh-repo>
desc = "Repository description [https://github.com/<gh-user>/<gh-repo>]"
owner = "My Name"
category = "GitHub"
RW+ = my_key
<gh-user> 是 GitHub 用户,<gh-repo> 是被镜像的 GitHub 存储库。此示例将镜像放置在 GitHub 和用户子目录中,但您可以使用任何适合的 repo 路径。
然后,从可以访问 GitHub 和 Gitolite 的任何地方:
$ git clone --mirror https://github.com/<gh-user>/<gh-repo>
$ cd <gh-repo>.git
$ git push --mirror gitolite git@git:github/<gh-user>/<gh-repo>
$ cd ..
$ rm -rf <gh-repo>.git
其中git@git 是用于连接到 Gitolite 的 SSH 用户和主机名。本地克隆是临时的,之后会被删除。
OP 只询问了移动存储库的问题,在这种情况下他可能会停在这里。但是,如果希望在 GitHub 上托管一个 repo 的本地镜像并定期同步本地镜像,那么这里有一种方法可以做到这一点。
要将 Gitolite 镜像与 GitHub 同步,请以 Gitolite 管理员 (git) 用户身份登录 Gitolite 服务器并执行以下配置:
$ cd ~git/repositories/github/<gh-user>/<gh-repo>
$ git remote add origin https://github.com/<gh-user>/<gh-repo>
$ git config remote.origin.fetch "+*:*"
命令中的参数解释清楚here。
然后,同步 repo:
$ git fetch --prune
可以通过cron 作业自动获取。
【讨论】:
也许您还想将标签带到新服务器。这可以通过
git push --tags
【讨论】:
在 gitolite-admin/conf/gitolite.conf 中添加新的 repo
repo my-new-repo
RW+ = your-user
添加、提交并将更改推送到 gitolite-admin
git add conf/gitolite.conf
git commit -m "Added my-new-repo"
git push origin
克隆您的 github 存储库并检查所有存在的分支
git clone github.com:/USERNAME/YOUR_REPO.git
cd YOUR_REPO
for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master`; do git branch --track ${branch##*/} $branch; done
移除 github 遥控器,并添加您的 gitolite 遥控器:
git remote rm origin
git remote add origin YOURSERVER:my-new-repo.git
将所有 refs 推送到 gitolite 管理的 repo 上:
git push --all origin
我在我的测试存储库中验证了这些步骤,并且所有 refs 似乎都传播到了新的存储库中。
更新: 就像 Seth 指出的那样,除了分支之外的任何其他 ref 都不会传播到新的 repo。我也觉得Mirror会是更好的选择。
【讨论】:
我能想到的最好的办法是拉一个本地副本,将源更改为新服务器,然后推送:
git pull --all
git remote rm origin
git remote add origin <new repo address>
git push --all --repo=origin
【讨论】: