在完善简历,想要把上学期一个一直在学校的gitlab.edu上交作业的几个项目仓库转移到github账号上,然后把本科阶段的几个项目都上传备份上去,别在我电脑里的“整理本科所有工作”文件夹等待备份了
转移gitlab仓库到GitHub
操作顺序
- 终端登陆 gh
- 准备github token
- 准备gitlab token
-
我们编写终端脚本自动完成
- 克隆仓库到本地
- 自动在 GitHub 上创建对应的私有仓库
- 上传仓库
- 删除本地内容
注意:我们能克隆所有GitLab 仓库的贡献记录,如果把提交的邮箱加入GitHub账户中,activity贡献图也会正确显示在对应的时间上,但是不能同步.gitlab-ci相关文件,貌似是两者使用的不是同一个语法
分步解析
- 安装登录GitHub CLI工具
brew install gh
gh auth login
- 获取gitlalb访问令牌,至少要点上 read_repository 和 api 两个权限
https://gitlab.com/-/profile/personal_access_tokens
当然,我使用的是
http://gitlab.cse.lehigh.edu/-/profile/personal_access_tokens
这里错了好多次,问gpt让我ping了一遍又curl测试了一遍才发现学校用的这个是http的 -
获取GitHub的token,登录 GitHub,前往 Settings > Developer settings > Personal access tokens 创建一个新令牌,依然确保选择仓库相关权限。
-
修改以下脚本的内容,然后给它权限
chmod +x migrate_gitlab_to_github.sh
#!/bin/bash
# 设置你的 GitLab 信息
GITLAB_USERNAME="1234567"
GITLAB_TOKEN="kfcv50"
GITLAB_GROUP="kfccrazyfriday"
# GitHub 账号信息
GITHUB_USERNAME="7654321"
GITHUB_TOKEN="ilovemcdonald" # 替换为你的 GitHub token
# 仓库列表
REPOS=("Homework-0" "Homework-1" "Homework-2" "Homework-3" "Homework-4")
for REPO in "{REPOS[@]}"
do
echo "🚀 正在迁移REPO ..."
# 克隆 GitLab 仓库(--mirror 包含全部分支/标签/历史)
git clone --mirror http://{GITLAB_USERNAME}:{GITLAB_TOKEN}@gitlab.cse.lehigh.edu/{GITLAB_GROUP}/{REPO}.git
if [ ? -ne 0 ]; then
echo "❌ 克隆失败,跳过REPO"
continue
fi
cd {REPO}.git || exit
# 使用 gh 在 GitHub 上创建新私有仓库(如果已存在可跳过)
gh repo create{GITHUB_USERNAME}/{REPO} --private
# 设置 GitHub 为新的远程地址,并在 URL 中嵌入 token
git remote set-url origin https://{GITHUB_USERNAME}:{GITHUB_TOKEN}@github.com/{GITHUB_USERNAME}/{REPO}.git
# 推送所有内容
git push --mirror
cd ..
rm -rf{REPO}.git
echo "✅ $REPO 迁移完成"
done
- 执行脚本即可,有bug根据输出以及当前步骤排查即可,我遇到的问题包括不限于:
- 仓库需要指定的网页名与仓库名字不一致(空格或者下划线的区别)
- 上传者的邮箱在自己的github账户中设置了private,就会失败,此时会准确的报错,需要把邮箱取消private
- 有些文件大于100M,比如我的一个作业传了一个100多兆的release版本,github不能接受,解决办法没想到太好的,因为就算删除那些文件,版本记录中依然还要留存然后上传,我也没想太好的办法,就用本文下半部分的方法作为新仓库保留过去的一次时间戳上传GitHub了
给历史打上过去的时间戳备份到GitHub上
我这里的核心诉求就一个,对原来的没使用版本控制的项目文件夹打上一个过去对应时间的commit,然后上传github仓库,让其显示正确的activity时间,方法很简单
- 像上文介绍的,获取GitHub token以及登录GitHub cli工具
-
我推荐手动操作而不是批量脚本,以homework-3这个项目为例
cd ./homework-3
git init
git add .
GIT_AUTHOR_DATE="2023-07-25T12:00:00" GIT_COMMITTER_DATE="2023-07-25T12:00:00" git commit -m "Initial commit"
gh repo create homework_3 --private --confirm
git remote add origin https://<username>:<token>@github.com/<username>/homework_3.git
git push -u origin main
有了AI以后甚至人与人在网络上的链接都变少了,像这种小问题我的第一选择先是问AI直接获取方案,然后没事的时候再去搜索引擎搜一下,去博客网站、csdn里淘点可能有用小垃圾
Comments NOTHING