Git 仓库在内网与 Gitee 间迁移及同步记录

Git 仓库在内网与 Gitee 间迁移及同步记录

在软件开发过程中,常常会遇到需要将代码仓库进行迁移或同步的情况。近期我就碰到了要把 Gitee 代码仓库移植到内网代码仓库,并且后续还得进行同步的需求。这里把整个过程记录下来,方便以后自己参考,也希望能帮助到有同样需求的朋友。

一、将 Gitee 仓库移植到内网仓库

1. 克隆 Gitee 仓库到本地

首先,我们需要在本地克隆 Gitee 仓库,并且要使用--mirror选项,这样才能确保克隆所有内容,包括提交日志、标签等。在终端中执行以下命令:

复制代码
git clone --mirror https://gitee.com/yourusername/your-repository.git

记得把https://gitee.com/yourusername/your-repository.git替换成你实际的 Gitee 仓库地址。

2. 在内网代码仓库创建新仓库

接着,在内网代码仓库平台(比如 GitLab、Gitea 等)创建一个新的空仓库,创建完成后要记住该仓库的地址。

3. 推送本地镜像仓库到内网仓库

进入刚刚本地克隆的仓库目录,使用git push命令将本地镜像仓库推送到内网仓库:

复制代码
cd your-repository.git

git push --mirror <内网仓库地址>

这里的<内网仓库地址>要替换为你在内网代码仓库平台创建的新仓库地址。

二、后续同步操作

(一)有外网连接时

1. 从 Gitee 仓库同步更新到内网仓库

手动同步:适用于更新不频繁的情况。定期执行以下操作:

复制代码
# 进入本地克隆的镜像仓库目录

cd your-repository.git

# 从Gitee仓库拉取最新更新

git fetch origin

# 将拉取到的更新推送到内网仓库

git push --mirror <内网仓库地址>

自动化同步 :对于更新频繁的场景,可以使用脚本结合定时任务来实现。比如下面这个简单的 Python 脚本,再利用cron等定时任务工具定期执行:

复制代码
import subprocess

# 定义本地仓库路径和内网仓库地址

local\_repo\_path = 'your-repository.git'

internal\_repo\_url = '<内网仓库地址>'

# 进入本地仓库目录

subprocess.run(\['cd', local\_repo\_path], shell=True)

# 从Gitee仓库拉取最新更新

subprocess.run(\['git', 'fetch', 'origin'], cwd=local\_repo\_path)

# 将拉取到的更新推送到内网仓库

subprocess.run(\['git', 'push', '--mirror', internal\_repo\_url], cwd=local\_repo\_path)

记得把your-repository.git替换为本地克隆的镜像仓库目录,<内网仓库地址>替换为实际的内网仓库地址。

2. 从内网仓库同步更新到 Gitee 仓库

操作步骤与从 Gitee 同步到内网类似:

手动同步

复制代码
# 进入本地克隆的镜像仓库目录

cd your-repository.git

# 从内网仓库拉取最新更新

git fetch <内网仓库地址别名>

# 将拉取到的更新推送到Gitee仓库

git push --mirror \<Gitee仓库地址>

这里的<内网仓库地址别名>是在本地仓库中为内网仓库设置的别名(一般在添加远程仓库时指定),<Gitee仓库地址>是 Gitee 上原仓库的地址。

自动化同步:同样可以编写 Python 脚本结合定时任务实现,示例如下:

复制代码
import subprocess

# 定义本地仓库路径、Gitee仓库地址和内网仓库地址

local\_repo\_path = 'your-repository.git'

gitee\_repo\_url = '\<Gitee仓库地址>'

internal\_repo\_url = '<内网仓库地址>'

# 进入本地仓库目录

subprocess.run(\['cd', local\_repo\_path], shell=True)

# 从内网仓库拉取最新更新

subprocess.run(\['git', 'fetch', internal\_repo\_url], cwd=local\_repo\_path)

# 将拉取到的更新推送到Gitee仓库

