Git:裸机还能跟踪其他非git位置吗?如果是这样,怎么样?

时间:2012-03-12 04:21:45

标签: git

我有一个只接受推送的裸仓。当进行这样的推送时,我希望这些更改能够通过裸仓库反映到另一个位置(不是克隆,只是一个没有.git文件夹的静态位置)。

这可能吗?

2 个答案:

答案 0 :(得分:2)

不确定。为了在有人推动时执行某些操作,请创建post-receive hook。为了将这些更改从裸存储库中获取到另一个目录(不是Git存储库),您需要创建一个git archive并将其展开到要更新的位置。

post-receive挂钩在标准输入上接收已按推送更新的所有引用的列表及其旧值和新值,采用以下格式(其中SP是空格字符,<old-value><new-value>是修订版,<ref-name>是已更新的参考号:

<old-value> SP <new-value> SP <ref-name>

如果您只想将master镜像到目标目录中,那么只要看到这样的行,您就只想执行脚本。

例如,像这样的东西可能会起作用(未经测试,所以在信任之前在你不关心的位置进行测试):

#!/bin/sh
while read old new ref; do
    if [ "$ref" = master ]; then
      git archive master | tar -x -C /path/to/expand/into
    fi
done

编辑:请注意,这有一个相当严重的缺点;如果删除(或移动)文件,则不会删除目标目录中的该文件。一个可能的解决方案是在归档行之前添加rm -rf /path/to/expand/into; mkdir /path/to/expand/into

答案 1 :(得分:0)

同意Brian的观点。但是,用例是什么?如果要跟踪更改,为什么不想要克隆?