合并时Git并更新文件的内容

时间:2016-10-05 05:50:10

标签: git hook

我有一个包含用C编写的代码的git存储库。其中一个文件是包含该行的Version.c文件

IEnumerator Translate()
{
    var projectile = Projectile.transform; // Cache the transform
    while (IsMoving)
    {
        // Calculate the next position the transform should be in the next frame.
        var delta = projectile.forward * ProjectileSpeed * Time.deltaTime;
        var nextPosition = projectile.position + delta;
        // Do a raycast from current position to the calculated position to determine if a hit occurs
        RaycastHit hitInfo;
        if (Physics.Linecast(projectile.position, nextPosition, out hitInfo, CollisionLayerMask))
        {
            projectile.position = hitInfo.point;
            OnCollision(hitInfo); // Ok, we hit
        }
        else projectile.position = nextPosition; // Nope, haven't hit yet
        yield return null;
    }
}

我有一个脚本可以找到这一行,并将数字0增加到下一个整数。该脚本是用Perl编写的,但我可以很容易地使用awk或sed。

当分支合并到master时,我想在git中自动触发脚本。我认为服务器端钩子是正确的方法。但是,我不确定这是否是最佳方法?

例如,它是否需要在主分支上执行git commit或git add?假设这是最好的方法,你能推荐合适的钩子吗?或者有更好的方法来解决同样的问题吗?

1 个答案:

答案 0 :(得分:1)

有一个钩子post-merge可以由git merge调用。但它适用于当地的回购。

如果您希望Git追踪更改,是的,您需要添加并提交它。这在远程仓库中不适合。

在此钩子中,您可以检查当前分支是否为master。如果是,请进行更改,添加和提交。如果没有,就别做其他事。

git merge的任何选项在部署后都无法绕过此钩子,这有时可能会令人讨厌。如果你想要禁用钩子,有一些方法可以完成这项工作。设置一个可在钩子内到达的标志变量,检查其值并继续。您可以在git merge之前导出环境变量,然后再将其取消设置。或者,您可以设置自定义配置密钥。例如,事先git config my.post-merge truegit config my.post-merge false。在钩子中,检查git config --get my.post-merge的值。另一种方法是更改​​钩子的名称,例如mv .git/hooks/post-merge .git/hooks/post-merged。在需要时将其更改回来。