我可以编写一个服务器挂钩来警告包含Git冲突标记的文件吗?

时间:2013-10-22 10:05:54

标签: eclipse git gitolite

我通过Gitolite管理一个Git仓库,它有大约40个开发者和35,0000个文件。我们刚刚从CVS转换过来,所以很多人都在努力适应差异。

一旦出现这样的问题,我们的用户就会使用Eclipse和EGit进行工作。在CVS中,所有合并都是通过Team Sync进行的,并且冲突通过3向diff工具解决。在EGit中,合并冲突用标记装饰,以便开发人员忘记这些标记或假设它们以某种方式被移除。并非所有这些问题都会显示为编译错误,因为冲突可能在批处理文件或配置文件中。

使用这些工具的更多经验可能会解决大多数这些问题,但我想为Gitolite添加一个钩子,它会检查任何推送的.java,.bat,.xml或.properties文件,以查找以{{1}开头的任何行},<<<<<<<=======后跟任何其他字符,并向用户添加警告消息,突出显示问题及其所在的文件。

这样我希望他们能抓住错误,立即纠正并从错误中吸取教训。替代方案可能是浪费时间,想知道为什么某些代码无法正常运行。

我认为正则表达式很容易,例如>>>>>>>。因此,更重要的是Gitolite是否允许这样做,以及测试和生成这样一个脚本所需的工作量?有没有人有一个我可以适应的示例脚本呢?

我只会暂时警告用户,但我想翻转一个开关,然后直接拒绝提交。

1 个答案:

答案 0 :(得分:1)

您需要做的就是定义VREF (which is like a plain update hook)

然后,您可以像回购中的任何其他R / W gitolite规则一样应用此VREF规则(管理您可以仅对某些人/分支/文件夹/文件应用此规则)

您可以轻松解析正在推送的文件的内容,例如this hook

#!/bin/bash

while read old_sha1 new_sha1 refname; do
    echo "ns: " $new_sha1;
    echo "os: " $old_sha1;

    echo "----"

    git ls-tree -r $new_sha1 | cut -f 3 -d ' ' | cut -f 1 | while read file; do
        git cat-file blob $file
        # do your grep here
    done; 


done