如何将使用--bare克隆的Git仓库更改为与使用--mirror克隆的仓库匹配?

10

这个问题与 git - how to mirror file from other repo 或者 How do I update my bare repo? 不同。

由于使用 --mirror 克隆的存储库是一个裸仓库,那么我能否让使用 --bare 克隆的存储库像使用 --mirror 克隆的存储库一样呢?只需要修改配置文件就可以实现吗?

如果不行,是否有其他方法可以将一个裸仓库转换为镜像仓库呢?

另一个问题:为什么不能在镜像仓库中使用 git push --all 命令,而该命令则可在裸仓库中执行呢?


2
你可以在任何编辑器中轻松地编辑配置文件。只需将分支引用设置为镜像版本库中的引用方式(+refs/*:refs/),删除远程跟踪分支(从packed-refs和refs/remote//*中),添加“mirror=true”,然后重新运行git fetch即可。 - fork0
@fork0 这个简单的操作似乎不起作用... - thinke365
具体是什么出了问题?有错误信息吗?(顺便说一句,我没有提到mirror=true应该添加在哪个部分。它是[core]部分)。 - fork0
3个回答

17

将使用 git clone --bare 克隆的仓库更改为与 git clone --mirror 相匹配的仓库,请执行以下操作:

$ git config remote.origin.fetch "+refs/*:refs/*" 
$ git config remote.origin.mirror true

然后执行 git fetch 命令,一切应该都是最新的。


进一步清理以摆脱远程跟踪分支(所有分支都在镜像上本地):git branch -r | xargs -rt -I{} git branch -d -r {} - akhan

2

现今:

git remote add --mirror=fetch origin <url>

那么

git fetch

2
如果您使用 git clone --mirror 克隆了您的 repo,那么遵循 默认的 matching 推送策略,执行 git push --all 将会把所有本地分支推送到远程 repo。
但是,如果您的远程 repo 已经作为一个远程引用添加到了您的本地 repo 中(即您的本地 repo 是从另一个远程 repo 克隆的),那么执行 git push --all secondRemoteRepo 将找不到许多匹配的分支需要推送,除非您先获取这些分支。
所以应该这样做:
git fetch secondRemoteRepo
git push --all secondRemoteRepo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接