4

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

只是为了知道,我这样做的原因是采用 Redmine 来支持我们的项目管理流程。

4

5 回答 5

6

在 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。我也觉得镜子会是一个更好的选择。

于 2012-07-19T17:41:51.243 回答
5

参考这个: http: //gitolite.com/gitolite/basic-admin/#appendix-1-bringing-existing-repos-into-gitolite。怎么样:

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

我能想到的最好的事情是拉一个本地副本,将源更改为新服务器,然后推送:

git pull --all
git remote rm origin
git remote add origin <new repo address>
git push --all --repo=origin
于 2012-07-19T17:19:34.543 回答
1

也许您还想将标签带到新服务器。这可以通过

    git push --tags
于 2012-08-22T14:53:30.250 回答
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 和用户子目录中,但您可以使用任何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作业自动化。

于 2016-05-16T13:11:46.530 回答