如何使用git服务器端钩子和gitlab更改提交的内容

如何使用git服务器端钩子和gitlab更改提交的内容,git,gitlab,Git,Gitlab,我已经在ubuntu 12.04上手动安装了gitlab 有些存储库包含PSD(Adobe photoshop文件)。 我们希望实现的是,每当有人将提交推送到gitlab服务器时,它都会自动: 将PSD转换为PNG 移动到PSD到dropbox(或其他云存储) 从提交中删除PSD 将PNG添加到提交中 注意:步骤2与此问题无关 无论如何,我们已经设法下载了将PSD转换为PNG的工具,其中包括安装Ruby、一些Ruby Gems和PSD.rb(如果有人感兴趣,可以使用Google PSD.rb)

我已经在ubuntu 12.04上手动安装了gitlab

有些存储库包含PSD(Adobe photoshop文件)。 我们希望实现的是,每当有人将提交推送到gitlab服务器时,它都会自动:

  • 将PSD转换为PNG
  • 移动到PSD到dropbox(或其他云存储)
  • 从提交中删除PSD
  • 将PNG添加到提交中
  • 注意:步骤2与此问题无关

    无论如何,我们已经设法下载了将PSD转换为PNG的工具,其中包括安装Ruby、一些Ruby Gems和PSD.rb(如果有人感兴趣,可以使用Google PSD.rb)

    问题是我们不希望在客户端管理安装(Ruby、gems等),因为我们认为在许多windows、mac和linux机器上维护安装会很困难

    因此,我们希望实现的是,当有人执行git推送时,上面的内容将在服务器端钩子中执行,并且提交中有PSD文件

    我们已经尝试在预接收钩子中这样做,但我们无法修改提交的内容(例如,从提交中删除PSD,将新文件-PNG添加到提交中)


    在服务器端是否有其他方法来执行上述操作?或者我们可以探索其他方法?

    您不能修改提交

    您可以拒绝提交,这样做之后,您可以根据收到的内容进行新的和不同的提交

    也就是说,您将接收到的内容保存到其他位置,拒绝提交,然后将保存的内容进行更改并重新提交。对于试图推送某个内容的用户,看起来他们的提交被拒绝了,然后其他人(打字速度非常快)完成了与他们相同的工作,但在阅读“拒绝”消息时,将其清理并提交了稍微不同的版本

    请注意,我不是特别推荐这个想法,也不打算编写代码来实现它,但它应该可以正常工作

    您还可以使用不同的两步方法,其中涉及两个不同的服务器:

    • 服务器“纯”只提供PNG内容,不接受用户的推送
    • 服务器“converter”接受用户推送,接受用户推送(此处无拒绝),然后清理用户并将清理后的版本推送至“pure”
    因此,用户从“pure”读取项目,编写内容,将其推送到“converter”,然后从“pure”读回内容,以获得更新的(不同的)提交,并丢弃其“不干净的”、未转换的提交


    这与第一个系统的过程完全相同,只是每个人都更清楚它是如何工作的,用户必须知道如何从“纯”获取和推送到“转换器”。在第一个系统中,一个git存储库和一台机器同时充当“纯”(交付清理过的内容时)和“转换器”(接收并秘密保存推送,但随后拒绝推送)。

    在服务器上重写提交是个坏主意,原因与重写历史相同

    另一个选项是在dropbox上设置和存储PSD

    服务器提交钩子可以拒绝任何具有非git附件的推送PSD。
    在客户机上,预提交钩子可以自动将PSD添加到git附件中,git部分的可能重复项,然后针对GitLab钩子规范,这可能是完全重复的:在发布我的链接之前,我已经检查了这些链接。它们是相似的问题,但仍然不同于我试图实现的目标