subprocess.run(\['git', 'push', '--mirror', gitee\_repo\_url], cwd=local\_repo\_path)

your-repository.git替换为本地克隆的镜像仓库目录,<Gitee仓库地址>替换为 Gitee 上原仓库的地址,<内网仓库地址>替换为实际的内网仓库地址。

(二)内网无外网连接时

1. 使用移动存储设备同步

从 Gitee 克隆仓库到可联网的机器:在能访问互联网的机器上,执行克隆命令:

复制代码
git clone --mirror https://gitee.com/yourusername/your-repository.git

将克隆的仓库复制到移动存储设备:把克隆下来的仓库文件夹复制到 U 盘等移动存储设备。

将仓库复制到内网机器:把 U 盘连接到内网机器,将仓库文件夹复制到内网机器指定目录。

在内网机器上推送仓库到内网代码仓库:在复制到内网机器的仓库目录下,执行推送命令:

复制代码
cd your-repository.git

git push --mirror <内网仓库地址>

后续更新同步,重复上述步骤即可。不过要注意使用移动存储设备时的数据安全性,避免数据泄露或感染病毒。

2. 通过中间服务器中转同步

准备中间服务器:准备一台既能访问互联网,又能与内网通信的中间服务器。

在中间服务器上克隆 Gitee 仓库:在中间服务器上执行克隆命令:

复制代码
git clone --mirror https://gitee.com/yourusername/your-repository.git

定期从 Gitee 仓库拉取更新 :在中间服务器上,定期执行git fetch命令拉取最新更新:

复制代码
cd your-repository.git

git fetch origin

配置中间服务器与内网代码仓库的通信:确保中间服务器能访问内网代码仓库,并配置好身份验证信息(如 SSH 密钥、用户名和密码等)。

将更新推送到内网代码仓库:在中间服务器上,执行推送命令:

复制代码
git push --mirror <内网仓库地址>

也可以编写脚本结合定时任务工具(如 Linux 上的cron)实现自动化同步,Python 脚本示例如下:

复制代码
import subprocess

# 定义本地仓库路径和内网仓库地址

local\_repo\_path = 'your-repository.git'

internal\_repo\_url = '<内网仓库地址>'

# 进入本地仓库目录

subprocess.run(\['cd', local\_repo\_path], shell=True)

# 从Gitee仓库拉取最新更新

subprocess.run(\['git', 'fetch', 'origin'], cwd=local\_repo\_path)

# 将拉取到的更新推送到内网仓库

subprocess.run(\['git', 'push', '--mirror', internal\_repo\_url], cwd=local\_repo\_path)

your-repository.git替换为本地克隆的镜像仓库目录,<内网仓库地址>替换为实际的内网仓库地址。同时要注意,通过中间服务器中转同步时,要保障中间服务器的安全性,防止数据泄露和恶意攻击。

经过这次实践,对 Git 仓库的迁移和同步有了更深入的理解,希望这些记录能在未来再次遇到类似问题时派上用场。

相关推荐
空中湖1 小时前
免费在线PUA测试工具:识别情感操控,守护情感健康
git·测试工具
程序员小续3 小时前
git rebase 和git merge使用及区别
前端·git·后端
背影疾风6 小时前
Git版本管理系列:(一)使用Git管理单分支
大数据·开发语言·c++·git·学习·elasticsearch
彷徨而立6 小时前
【Git】git revert 或 git stash 或 git restore 都无法正常恢复库文件
git
HelloDam7 小时前
Git 小白入门教程
git
慈云数据18 小时前
构建自己的私有 Git 服务器:基于 Gitea 的轻量化部署实战指南
服务器·git·gitea
@hdd1 天前
Git三剑客:工作区、暂存区、版本库深度解析
git
Ai 编码助手1 天前
idea插件:AICommit,智能生成Git提交信息
java·git·intellij-idea
程序猿chen2 天前
《JVM考古现场(十六):太初奇点——从普朗克常量到宇宙弦的编译风暴》
jvm·git·后端·程序人生·金融·java-ee·量子计算