2011-09-09 103 views
0

我想将我的“vendor/assets”目录中的子模块中的一些文件复制到另一个目录 - “public/assets”。我听说过更新钩子,但我不确定它们是否适用于子模块。我写了一个简单的钩子,并从命令行运行更新,但它不起作用。如何为git子模块编写更新钩子?

我的更新钩看起来是这样的:

#.git/gooks/update.rb 

#!/usr/bin/env ruby 

puts "Copying files..." 

因此,这甚至可能吗?

btw,我使用Braid来管理我的子模块。

回答

1

update挂钩仅在有人推入当前存储库时才会运行,这听起来不像您想要的。你可以使用post-commit钩子,如果你想每次在仓库中创建提交时将这些文件复制到位。 (这应该是足够的,因为当您更改子模块的提交时,您需要在主项目中提交任何子模块的新版本。这将是更新public/assets中的文件的一个自然点。 )

你说你的测试钩没有运行 - 这可能只是因为你的名字错了。更新挂钩必须是名为.git/hooks/update的可执行文件(n.b.没有.rb后缀)。同样,提交后挂钩必须是.git/hooks/post-commit

您不应在任何特定子模块中为此任务创建钩子,因为钩子将执行的操作仅限于主项目。因此,由于提交子模块的新版本或更新任何随机文件而导致您担心的更改无关紧要。

对于书写挂钩,您会发现official githooks文档很有用,可能还有这些additional tips

+0

我明白了。但是使用最好的钩子是不是预先提交?这样复制的文件也将包含在提交中。 – picardo

+0

哦,我曾假设这些文件将被解除。我不知道你是否可以在'pre-commit'钩子中放置额外的文件,但是很容易测试... –

+0

是的,这似乎工作正常,虽然你'git add'在'pre-commit'钩子中不会出现在提交消息的有用的注释掉的部分。 –