【问题标题】:Import an existing git project into GitLab?将现有的 git 项目导入 GitLab?
【发布时间】:2013-12-20 00:41:21
【问题描述】:

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

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

如何导入?

【问题讨论】:

  • gitlab的一个新特性,创建项目然后进入项目页面。在这里您将看到基本说明。
  • 较新版本的 Gitlab 中没有基本说明,任何复制它们的人可以将它们复制到这里吗?

标签: git gitlab


【解决方案1】:

这是一个基本的将一个 repo 移动到新位置。我一直使用这个序列。使用 --bare 将不会看到源文件。

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

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

镜像推送到新的存储库。

cd old-repository.git

git push --mirror https://gitlab.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,而是指定 refs/ 下的所有 refs(包括但不限于 refs/heads/, refs/remotes/ 和 refs/tags/) 被镜像到远程存储库。 新创建的本地 refs 将被推送到远程端,本地 更新的 refs 将在远程端强制更新,并删除 refs 将从远端移除。这是默认值,如果 配置选项 remote..mirror 已设置。

【讨论】:

  • 也适用于 gitlab!
【解决方案2】:

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

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 等)。如果你这样做, 你有完整的 repo 和历史记录。

但是,在我的例子中,有几十个分支,部分或全部 他们我从来没有在本地检查过。推动他们似乎是一个 举重。那么,如何进行呢?

我确定了两个选项:

选项 1:检查每个分支并推送我可以这样做,我可以 甚至编写一个 Bash 脚本来提供帮助。但是,这样做会改变我的 每次结帐的工作文件,并将创建一个本地分支 每个远程跟踪分支。这会很慢 回购。

选项 2:在不更改工作副本的情况下推送 还有第二个 替代方案,不需要检查每个分支,不需要 在工作副本中创建无关的分支,甚至不会 修改工作副本中的文件。

如果您的旧遥控器被称为“oldremote”并且您的 新遥控器称为“newremote”,您可以只推送遥控器 使用此命令跟踪分支:

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

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

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

无论你 推送所有分支或只是其中一些分支,Git 将执行 整个操作,无需创建任何新的本地分支,也无需 更改您的工作文件。每个跟踪分支 匹配您的模式将被推送到新的遥控器。

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

发布日期:2017 年 10 月 9 日

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      Gitlab 在这个功能上有点小错误。 如果您的项目很大,您可能会浪费大量时间进行故障排除。

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

      看我的截图

      【讨论】:

        【解决方案5】:

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

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

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

        另见:How to import an existing bare git repository into Gitlab?

        【讨论】:

        • 对于那些可能会感到困惑的人来说,裸存储库是通常位于集中位置(例如 github)的存储库,它不包含存储库根目录下的 .git 文件夹。如果您可以访问存储裸存储库的服务器,这只是一个方便的选择。否则@Raveren 的答案是最好的选择。
        【解决方案6】:

        保留所有标签和分支

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

        【讨论】:

        • 不复制所有分支
        • 以下不会复制所有分支
        【解决方案7】:

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

        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 Docs page 了解详细信息和挂钩!

        (不多)

        【讨论】:

          【解决方案8】:

          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
          

          【讨论】:

          • 这只会推送 master 而不会推送其他分支
          【解决方案9】:
          推荐的答案 GitLab

          我能够通过以下在我的计算机上本地运行的命令将我的项目连同所有提交、分支和标签完全导出到 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 重命名,否则,更改前两行以反映它。

          【讨论】:

          • 它给了我错误:remote: GitLab: You are not allowed to force push code to a protected branch on this project。致10.0.100.89:8496/project/james-project.git! [remote denied] master -> master (pre-receive hook denied)
          • 我必须在设置 -> 存储库中关闭受保护的分支才能使其正常工作。
          • 看看我的问题为什么你会使用 --mirror
          【解决方案10】:
          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 可能无法正常工作”这不是正常情况
          • 这实际上是因为 HTTP 连接可能被禁用。感谢您的回答。
          【解决方案11】:

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

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

          【讨论】:

          • 我不得不用力推动它,因为我已经在 gitLab 中摆弄了:git push gitlab master -f。现在我在我的新 GitLab 中拥有了包含所有提交的整个仓库;)谢谢
          • 你不需要做一面镜子吗?如果你有除 master 以外的其他分支怎么办?
          • 是的,按照 OP 的建议,您会丢失所有分支(master 除外)和标签
          • Gitlab 项目导入将在您创建项目时从 URL 加载远程存储库。包括导入 svn repos 的说明。
          • git remote add gitlab url-to-gitlab-repo git push gitlab master --mirror
          猜你喜欢
          • 2021-02-23
          • 2012-05-30
          • 2023-04-04
          • 1970-01-01
          • 1970-01-01
          • 2020-01-26
          • 2013-10-14
          • 1970-01-01
          • 2016-12-06
          相关资源
          最近更新 更多