将存储库从Gitlab服务器导出到另一个Gitlab服务器

bla*_*boy 47 gitlab

刚刚在一台全新的高性能服务器上安装了全新的6.8 Gitlab.

在考虑忘记我的存储库历史记录(评论,问题等等)之前,有人知道将存储库数据从Gitlab服务器导出到另一个Gitlab服务器的方法吗?

我只是没有在导出/迁移整个项目数据(不仅仅是git存储库及其wiki)的文档中找到任何内容.

Gre*_*cki 32

对于GitLab版本> = 8.9(2016年6月发布),您可以使用内置导出和导入项目功能.

请注意,对于GitLab的现有安装,必须在应用程序设置中启用项目导入选项(URL:/admin/application_settings)在"导入源"下.您必须是管理员才能启用和使用导入功能.

这是功能完整的文档:https://gitlab.com/help/user/project/settings/import_export.md

  • 这个应该是公认的答案.以下是更多信息:https://gitlab.com/help/user/project/settings/import_export.md (2认同)

use*_*014 9

我最近实际上已经这样做了,我们正在升级我们的gitlab实例,需要保存并导入存储库到新安装.

首先,创建已签出存储库的捆绑包.例如,假设你检查了一个存储库,我们将调用myrepository

要检查存储库,请使用git clone(假设您的存储库位于root帐户下,ipaddress是192.168.1.1)

git clone http://192.168.1.1/root/myrepository.git (或匹配您的环境)

现在这一步有点重要; 您需要更改为具有已签出存储库的.git文件夹的工作目录.

cd myrepository

接下来,您将创建一个包文件:

git bundle create myrepository.bundle --all

将bundle文件导入gitlab的新实例.

在gitlab gui界面上创建一个新的'myrepository'

克隆空仓库; 让我们说这个新的gitlab有ipaddress 192.168.1.2:

git clone http:\\192.168.1.2\root\myrepository.git (或匹配您的环境)

您将收到有关克隆空存储库的警告.这个是正常的.

转到已签出存储库的工作目录并执行git pull:

cd myrepository

git pull file/path/to/myrepository.bundle

这会将存储库拉入您的克隆.接下来你可以做一个git add,git commit和git push

假设您正确设置了gitlab服务器设置,这应该可以正常工作; 您可能遇到诸如需要在nginx.conf文件中添加client_max_body_size参数以及用于推送大文件的'git config --global http.postBuffer'等问题.

另一种方法是制作每个提交的补丁文件,然后进行部署:

这包括执行'git format-patch -C 0badil..68elid -o patch_directory_path'并引用所有提交的范围并将它们推送到输出目录; 这应该为每个提交一个补丁文件.接下来将涉及git克隆新的空存储库,更改为克隆的工作目录,并使用'git am patch_directory_path'将补丁应用于新存储库

  • 我没有得到很多赞成票.如果你有大的gitlab服务器,有很多用户,项目等,这个答案丝毫没有帮助.这里的问题不是repo本身,正如你在这个答案中所看到的那样,它很容易推到其他地方(`git clone --mirror`然后`git push --mirror`,不需要所有的这个答案中的问题),问题是设置所有这些用户,所有那些回购,所有匹配权限,所有问题等等,这里没有解决任何问题 (11认同)

Von*_*onC 6

对于repos本身,你可以使用git bundle:生成一个文件,它很容易复制.
(正如我在" 备份本地Git存储库 "中所述)

但另一种方法是git clone --mirror从本地工作站上的第一台服务器git push --mirror到新服务器的回购.
这就是GitHub在其帮助页面" 复制存储库 "中的详细信息.

在这两种情况下,您首先需要在新的GitLab服务器上声明这些存储库,以便初始化它们并准备好接收提交.


但其余的......不容易.有待处理功能请求 :(
更新2016年8月,2年后:GitLab 8.9已实现该功能)
(对于8.9以上的GitLab版本,请参阅并提升Greg Dubicki答案)

我同意问题是首先出口的主要问题.
它们存储在数据库中.将它们存储在git中不是一种选择.也许将它们导出为格式化文件(SQL,YAML或其他).

这篇博客文章说明了mysql数据库的导出.

使用mysqldump创建旧数据库的转储,然后创建新的服务器上的一个新的数据库和导入此.

  • 老:
    mysqldump gitlab | gzip > gitlab.sql.gz
Run Code Online (Sandbox Code Playgroud)
  • 新的:
    gunzip < gitlab.sql.gz | mysql gitlab
Run Code Online (Sandbox Code Playgroud)

运行该db migrate命令以确保架构已更新到最新版本.

sudo -u gitlab -H bundle exec rake db:migrate RAILS_ENV=production
Run Code Online (Sandbox Code Playgroud)


Gre*_*cki 5

对于GitLab版本<8.9,没有内置的导出/导入功能,我推荐使用Marcus Chmelar的一个很棒的工具,gitlab-migrator.我使用较旧的GitLab版本多次成功使用它,所以你也应该这样做.请注意其局限性.