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

Posted

技术标签:

【中文标题】为啥 Gitlab 无法从本地网络导入存储库,状态码为 128?【英文标题】:Why Gitlab fails importing repository from local network with status code 128?为什么 Gitlab 无法从本地网络导入存储库,状态码为 128? 【发布时间】:2019-01-23 15:48:49 【问题描述】:

我最近在本地网络的服务器中安装了带有 Docker 的 GitLab。我正在尝试迁移我在 PC 中本地维护的存储库。 我通过本地网络中的本地 HTTP 服务器公开它作为一种解决方法,只是为了能够将其导入 GitLab,因为 GitLab 管理面板中几乎所有可用的选项都类似于“从 GitHub 导入”,并且这些选项对我的情况都没有帮助(我的意思是:我不能只上传我的存储库的.git 文件夹来导入它吗? -retorically 说)顺便说一句,我选择的是“通过 URL 回购”:

我必须禁用一个安全设置,因为 GitLab 不允许从指向本地网络中服务器的 URL 导入。所以我在“出站服务”部分打开了名为“允许从挂钩和服务向本地网络发出请求”的选项。

然后,我尝试从 GitLab 创建一个新项目,使用名为“导入项目”的选项卡并在其中填写表单。然后,它会继续运行很长时间,并显示“正在导入...”消息,看起来它会一遍又一遍地重试,直到显示此消息:

每次导入尝试均失败:将存储库 http://111.222.33.44/path/to/my/repository/root/folder/.git 导入 myuser/my_project 时出错 - 13:CreateRepositoryFromURL: clone cmd wait: exit status 128. 请重试。

我一直在阅读在线发布的 Gitlab 手册,关于 GitLab 的不同文章,在 Google 上搜索了这个错误并发现了数十张具有类似(但非常不同!)问题的票......但我仍然不明白:为什么不能t 我只是立即上传我的存储库?

给出的 URL 不是问题本身:如果我在网络浏览器中输入它,我可以在网络浏览器中清楚地看到我的项目的整个文件系统,如果我添加 @ 987654328@ 到它,我什至可以在我的浏览器中看到隐藏的.git 文件夹的内容......但是,由于某种原因,这对于 GitLab 来说还不够......

我对此感到非常困惑。我找到的链接之一是Export a repository from a Gitlab server to another Gitlab server(请注意,我是从其他 Gitlab 导入的,但是在 PC 中使用简单的git init 创建了一个简单的 git 存储库。查找与我的案例远程相似的阅读材料不是小菜一碟:我整天都在寻找这个,但没有成功......)。在该链接中,有一段说:

您将收到克隆空存储库的警告。这很正常。切换到已签出存储库的工作目录并执行 git pull

...所以我找到了我的 GitLab 安装创建“空存储库”的文件夹,并尝试从那里执行 git pull 命令,将其路由到我的其他本地服务器计算机。类似的东西:

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

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

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

我可能会补充一点,the official Gitlab's manual about howto import projects 包含从任何地方迁移的指令,除了原始的、未包装的、未加糖的、普通的git 命令行软件!

【问题讨论】:

How to change the URI (URL) for a remote Git repository?的可能重复 我认为您可能在这里采取了错误的方法。我最近将一个 git repo 从本地文件系统迁移到 Bitbucket。 BB 也没有从文件中导入 repo 的内置选项。我最终需要将远程 URL 切换到 BB 中的“新”存储库,然后进行合并。像魅力一样工作:) 就我而言,由于某种原因,我发现的几乎每一个分步指南都脱离了上下文(我几乎无法解释,但当我仔细查看它们时,就像他们每个人一样,我只能大喊:那不是我的情况!)。此外,git 不存在于系统的PATH envvar 中......所以我从单元的根文件夹中创建了一个find -name git,我发现其中有几个散布在各处......我可以依赖哪些?一切都太混乱了…… 我设法找到了GitLab 创建“空仓库”的文件夹(可能是由 GitLab 的导入表单触发的)。就像它为我尝试导入的每个项目都放置了一个类似myproject.git 的文件夹。这些文件夹的内容与在 CLI 中使用 git 创建的任何存储库中存在的任何 .git 文件夹疑似相似......但根本没有工作树! @Brian 我不认为我的问题与您发布的问题重复,至少有两个原因:1-我正在使用 GitLab,另一个问题的 OP 不是。 2- GitLab 不会将 git 添加到 PATH 环境变量中。根据 GitLab 的结构,我没有其他选择。 【参考方案1】:

我遇到了同样的错误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) 内提供凭据:

这样,导入就像一种魅力 - 而且速度非常快。

【讨论】:

【参考方案2】:

最后,真正的问题是对 GitLab 的 web 菜单的实际工作方式存在误解。

当您在 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

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于为啥 Gitlab 无法从本地网络导入存储库,状态码为 128?的主要内容,如果未能解决你的问题,请参考以下文章

无法导入私有 gitlab 存储库 [重复]

从 Gitlab 私有存储库导入节点模块时出错

为啥我无法从本地主机上的 Gitlab CI 连接到我的 docker-compose 服务

为啥eclipse 导入git工程没有反应

从私人 gitlab 存储库的 Bower 存储库安装

Gitlab Wiki - 导入存储库时如何导入 wiki