我想知道将我目前托管在 github 上的所有 git 存储库移动到基于 gitolite 的新 git 服务器的更好方法。
只是为了知道,我这样做的原因是采用 Redmine 来支持我们的项目管理流程。
在 gitolite-admin/conf/gitolite.conf 中添加新的仓库
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 repo 并检查所有存在的分支
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
我验证了我的测试存储库中的步骤,并且所有参考似乎都传播到了新的存储库中。
更新:就像 Seth 指出的那样,除了分支之外的任何其他参考都不会传播到新的 repo。我也觉得镜子会是一个更好的选择。
参考这个: http: //gitolite.com/gitolite/basic-admin/#appendix-1-bringing-existing-repos-into-gitolite。怎么样:
git clone --mirror <github git repo path>
我能想到的最好的事情是拉一个本地副本,将源更改为新服务器,然后推送:
git pull --all
git remote rm origin
git remote add origin <new repo address>
git push --all --repo=origin
也许您还想将标签带到新服务器。这可以通过
git push --tags
要将 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 admin ( 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 "+*:*"
命令中的参数在这里解释清楚。
然后,同步 repo:
$ git fetch --prune
提取可以通过cron
作业自动化。