--reference-if-able对git fetch/push的影响及本地镜像同步配置方法
Git引用仓库与操作同步问题解答
一、--reference[-if-able]会不会触发引用仓库的fetch或push?
答案很明确:不会。--reference和--reference-if-able的核心作用就是帮你节省下载时间——当dirB需要从远程拉取对象时,先检查mirror/里有没有现成的,有的话直接从本地mirror复制,不用再从urlA下载。这俩参数只是让dirB在本地对象存储上“复用”mirror的资源,完全没把mirror设置成dirB的远程仓库。所以你在dirB里执行git fetch或者git push,只会和配置的默认远程(也就是urlA)交互,根本不会触发mirror的任何操作。
二、怎么让dirB的单次git fetch/git push同时更新mirror?
如果需要让dirB的操作同步带动mirror更新,有两种实用方案:
1. 给dirB添加mirror作为额外远程
在dirB目录下执行这条命令,把mirror设成一个本地远程:
git remote add local-mirror ../mirror
之后同步操作就可以同时操作两个远程:
- 同步拉取更新:
git fetch origin && git fetch local-mirror - 同步推送更新:
因为mirror是用--mirror创建的镜像仓库,推送时要用上--mirror参数保证完全同步:git push origin && git push local-mirror --mirror
2. 用Git钩子自动同步
不想每次手动敲两条命令?可以用Git的钩子脚本实现自动同步:
- 自动同步拉取:在dirB的
.git/hooks目录下新建post-fetch文件,给它加执行权限(chmod +x .git/hooks/post-fetch),内容写:
这样每次在dirB执行#!/bin/sh cd ../mirror && git fetchgit fetch后,脚本会自动帮你更新mirror。 - 自动同步推送:同样在
.git/hooks下新建post-push文件,加执行权限,内容写:
以后在dirB推代码到远程后,mirror会自动同步最新状态。#!/bin/sh cd ../mirror && git push --mirror
内容的提问来源于stack exchange,提问作者mastupristi
相关产品推荐
相关产品推荐

