2

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

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

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

这样我希望他们能发现错误,立即纠正并从错误中吸取教训。另一种方法可能会浪费数小时,想知道为什么某些代码无法正常运行。

我认为正则表达式很容易,例如^>>>>>>>[^>]. 所以更重要的是 Gitolite 是否允许这样做以及测试和生成这样的脚本所需的努力?有人有我可以改编的示例脚本吗?

我暂时只会警告用户,但我想稍后切换并彻底拒绝提交。

4

1 回答 1

1

您需要做的就是定义一个VREF(就像一个普通的更新挂钩)

然后,您可以像 repo 中的任何其他 R/W gitolite 规则一样应用此 VREF 规则(您只能将此规则应用于某些人/分支/文件夹/文件)

您可以轻松解析被推送文件的内容,就像在这个钩子中一样:

#!/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
于 2013-10-22T11:40:11.480 回答