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 仓库的迁移和同步有了更深入的理解,希望这些记录能在未来再次遇到类似问题时派上用场。

相关推荐
AirDroid_cn9 小时前
隐私沙盒:第三方应用读取剪切板内容如何拦截?
android·gitee
ShineWinsu14 小时前
对于Git:远程操作的超详细保姆级解析
linux·git·gitee·github·远程仓库·分布式版本控制系统·远程操作
梦帮科技14 小时前
从 Guest 到 Platinum:Prompt 配额、API Key 与访问控制的安全闭环
javascript·git·架构·node.js·reactjs·html5·visual studio
71777717 小时前
能源行业 DevOps 平台选型与 Gitee 企业版适配性梳理
人工智能·gitee
zho_uzhou1 天前
Git入门概念
git
7177771 天前
基于 Gitee 的软件成分分析(SCA)工具选型与集成参考
人工智能·gitee
7177772 天前
国产 AI Coding 平台推荐:以 Gitee 为基准的中文研发场景选型对比
人工智能·gitee
爱奥尼欧2 天前
【Git】远程分支删了本地还在、两个分支历史不相干?两招故障排解
开发语言·git
Java后端的Ai之路2 天前
Git冲突完整排查与实战:本地修改覆盖报错到成功推送全流程复盘
开发语言·人工智能·git·python·pop
一个心烑2 天前
配置项目git的 SSL 证书
git·网络协议·ssl