将现有的git项目导入GitLab?


147

我有一个安装了Gitlab的帐户,在其中创建了存储库“ ffki-startseite”

现在,我想git://freifunk.in-kiel.de/ffki-startseite.git使用所有提交和分支将存储库克隆到该存储库中,这样我就可以在自己的范围内开始使用它了。

如何导入?


3
gitlab的一项新功能,创建项目,然后转到项目页面。在这里,您将看到基本说明。
马丁·范·韦泽尔


基本说明已在较新版本的Gitlab中消失了,复制过它们的任何人都可以在这里复制吗?
jdevora

Answers:


156

通过在计算机上本地运行的以下命令我能够将项目以及所有提交,分支和标签完全导出到gitlab:

为了说明我的示例,我将使用https://github.com/raveren/kint作为要导入gitlab的源存储库。我事先在gitlab中创建了一个名为Kint(在namespace下raveren)的空项目,它告诉我新创建的项目的http git url是http://gitlab.example.com/raveren/kint.git

这些命令与操作系统无关。

目录中:

git clone --mirror https://github.com/raveren/kint
cd kint.git
git remote add gitlab http://gitlab.example.com/raveren/kint.git
git push gitlab --mirror

现在,如果您有一个本地克隆的存储库要与新遥控器一起使用,只需在其中运行以下命令*:

git remote remove origin
git remote add origin http://gitlab.example.com/raveren/kint.git
git fetch --all

*这是假设您没有从中重命名远程主机origin,否则,请更改前两行以反映它。


1
它给我一个错误:远程:GitLab:不允许您强制将代码推送到该项目上受保护的分支。到10.0.100.89:8496/project/james-project.git ![远程拒绝]主机->主机(预接收钩被拒绝)
James Hirschorn

4
我必须在“设置”->“存储库”中关闭受保护的分支才能使其正常工作。
James Hirschorn

看到我的问题,为什么要使用--mirror
Martijn van Wezel,

108

将新的gitlab远程添加到您现有的存储库中,然后推送:

git remote add gitlab url-to-gitlab-repo
git push gitlab master

我不得不用力推动它,因为我已经在gitLab中弄乱了git push gitlab master -f。现在,我在新的GitLab中拥有所有提交的全部回购;)谢谢
rubo77

19
您不需要做镜子吗?如果您有其他分支而不是主分支怎么办?
slhck 2014年

7
是的,按照OP的建议,您会失去所有分支(主服务器除外)和标签
raveren

创建项目时,Gitlab项目导入将从URL加载远程仓库。包括有关导入svn仓库的说明。
rickfoosusa

1
git remote add gitlab url-to-gitlab-repo git push gitlab master --mirror
Saurabh

23

保留所有标签和分支

只需在 existing Git repository

cd existing_repo
git remote rename origin previous-hosts
git remote add gitlab git@git.hutber.com:hutber/kindred.com.git
git push -u gitlab --all
git push -u gitlab --tags

不复制所有分支机构
Martijn van Wezel,

19

这是Gitlab提供的步骤:

cd existing_repo
git remote rename origin old-origin
git remote add origin https://gitlab.example.com/rmishra/demoapp.git
git push -u origin --all
git push -u origin --tags

这只会推送主服务器,而不会推送其他分支
allkenang '19

18

这是回购到新位置的基本步骤。我一直都用这个顺序。使用--bare 将不会看到源文件。

打开Git Bash。
创建存储库的裸克隆。

git clone --bare https://github.com/exampleuser/old-repository.git

镜像推送到新存储库。

cd old-repository.git

git push --mirror https://github.com/exampleuser/new-repository.git

删除您在步骤1中创建的临时本地存储库。

cd ../
rm -rf old-repository.git

为什么要镜像?请参阅git的文档:https : //git-scm.com/docs/git-push

--all推送所有分支(即refs / heads /下的refs);不能与其他一起使用。

--mirror指定将refs /(包括但不限于refs / heads /,refs / remotes /和refs / tags /)下的所有ref镜像到远程存储库,而不是将每个ref命名为push。新创建的本地裁判将被推送到远程端,本地更新的裁判将在远程端强制更新,而已删除的裁判将从远程端删除。如果设置了配置选项remote..mirror,则为默认设置。


也可以与gitlab一起使用!
毛巾

12

rake gitlab:import:repos可能是更适合批量导入的方法:

  • 复制repos_path/home/git/repositories/group/repo.git)下的原始存储库。目录名称必须.git以组或用户命名空间结尾且在其下。
  • bundle exec rake gitlab:import:repos

所有者将是第一个管理员,如果尚不存在,将创建一个组。

另请参阅:如何将现有的裸git存储库导入Gitlab?


对于那些可能会感到困惑的人,裸存储库通常是位于集中位置(例如github)的存储库,该位置在存储库的根目录不包含.git文件夹。仅当您有权访问存储裸存储库的服务器时,这才是方便的选择。否则,@ Raveren的答案是最佳选择。
TinkerTenorSoftwareGuy

4
git clone --mirror git@github.com:username/repo-name.git

git remote add gitlab ssh://git@servername.com/username/repo.git

git push -f --tags gitlab refs/heads/*:refs/heads/*

最好通过ssh进行操作,https可能无法正常工作


“ https可能行不通”,这通常不是问题
Martijn van Wezel,

实际上这是因为HTTP连接可能被禁用。感谢你的回答。
米卡

2

将项目从GitHub移动到GitLab,包括问题,请求提取Wiki,里程碑,标签,发行说明和评论

有关GitLab文档的详细说明:

https://docs.gitlab.com/ee/user/project/import/github.html

tl; dr

  • 确保要映射到GitLab用户的所有GitHub用户都具有以下任一条件:

    • 使用GitHub图标登录的GitLab帐户-或-
    • 一个GitLab帐户,其电子邮件地址与GitHub用户的公共电子邮件地址匹配
  • 在顶部导航栏中,单击+,然后选择新建项目。

  • 选择导入项目选项卡,然后选择GitHub。
  • 选择第一个按钮以列出您的GitHub存储库。您将被重定向到github.com上的页面以授权GitLab应用程序。
  • 点击授权gitlabhq。您将被重定向回GitLab的Import页面,并列出所有GitHub存储库。
  • 继续选择要导入的存储库。

但是,请阅读GitLab文档页面以获取详细信息和挂钩!

(不多)


1

Gitlab在此功能上有些bug。如果您的项目很大,您可能会浪费大量时间进行故障排除。

最好的解决方案是使用创建/导入工具,不要忘记输入用户名和密码,否则根本不会导入任何内容。

跟随我的截图

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.