如何判断git repo是否是镜像?

用户名

我正在努力使自己了解git镜像。给定一个工作副本,我如何确定它是否是另一个存储库的镜像(或正在镜像)?

干杯。

星期二

正如文档所述,实际上有两种镜像git remote

当使用创建抓取镜像时--mirror=fetch,ref不会存储在refs / remotes /名称空间中,而是将远程refs /中的所有内容直接镜像到本地存储库中的refs /中。该选项仅在裸仓库中才有意义,因为获取将覆盖所有本地提交。

当使用创建了一个推送镜像时--mirror=pushgit push它将始终像--mirror已通过一样。

git clone --mirror通过其两个关键设置core.bare及其fetch可以检测到获取镜像(如果使用,您将获得的镜像

$ git remote add --mirror=fetch rfetch ssh://upstream.host/path/to/repo.git
$ git config --get-all remote.rfetch.fetch
+refs/*:refs/*
$ 

检测后视镜比较简单:

$ git remote add --mirror=push rpush ssh://upstream.host/path/to/repo.git
$ git config --get --bool remote.rpush.mirror
true

如果一个特定的设置为,但库并没有设置为(你可以发现使用;都做同样的事情),你有一个困惑库(比如我发来说明上述:-)之一)。如果有多个部分,并且每个部分都有,那么您将拥有一个奇怪的最佳存储库(理论上,具有多个远程对象的访存镜像可以作为一种联合存储库,但是所有远程对象都需要使用不同的引用,例如,只有一个可以有一个分支)。您可以使用提取与正则表达式匹配的项目来找到所有的遥控器这里remote.remote.fetch+refs/*:refs/*core.baretruegit config --get --bool core.baregit rev-parse --is-bare-repositoryremote.remotefetch=+refs/*:refs/*mastergit config --get-regexpgit config --list^remote\.awk 如果编写脚本,实际上可能是最合适的处理器:

$ git config --list | awk -F. '$1 == "remote" { if (!r[$2]++) print $2 }'
rfetch
rpush
$ 

获取了一个远程列表之后,您就可以通过获取或推送镜像来探测每个镜像的镜像了。如果任何一个取镜,core.bare应该是true

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章