【发布时间】:2019-04-08 21:39:34
【问题描述】:
我想将 GitLab 项目复制到另一个应该与原始项目完全独立的存储库。
出于这个原因,我尝试将原始项目分叉到另一个项目中。但是在原项目内部,维护者仍然可以看到一个分支列表,并且知道其他分支在哪里维护。
我想要一个完整的副本,没有任何指向主项目的链接,因此无法由原始项目维护者管理。
我该怎么做?
【问题讨论】:
我想将 GitLab 项目复制到另一个应该与原始项目完全独立的存储库。
出于这个原因,我尝试将原始项目分叉到另一个项目中。但是在原项目内部,维护者仍然可以看到一个分支列表,并且知道其他分支在哪里维护。
我想要一个完整的副本,没有任何指向主项目的链接,因此无法由原始项目维护者管理。
我该怎么做?
【问题讨论】:
我会将原始项目克隆到您本地机器上的沙箱中,在您想要的位置创建新项目,将您的新 gitlab 位置设置为远程并推送到那里。
假设 old_url 和 new_url 是您的旧网址和新网址:
git clone <old_url>
cd <repo_dir_name>
git remote add new_remote <new_url>
git push --all new_remote
假设您执行此操作时您的新存储库是空的,它现在将包含原始存储库中存在的所有分支和标签,与它没有任何连接。
PS:两年后我再次尝试了我的答案,看来你需要git clone --mirror <old_url>,并添加--mirror 开关,如果你想将原始仓库中的所有分支推送到新的分支。如果上述方法不适合您,请尝试使用--mirror。
【讨论】:
另一种选择是使用 Gitlab 的 export/import feature。
在任何 GitLab 实例或 GitLab.com 上运行的现有项目可以与所有相关数据一起导出并移动到新的 GitLab 实例中。
与other answer 的区别在于它也复制了以下内容:
导出的内容
以下项目将被导出:
- 项目和 wiki 存储库
- 项目上传
- 项目配置,不包括集成
- cmets 问题、与差异和 cmets 合并请求、标签、里程碑、sn-ps 和其他项目实体
- 设计管理文件和数据
- LFS 对象
- 发行板
- 管道历史
- 推送规则
因此,如果您只想复制代码,或者您还想迁移上面列出的其他非代码项,这取决于您的用例。结果仍然是 2 个独立的项目(即它不会显示为分叉)。
请注意:
如果启用了项目导入选项,则会显示 GitLab 导入/导出按钮。
要导出,请转到您项目的设置 > 常规页面:
然后等待包含可下载 tar.gz. 文件的电子邮件。
(在我的Gitlab版本上,点击两次按钮,可以直接从浏览器下载。)
然后要导入,在 Gitlab 上,从顶部栏中选择 New 按钮 > New Project。
然后,选择导入项目 > Gitlab 导出。
上面的 UI 屏幕截图可能会在未来的 Gitlab 版本上发生变化。同样,请务必参考您的 Gitlab 实例的文档页面,或查看来自 Gitlab EE 的公共文档:Project import/export 。
【讨论】:
另一个选项,在设置>>常规>>高级>>删除分叉关系
这有助于删除与上游项目的所有关系。
【讨论】: