我想知道将目前托管在github上的所有git存储库移动到基于gitolite的新git服务器的更好方法。
仅仅因为知道,我正在进行此转换的原因是采用Redmine来支持我们的项目管理流程。
答案 0 :(得分:6)
在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
将所有参考推送到由gitolite管理的仓库:
git push --all origin
我验证了我的测试存储库中的步骤,并且所有refs似乎都已传播到新的repo中。
更新:与Seth指出的一样,除分支之外的任何其他引用都不会传播到新的repo。我也觉得镜子会是更好的选择。
答案 1 :(得分:5)
参考:http://gitolite.com/gitolite/basic-admin/#appendix-1-bringing-existing-repos-into-gitolite。怎么样:
git clone --mirror <github git repo path>
答案 2 :(得分:2)
我能想到的最好的事情是拉出本地副本,将原点更改为新服务器,然后推送:
git pull --all
git remote rm origin
git remote add origin <new repo address>
git push --all --repo=origin
答案 3 :(得分:1)
也许您还想将标签带到新服务器。这可以通过
来完成 git push --tags
答案 4 :(得分:0)
要将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和user子目录中,但您可以使用任何适合的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。
然后,同步回购:
$ git fetch --prune
可以通过cron
作业自动获取。