我正在努力使自己了解git镜像。给定一个工作副本,我如何确定它是否是另一个存储库的镜像(或正在镜像)?
干杯。
正如文档中所述,实际上有两种镜像:git remote
当使用创建抓取镜像时
--mirror=fetch
,ref不会存储在refs / remotes /名称空间中,而是将远程refs /中的所有内容直接镜像到本地存储库中的refs /中。该选项仅在裸仓库中才有意义,因为获取将覆盖所有本地提交。当使用创建了一个推送镜像时
--mirror=push
,git 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.bare
true
git config --get --bool core.bare
git rev-parse --is-bare-repository
remote.remote
fetch=+refs/*:refs/*
master
git config --get-regexp
git config --list
^remote\.
awk
如果编写脚本,实际上可能是最合适的处理器:
$ git config --list | awk -F. '$1 == "remote" { if (!r[$2]++) print $2 }'
rfetch
rpush
$
获取了一个远程列表之后,您就可以通过获取或推送镜像来探测每个镜像的镜像了。如果任何一个取镜,core.bare
应该是true
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句