Git hooks - 如何将文件从一个文件夹复制到同一个git分支中的另一个文件夹

时间:2013-12-28 10:17:12

标签: git githooks

我正在“locales / US / en /”文件夹下创建/更新文件。这些文件应该被自动复制并在git push / post-commit期间提交到另一个文件夹“content / en-US”中,并在同一分支中。你可以分享一下你如何为上述要求编写git hook的输入吗?

1 个答案:

答案 0 :(得分:1)

我的建议是将此作为预提交步骤而不是服务器端的提交后或推后推送。

将此作为预提交步骤将使您更好地控制每次提交中实际发生的事情,并且将更好地遵循git commit是自包含的内容修改单元而不是对文件进行任意操作。

将此作为提交的一部分,还可以让您在resetcheckout等等时更轻松地重新创建开发树(内容)的状态。

你的预提交钩子可能是:

  #!/bin/sh

  for FILE in `exec git diff-index --check --cached HEAD -- | grep 'locales/US/en'` ; do
     echo "Publishing $FILE to content/en-US"
     cp $FILE content/en-US || { echo "Failed to publish $FILE"; exit 1; }
     git add "content/en-US/$FILE" || { echo "Failed to git add content/en-US/$FILE"; exit 1; }
  done
  exit

请注意特别难看的grep来过滤相关文件 - 您可以通过将git diff-index结果放入bash数组并为您的目录和文件模式进行通配来改进它。

另请注意,尝试提交时始终会复制文件。如果由于任何原因导致提交中止,它将在您重试时再次尝试复制文件。您当然可以在content / en-US目录中添加一个关于文件是否存在(和相同!)的检查,以避免多次复制。