【问题标题】:How to move git repositories from github to local server running gitolite如何将 git 存储库从 github 移动到运行 gitolite 的本地服务器
【发布时间】:2012-07-18 22:26:46
【问题描述】:

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

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

【问题讨论】:

    标签: git gitolite


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

    要将 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
    

    &lt;gh-user&gt; 是 GitHub 用户,&lt;gh-repo&gt; 是被镜像的 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 作业自动获取。

    【讨论】:

      【解决方案3】:

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

          git push --tags
      

      【讨论】:

        【解决方案4】:

        在 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会是更好的选择。

        【讨论】:

        • 如第一条评论中所述,--all 仅适用于本地参考。您要么需要将所有远程引用设为本地,要么使用 --mirror (少数几次 --mirror 是您想要的之一)。
        • @SethRobertson - 你是对的,标签和除分支之外的任何其他参考都不会传播:(
        • 按照建议,我在克隆时使用了 --mirror 选项,所有的参考都被复制了。
        【解决方案5】:

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

        git pull --all
        git remote rm origin
        git remote add origin <new repo address>
        git push --all --repo=origin
        

        【讨论】:

        • 这只会将你所有的引用推送到克隆的 repo 中(这将只是你在本地签出的分支)。你需要检查所有的 refs,然后执行 push --all
        • 这是少数几次 --mirror 会真正做你想做的事情之一。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-18
        • 2013-06-24
        • 2015-08-22
        • 2020-04-27
        • 2010-12-01
        • 2011-04-23
        相关资源
        最近更新 更多