如何将现有的裸 Git 存储库导入到 Gitlab?

12

我按照这里描述的方法将我的裸的git仓库导入到Gitlab中,因为它没有被识别为一个git仓库,但是创建了一个94K大的“空”仓库(原始仓库大小为2.8GB):

$ bundle exec rake gitlab:import:repos RAILS_ENV=production
fatal: Not a git repository (or any of the parent directories): .git
Processing test.git
INFO: Sidekiq client using redis://localhost:6379 with options:namespace=>"resque:gitlab"}
 * Created test (test.git)
Done!

为了解决问题,我用我的裸仓库替换了由导入尝试创建的空项目文件夹。然后我尝试从远程克隆仓库,但遇到了以下错误:

$ git clone git@mydomain.com:...test.git
Cloning into 'test'
fatal: '...test.git' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

但是Git用户应该拥有所有所需的权限-也许我漏看了什么?

我的系统:RHEL6.3,Git 1.8.3.4,Gitlab5.3。

Gitlab需要一个正常的存储库(非裸)吗?或者我的问题可能是什么?

4个回答

13

Gitlab需要普通存储库(非裸存储库)吗?

不需要,Gitlab管理的所有存储库都是裸存储库。

您应该看到:

/home/git/repositories/user1/repo1.git
/home/git/repositories/user1/repo2.git
/home/git/repositories/greoup1/repo3.git
...

请确保您的test.git文件夹(以及其中的裸仓库文件)的权限与/home/git/repositories/下现有的裸仓库相同。

如果导入失败,则应该“用我的裸仓库替换由导入试验创建的空项目文件夹”。

但是:您需要确保将GitLab创建的空裸仓库中的任何钩子(位于~git/repositories/arepo.git/hooks中)复制到您的完整裸仓库中,以替换空裸仓库(同一路径)。
还要检查~git/repositories/arepo.git/info~git/repositories/arepo.git/config中的内容。

为了调试,请先尝试克隆GitLab在导入失败期间创建的空裸仓库。
然后用您自己的裸仓库替换它,仔细检查钩子并重试。


提到的,由OP提出并在GitLab的"故障排除指南"中记录的正确SSH URL为:
git@git.myserver.com:repositories/mygroup/proj1.git

提到了:repositories


要导入裸仓库(如Sytse Sijbrandij所提到的belowraketasks/import.md中所述)

  • copy your bare repos under git repos_path (see config/gitlab.yml gitlab_shell -> repos_path)
  • run the command below

    bundle exec rake gitlab:import:repos RAILS_ENV=production
    

我已经在我的问题中添加了导入错误,因为我认为主要问题是裸仓库的导入。权限我已经检查了几次,它们是(drwxrws---.)。 - user2451418
@user2451418,那么你的解决方法应该可行...我已经编辑了我的答案,并提供了一些需要考虑的更多想法。 - VonC
我认为没有创建钩子:存储库中的post-receive钩子是链接:... Gitlab / test ...存储库为空。卫星也是如此。当我尝试通过ssh从远程克隆空仓库时,问题也不会消失。但在服务器上克隆正常工作。 - user2451418

13

好链接。+1。我已将其包含在我的选定答案中以获得更多的可见性。 - VonC
您还需要考虑以下内容:https://github.com/gitlabhq/gitlabhq/pull/8140 :仅将要导入的存储库放在命名空间(用户或组子目录)下。 - Ciro Santilli OurBigBook.com
我按照链接页面上的说明操作,但没有看到我的新项目。经过调查发现,这是因为该项目是内部项目,普通用户无法看到。解决可见性问题后,问题得以解决。 - Farrukh Najmi

4

对我来说,复制存储库的位置是 - /var/opt/gitlab/git-data/repositories

我将现有的裸存储库复制到上述目录中,并运行了>gitlab-rake gitlab:import:repos,它起作用了!


3
执行该操作会返回以下错误信息:"请指定包含存储库的导入路径"。 按照 https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/raketasks/import.md 的指引进行操作,在使用 zsh 时需要转义 [] 字符才能成功。 - Alex

3
我明白了!我的ssh路径中缺少一个目录。这个问题已经在这里被追踪:here。很抱歉,错误信息并不是那么明显。我希望这可以帮助其他像我一样的Gitlab初学者 :)

具体链接 - https://github.com/gitlabhq/gitlab-public-wiki/wiki/Trouble-Shooting-Guide#gitlab-shell - Anake

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接