我已经在ubuntu 12.04上安装了gitlab(手动)。
有一些包含PSD的存储库(Adobe photoshop文件)。 我们希望实现的是,每当有人将提交推送到gitlab服务器时,它将自动执行:
注意:第2步与此问题无关。
无论如何,我们设法下载了将PSD转换为PNG的工具,包括安装Ruby,一些Ruby Gems和PSD.rb(Google PSD.rb,如果有人有兴趣的话)
问题是我们不希望在客户端管理安装(Ruby,gems等),因为我们假设我们很难在许多windows,mac和linux机器上维护安装
所以我们希望实现的是当有人进行git push并且提交中有PSD文件时,上面的内容将在服务器端钩子中执行。
我们已尝试在预接收挂钩中执行此操作,但我们无法修改提交内容(例如,从提交中删除PSD,将新文件 - PNG添加到提交中)
在服务器端有没有其他方法可以执行上述操作?或者我们可以探索其他方法吗?
答案 0 :(得分:3)
您无法修改提交。
您可以拒绝提交,并且在完成此操作后,您可以根据收到的内容进行新的不同的提交。
也就是说,你拿走你收到的东西,把它保存在别的地方,拒绝提交,然后拿出保存的东西,做出你的改变,然后做出新的提交。对于试图推送某些东西的用户来说,看起来他们的提交被拒绝了,然后其他人(打字速度非常快)做了他们所做的所有相同的工作,但随后清理了它并提交了一个略有不同的版本阅读"拒绝"消息。
请注意,我并不是特别推荐这个想法,也不会写代码来实现它,但它应该可以正常工作。
您还可以使用不同的两步法,其中涉及两个不同的服务器:
用户因此从" pure"中读取项目,写入内容,将其推送到"转换器",然后从" pure"获取更新的(不同的)提交并丢弃他们的"不清洁",未转换的提交。
这与第一个系统的过程完全相同,只是它对每个人的工作方式都比较明显,用户必须知道如何从"纯粹的"并推送到#34;转换器"。在第一个系统中,单个git存储库和机器同时充当" pure" (当提供清理过的东西时)和"转换器" (当接收并秘密保存但随后拒绝推送时)。
答案 1 :(得分:0)
重写服务器上的提交是一个坏主意,原因与重写历史相同。
另一种选择是设置git-annex和dropboxannex以便在投放箱上存储PSD。
服务器提交挂钩可以拒绝任何具有非git-annex
-ED PSD的推送。
在客户端上,预提交挂钩可以自动将PSD添加到git-annex
。