要在不复刻(fork)的情况下维护仓库镜像,可以先使用特殊的克隆命令,再镜像推送到新仓库。
如果项目托管在其他 Git 托管服务,可以使用 GitHub Importer 自动导入。参见关于 GitHub Importer。
推送到副本或镜像之前,必须先在 GitHub.com 上创建新的仓库。以下示例中的 exampleuser/new-repository 或 exampleuser/mirrored 是镜像目标。
镜像仓库
- 打开终端;在 Windows 上使用 Git Bash。
- 创建仓库的裸克隆。
git clone --bare https://github.com/EXAMPLE-USER/OLD-REPOSITORY.git
- 进入本地目录,镜像推送到新仓库。
cd OLD-REPOSITORY
git push --mirror https://github.com/EXAMPLE-USER/NEW-REPOSITORY.git
- 删除此前创建的临时本地仓库。
cd ..
rm -rf OLD-REPOSITORY
执行前核对:以上命令按官方示例保留。裸克隆通常生成 OLD-REPOSITORY.git 目录,原示例的 cd 和删除命令没有 .git 后缀,应先核对实际生成目录。镜像推送可能覆盖或删除目标引用;删除步骤只适用于已确认的临时克隆目录。这里的 rm -rf 是 Git Bash/Unix 命令,不是 PowerShell 命令。
镜像包含 Git LFS 对象的仓库
- 打开终端或 Git Bash。
- 创建仓库的裸克隆。将示例用户名替换为仓库所有者,将仓库名替换为要复制的仓库。
git clone --bare https://github.com/EXAMPLE-USER/OLD-REPOSITORY.git
- 进入刚克隆的仓库。
cd OLD-REPOSITORY
- 拉取仓库中的 Git LFS 对象。
git lfs fetch --all
- 镜像推送到新仓库。
git push --mirror https://github.com/EXAMPLE-USER/NEW-REPOSITORY.git
- 将 Git LFS 对象推送到镜像。
git lfs push --all https://github.com/EXAMPLE-USER/NEW-REPOSITORY.git
- 删除临时本地仓库。
cd ..
rm -rf OLD-REPOSITORY
这组示例同样需要按实际克隆目录核对路径;普通 Git 引用的镜像推送与 LFS 对象的上传是不同步骤。
镜像其他位置的仓库
要在其他位置维护镜像并持续获取原仓库更新,可以进行镜像克隆,然后定期推送变化。
- 打开终端或 Git Bash。
- 创建裸镜像克隆。
git clone --mirror https://github.com/EXAMPLE-USER/REPOSITORY-TO-MIRROR.git
- 设置向镜像推送的地址。
cd REPOSITORY-TO-MIRROR
git remote set-url --push origin https://github.com/EXAMPLE-USER/MIRRORED
与裸克隆一样,镜像克隆包含所有远程分支和标签;每次获取更新时,所有本地引用都会被覆盖,使其与原仓库保持一致。设置推送 URL 可以简化向镜像的推送。这里也应先核对实际生成的本地目录,通常带 .git 后缀。
- 更新镜像时,先获取更新,再推送。
git fetch -p origin
git push --mirror
延伸阅读
来源:GitHub 文档《复制一个仓库》,GitHub 文档贡献者。本文依据官方中文页面整理,保留全部操作步骤和代码,并增加目录、镜像推送与删除步骤的核对说明。官方中文页面注明部分内容可能由机器或 AI 翻译。
GitHub 文档正文采用 CC BY 4.0,见仓库许可证。本整理稿同样采用 CC BY 4.0,按现状提供,不表示 GitHub 官方认可。
文中第一人称、实验、运行记录与测量结果均归原作者或原文示例。











暂无评论内容