转移gitlab仓库到GitHub & 给历史项目打上过去的时间戳备份到GitHub上

最后更新于 2025-03-28 14 次阅读


在完善简历,想要把上学期一个一直在学校的gitlab.edu上交作业的几个项目仓库转移到github账号上,然后把本科阶段的几个项目都上传备份上去,别在我电脑里的“整理本科所有工作”文件夹等待备份了

转移gitlab仓库到GitHub

操作顺序

  1. 终端登陆 gh
  2. 准备github token
  3. 准备gitlab token

  4. 我们编写终端脚本自动完成

    • 克隆仓库到本地
    • 自动在 GitHub 上创建对应的私有仓库
    • 上传仓库
    • 删除本地内容

注意:我们能克隆所有GitLab 仓库的贡献记录,如果把提交的邮箱加入GitHub账户中,activity贡献图也会正确显示在对应的时间上,但是不能同步.gitlab-ci相关文件,貌似是两者使用的不是同一个语法

分步解析

  1. 安装登录GitHub CLI工具
brew install gh
gh auth login
  1. 获取gitlalb访问令牌,至少要点上 read_repository 和 api 两个权限
    https://gitlab.com/-/profile/personal_access_tokens
    当然,我使用的是
    http://gitlab.cse.lehigh.edu/-/profile/personal_access_tokens
    这里错了好多次,问gpt让我ping了一遍又curl测试了一遍才发现学校用的这个是http的

  2. 获取GitHub的token,登录 GitHub,前往 Settings > Developer settings > Personal access tokens 创建一个新令牌,依然确保选择仓库相关权限。

  3. 修改以下脚本的内容,然后给它权限 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
  1. 执行脚本即可,有bug根据输出以及当前步骤排查即可,我遇到的问题包括不限于:
    • 仓库需要指定的网页名与仓库名字不一致(空格或者下划线的区别)
    • 上传者的邮箱在自己的github账户中设置了private,就会失败,此时会准确的报错,需要把邮箱取消private

- 有些文件大于100M,比如我的一个作业传了一个100多兆的release版本,github不能接受,解决办法没想到太好的,因为就算删除那些文件,版本记录中依然还要留存然后上传,我也没想太好的办法,就用本文下半部分的方法作为新仓库保留过去的一次时间戳上传GitHub了

给历史打上过去的时间戳备份到GitHub上

我这里的核心诉求就一个,对原来的没使用版本控制的项目文件夹打上一个过去对应时间的commit,然后上传github仓库,让其显示正确的activity时间,方法很简单

  1. 像上文介绍的,获取GitHub token以及登录GitHub cli工具

  2. 我推荐手动操作而不是批量脚本,以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里淘点可能有用小垃圾

最后更新于 2025-03-28