2011-05-09 48 views
4

我希望我的post-receive钩子负责在特定条件下更新repo 本身中的版本文件。所以,假设我在我的存储库中有一个文件version.txt, 我希望post接收挂钩来更新version.txt中的版本字符串。希望git post接收钩子以进行新的提交和推送

这意味着再次推动回购。这可能吗?

谢谢!

回答

2

我宁可不尝试进行任何进一步的承诺/推,但为了使用filter driver,在结帐/更新才能够生成用于version.txt文件(用正确的版本字符串内即)正确的内容

enter image description here

smudge脚本,如果它能够识别的version.txt文件的内容(即它won't have the name/path of said file as parameter),将正确的信息替换该文件的模板部分。

+0

@VonC是否有可能在接收存储库中有这个?由于更新version.txt的条件可能只适用于中央/接收repo,并且过滤器驱动程序仅适用于从本地repo提交(并检出)权限? – manojlds 2011-05-09 18:52:30

+0

@manojolds:这个想法是*永远不会*提交一个包含这些信息的文件,而是提交脚本能够在下游回购需要它时生成正确的内容。过滤器驱动程序是'.gitattributes'文件中的声明,可以在repo中进行克隆/传播。事实上,他们没有在中央仓库中激活(因为你只是推到这些仓库中),而是在本地仓库中,这并不会改变中央仓库不需要额外提交的事实:您将生成正确的内容何时何地您实际上需要它。 – VonC 2011-05-09 19:59:40

+0

太棒了。谢谢,VonC。 .gitattributes似乎对此很完美。 – Jacko 2011-05-09 20:18:32

2

你可以在你的服务器上有一个你的仓库的工作目录。在post-receive,git pull工作目录下,根据需要更新version.txt并提交并推送。这会再次触发后接收,所以要小心你如何做你的条件更新,否则它会进入一个循环。

#!/bin/sh 
unset GIT_DIR 
cd /path/to/repo.wd 
git pull 
echo "new content" > version.txt 
git add version.txt 
git commit -m "updating version.txt" 
git push origin master