为什么 Gitlab 无法从本地网络导入存储库,状态码为 128?

Why Gitlab fails importing repository from local network with status code 128?

我最近在本地网络的服务器上安装了 GitLab 和 Docker。我正在尝试迁移我在 PC 本地维护的存储库。 作为解决方法,我通过本地网络中的本地 HTTP 服务器公开了它,只是为了能够将其导入 GitLab,因为 [=64] 中几乎所有选项都可用=]实验室管理面板就像 "Import from GitHub",这些选项中的 none 对我的情况有帮助(我的意思是:我不能只上传我存储库的 .git 文件夹来导入它吗?-顺便说一句,我选择的是 "Repo by URL":

有一个我必须禁用的安全设置,因为 GitLab 不允许从 URLs 导入指向本地网络中的服务器。所以我在出站服务部分打开了名为 "Allow requests to the local network from hooks and services" 的选项。

然后,我尝试从 GitLab 创建一个新项目,使用名为 "import project" 的选项卡并在其中填写表格。然后,它保持 运行 很长一段时间,消息 "Importing..." 看起来它一直在不断重试,直到显示此消息:

Every import attempt has failed: Error importing repository http://111.222.33.44/path/to/my/repository/root/folder/.git into myuser/my_project - 13:CreateRepositoryFromURL: clone cmd wait: exit status 128. Please try again.

我一直在阅读在线发布的 Gitlab 手册,关于 GitLab 的不同文章,用谷歌搜索这个错误并发现了数十张具有相似(但非常不同!)问题的票证.. .但是我还是不明白:为什么我不能马上上传我的仓库?

给定的 URL 本身不是问题 :如果我将它输入网络浏览器,我可以清楚地看到我的项目的整个文件系统Web 浏览器,并且,如果我向其中添加 /.git,我什至可以在我的浏览器中看到隐藏的 .git 文件夹的内容...但是,出于某种原因,这对于 Git实验室...

我对此很困惑。我发现的 link 之一是 Export a repository from a Gitlab server to another Gitlab server(请注意我不是从其他 Gitlab 导入的,而是在 PC 中创建的一个简单的 git 存储库,带有一个简单的 git init。找到阅读 material 与我的案例相似的东西不是小菜一碟:我整天都在搜索这个,但没有成功......)。在那个 link 中,有一部分写着:

You will get warnings that you cloned an empty repository. This is normal. Change into the working directory of your checked out repository and do a git pull

...所以我找到了我的 GitLab 安装创建 "empty repository" 的文件夹,并尝试从那里执行 git pull 命令,给它我的另一个路径本地服务器机器。类似于此:

git pull http://111.222.33.44/path/to/my/repository/root/folder/my_project.bundle

...在另一侧成功制作 .bundle 文件后,按照我在上面 link 中找到的说明进行操作。但是,出于某种原因,我的 GitLab 服务器的 CLI 找不到命令 git! (也许它被包裹在某种 virtualenv 上?或者更确切地说,它一开始就没有包含在 PATH 中?谁知道呢……)。无论如何,拉到哪里?没有可从中提取的工作目录!

我还能做些什么吗?我对 Git 的了解是有限的:我几乎总是用它来独自维护存储库,不需要在任何地方 push 它们,也不需要从任何地方 pull 它们(用我的一个 GitHub 项目很少见。

我可能会补充说 the official Gitlab's manual about howto import projects 包括从任何地方迁移的说明,除了原始的、未包装的、未加糖的、正常的 git 命令行软件!

最后,真正的问题实际上是对 GitLab 网络菜单的工作方式的误解。

当您在 GitLab 的 Web 界面中单击“新建项目”时,有 3 个选项卡可供选择:

  • 空白项目
  • 从模板创建
  • 导入项目

我不认为“空白项目”是可行的方法...我的意思是...“我正在尝试将我的项目导入 GitLab”是我的想法,所以我正在尝试“导入项目”选项卡(这就是我最终发布此问题的原因)...但是,尝试从“空白项目”解决了我的问题。

我只是放弃了我的提交历史,并试图从我当前项目文件的状态从头开始创建一个新的存储库。但是,出乎意料的是,在创建“空白项目”之后,GitLab 指示我将我的存储库导入到这个“空白项目”中。我引用:

CMD Instructions - Existing Git repository

cd existing_repo
git remote rename origin old-origin
git remote add origin http://gitlab.somedomain.net/myuser/someblank-domain.git
git push -u origin --all
git push -u origin --tags

于是,“空白项目”变成了“导入项目”。问题解决了!

就我而言,此问题的根本原因是我的密码(由 Gerrit 创建的临时 HTTP 密码)中包含特殊字符。我不得不不断生成密码,直到我得到一个没有特殊字符的密码。

我有同样的错误Error importing repository http://111.222.33.44/path/to/my/repository/root/folder/.git into myuser/my_project - 13:CreateRepositoryFromURL: clone cmd wait: exit status 128. Please try again.

在我的例子中,我必须提供用户名和密码,因为我从中导入的存储库是用它 (gitblit) 保护的。我也尝试了很多方法,但最后它似乎是一个 GitLab 故障。对我来说,使用提供的字段 Username (optional)Password (optional) 没有用! 我必须直接在 Git repository URL 字段中提供凭据(as the old screenshot in the docs also suggest):

有了它,导入工作就像一个魅力 - 而且速度很快。