[英]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 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 可能不起作用
GitLab Docs 上有详尽的说明:
https://docs.gitlab.com/ee/user/project/import/github.html
确保您想要映射到 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
我在这里找到了最好和最简单的方法,对我来说就像一个魅力,它会将所有标签和分支从原点推送到新的远程:
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.