繁体   English   中英

将现有的 git 项目导入 GitLab?

[英]Import an existing git project into GitLab?

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

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

我怎样才能导入它?

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

为了说明我的示例,我将使用https://github.com/raveren/kint作为要导入 gitlab 的源存储库。 我事先在 gitlab 中创建了一个名为Kint (在命名空间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重命名您的远程主机,否则,更改前两行以反映它。

将新的 gitlab 远程添加到您现有的存储库并推送:

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

保留所有标签和分支

只需在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

以下是 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

这是将一个 repo 移动到新位置的基本操作。 我一直使用这个序列。 使用--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 不是将每个 ref 命名为 push,而是指定将 refs/ 下的所有 ref(包括但不限于 refs/heads/、refs/remotes/ 和 refs/tags/)镜像到远程存储库。 新创建的本地 refs 将被推送到远程端,本地更新的 refs 将在远程端强制更新,删除的 refs 将从远程端删除。 如果设置了配置选项 remote..mirror,则这是默认设置。

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

  • 复制repos_path ( /home/git/repositories/group/repo.git ) 下的裸仓库。 目录名称必须以.git结尾并位于组或用户命名空间下。
  • 运行bundle exec rake gitlab:import:repos

所有者将成为第一个管理员,如果不存在,则会创建一个组。

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

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 可能不起作用

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

GitLab Docs 上有详尽的说明:

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

tl;博士

  • 确保您想要映射到 GitLab 用户的任何 GitHub 用户具有:

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

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

但是请阅读GitLab 文档页面了解详细信息和钩子!

(不是很多)

您在 gitlab 中创建一个空项目,然后在本地终端上执行以下操作之一:

推送现有文件夹

cd existing_folder
git init
git remote add origin git@gitlab.com:GITLABUSERNAME/YOURGITPROJECTNAME.git
git add .
git commit -m "Initial commit"
git push -u origin master

推送现有的 Git 存储库

cd existing_repo
git remote rename origin old-origin
git remote add origin git@gitlab.com:GITLABUSERNAME/YOURGITPROJECTNAME.git
git push -u origin --all
git push -u origin --tags

Gitlab 在这个特性上有点问题。 如果您的项目很大,您可能会浪费大量时间进行故障排除。

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

按照我的截图

在此处输入图片说明

我在这里找到了最好和最简单的方法,对我来说就像一个魅力,它会将所有标签和分支从原点推送到新的远程:

git remote add newremote git@git-cloud.z.com:test/kubespray.git

git push newremote --tags refs/remotes/origin/*:refs/heads/*

我使用了 'git push --all -u newremote',但它只将签出的分支推送到 newremote。

Git:将所有分支推送到新的远程

作者:软件架构师 Keith Dechant

下面是你们中的一些人在使用 Git 存储库时可能遇到的场景。 你有一个 Git 存储库的工作副本,比如来自旧服务器。 但是您只有工作副本,并且无法访问源。 所以你不能只是分叉它。 但是您想将整个 repo 和所有分支历史推送到您的新遥控器。

如果您的工作副本包含来自旧远程(origin/branch1、origin/branch1 等)的跟踪分支,则这是可能的。 如果你这样做了,你就有了整个回购和历史。

然而,就我而言,有数十家分店,其中一些或全部我从未在本地签过账。 将他们全部推开似乎是一件沉重的事情。 那么,如何进行呢?

我确定了两个选项:

选项 1:检查每个分支并推送我可以做到这一点,我什至可以编写一个 Bash 脚本来提供帮助。 但是,这样做会在每次结帐时更改我的工作文件,并且会为每个远程跟踪分支创建一个本地分支。 对于大型回购,这会很慢。

选项 2:推送而不更改您的工作副本 还有第二种选择,它不需要检查每个分支,不会在工作副本中创建无关的分支,甚至不修改工作副本中的文件。

如果旧的不再活动的遥控器称为“oldremote”,而新的遥控器称为“newremote”,则可以使用以下命令仅推送远程跟踪分支:

git push newremote refs/remotes/oldremote/*:refs/heads/*

在某些情况下,也可以只推送分支的一个子集。 如果分支名称以斜线命名(例如,oldremote/features/branch3、oldremote/features/branch4 等),则只能推送名称以“oldremote/features”开头的远程跟踪分支:

git push newremote refs/remotes/oldremote/features/*:refs/heads/features/*

无论您推送所有分支还是仅推送其中的一部分,Git 都会执行整个操作,而不会创建任何新的本地分支,也不会更改您的工作文件。 与您的模式匹配的每个跟踪分支都将被推送到新的远程。

有关该主题的更多信息,请查看 Stack Overflow 上的此线程。

发布日期:2017 年 10 月 9 日

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM