我现在遇到了一些困境,因为每当远程存储库更新时(即每当有人运行git push时)我都需要一个脚本来运行,它可以从存储库中的文件构建软件包。然后将这些包放入git服务器上的一个目录中,该目录通过HTTP向客户端公开以供将来使用。
问题是,我不确定如何在更新后的钩子中访问存储库中的文件。
如果有人能提供一些见解,我们将非常感激。
答案 0 :(得分:3)
首先,您可能希望使用post-receive挂钩而不是post-update。根据{{3}}手册页,post-receive会取代更新后的内容。
也就是说,你的钩子脚本是在.git / hooks子目录中执行的,所以如果你做一个简单的
cd ..
您的脚本位于git存储库的工作树中。例如,这是一个很小的脚本,可以确保每当您推送到存储库时都会更新远程git存储库的工作树:
#!/bin/sh
export GIT_DIR=
cd ..
echo "Resetting working tree..."
git reset --hard
echo "Finished resetting working tree."
请注意,您需要取消设置GIT_DIR环境变量;它会自动设置,只要它的设置,所有git命令都将在该目录中运行 - 无论你在哪里进行。
答案 1 :(得分:1)
如果您的远程代理是裸共享仓库,则没有文件副本。 你可以改变它,然后你就必须运行自动结账。
如果您的包装中有文件,最好还是将备份放在单独的目录中
我将以下内容用于您命名的确切目的
这是博客文章,向我展示了如何设置它 http://toroid.org/ams/git-website-howto
这是我在下面的摘要说明
在repo之外创建一个目录并将工作树放在那里,然后使它不再是一个裸仓库,因此有一个文件的副本,然后在运行打包脚本之前运行一个
# create the repo with files that live in a seperate folder
cd /share/proj/all/$1/repo
git --bare init --shared
git config core.worktree ../actual
git config core.bare false
git config receive.denycurrentbranch ignore
# add a hook to checkout the repo into the files directory automatically on push
echo "#!/bin/sh" > hooks/post-receive
echo "git checkout -f" >> hooks/post-receive
chmod +x hooks/post-receive