为了集中资源为科大师生提供更好的 Git 托管服务,网络信息中心与 Linux 用户协会经讨论决定:即日起,Linux 用户协会将与网络信息中心共同运维中国科大 Git 服务(即 USTC GitLab,https://git.ustc.edu.cn/),并停止独立维护的 LUG GitLab 服务。为了给广大师生留出充足时间迁移数据,现将 LUG GitLab 停止服务的时间表通知如下:

  1. LUG GitLab 即日起停止新用户注册,现有用户可以继续使用;
  2. LUG GitLab 将于 10 月 31 日进入只读状态;
  3. LUG GitLab 将于 12 月 31 日停止服务。

如有任何疑问或需要协助,可以通过 LUG 的联系方式联系我们。


附:如何迁移数据?

由于自动化迁移存在困难(例如无法妥善解决命名冲突的问题),因此数据需要您手工迁移。以下分别介绍针对群组的半自动化迁移方式,以及针对个人项目的手工迁移方式。

迁移群组(Group)

GitLab 支持使用「直接传输」(Direct Transfer)的功能迁移群组。简单来说,需要在 LUG GitLab https://git.lug.ustc.edu.cn 创建一个有 “api” 范围权限的个人访问令牌(PAT),然后在 USTC GitLab https://git.ustc.edu.cn 的指定界面填写该 token,并配置迁移。

前提条件:你需要是被迁移的 Group 的 owner(所有者),否则没有权限迁移。

第一步:在 LUG GitLab 创建 PAT

登录 https://git.lug.ustc.edu.cn。点击网站右上角的图标,选择 “Preferences”(偏好设置)。

step 1.1

然后选择 “Access”(访问)-> “Personal Access Tokens”(个人访问令牌)。

step 1.2

选择创建 “Legacy token”(旧版令牌)。

step 1.3

给 token 起个名字,并确保选中下面的 “api”作为范围。如果当天无法完成迁移,可以适当拉长有效期。

step 1.4

创建出来的 token 复制出来。如果忘记记录了,需要删除之后重新走一遍上面的创建流程。请勿分享 token

step 1.5

第二步:在 USTC GitLab 启动直接传输

登录 https://git.ustc.edu.cn。点击上面的加号,选择 “New Group”(新建群组)。

step 2.1

在新界面中选择 “Import Group”(导入群组)。

step 2.2

在导入群组界面,填写 https://git.lug.ustc.edu.cn,以及第一步生成出来的 token。

step 2.3

输入完成后,点击 “Connect instance”(连接实例),之后会看到你拥有的群组。

step 2.4

在非嵌套群组的情况下,点击 “Select parent group”(选择父组)并选择 “No parent”(没有父组)即可。如果群组的名字和别人冲突了,需要重新起名。

最后全选你要导入的群组,点击 “Import with projects”(导入包含项目)即可。

step 2.5

等待一段时间。在迁移过程中,该页面上可以查看迁移的进度。

第三步:收尾清理

迁移完成后,由于 GitLab 无法将 USTC GitLab 和 LUG GitLab 上面的用户一一对应,已有的用户都变成了 placeholder(占位符)。需要手工指定占位符和 USTC GitLab 上面用户的关系。

在群组内选择 “Members”(成员)。

step 3.1

在成员页面中选择 “Placeholders”(占位符)。

step 3.2

在与组内用户协调确认后,输入占位符与 USTC GitLab 上面用户的关系,点击 “Reassign”(重新分配)。

step 3.3

如果占位符不需要了,也可以不重新分配。

step 3.4

重新分配需要对方的批准。在重新分配后,对方会收到一封邮件。如果重新分配了自己,你自己也会收到邮件。

step 3.5

确认无误后,在点击弹出的页面中批准即可。

step 3.6

在迁移完成后,可以在 LUG GitLab 删除对应的群组,并删除使用的 PAT。

迁移个人仓库

GitLab 的「直接传输」功能不支持个人仓库,因此需要手工逐个仓库操作。如果不希望做下面的步骤,也可以自己创建群组后,将仓库移动到群组,再使用直接传输功能。

做法 1:创建新组,将个人仓库迁移到新组后,进行直接传输

这是最简单的方式。

在 LUG GitLab 创建新的群组后,可以在此页面快速逐个迁移:

step 0

之后参考上文的操作即可。

做法 2:如果只有代码要迁移

首先在 USTC GitLab 创建仓库。先查看你的原始 remote:

git remote -v

预期输出为:

origin  git@git.lug.ustc.edu.cn:yourname/yourproj (fetch)
origin  git@git.lug.ustc.edu.cn:yourname/yourproj (push)

假设你在 USTC GitLab 上的 remote 为 git@git.ustc.edu.cn:yourname/yourproj

git remote set-url origin git@git.ustc.edu.cn:yourname/yourproj.git
git push --all origin
git push --tags origin

从本地传输数据相比做法 3(导出、下载存档再导入)成功率更高。

做法 3:有除了代码以外的仓库内的其他内容要迁移(不推荐)

这种做法我们不推荐,因为失败风险较高。建议优先考虑创建新组后使用直接传输功能传输。

在 LUG GitLab 内,你的仓库界面中选择 “Settings”(设置)-> “General”(通用)。

step 1.1

展开弹出界面中的 “Advanced”(高级)。

step 1.2

选择 “Export project”(导出项目)。

step 1.3

等待一会之后,邮件会收到导出的存档 URL。如果仓库很大,存档的时间可能会比较长。如果长时间没有看到存档邮件,请联系我们。

在收到的邮件中选择 Download 下载存档到本地。

step 1.4

之后在 USTC GitLab 中界面顶部选择 “New project/repository”(新建项目/仓库)。

step 1.5

选择 “Import project”(导入项目)。

step 1.6

在导入选项中选择 GitLab 导出:

step 1.7

设置导入参数,包括仓库名称、导入目标(可以是你自己的用户名,也可以是群组),并且选择导出出来的文件,点击导入。

step 1.8

如果导入的文件过大,有可能会出现问题。请联系我们处理。