如何将git存储库从github移动到运行gitolite的本地服务器

时间:2012-07-19 17:07:08

标签: git gitolite

我想知道将目前托管在github上的所有git存储库移动到基于gitolite的新git服务器的更好方法。

仅仅因为知道,我正在进行此转换的原因是采用Redmine来支持我们的项目管理流程。

5 个答案:

答案 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。怎么样:

  1. 在gitolite服务器上,使用命令git clone --mirror <github git repo path>
  2. 制作github存储库的镜像
  3. 将镜像回购移动到上面链接中的正确位置,然后按照指南将现有回购移动到gitolite 部分进行操作?

答案 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作业自动获取。