我现在遇到了一些困境,因为我需要一个脚本来在远程存储库更新时运行(即,每当有人运行 git push 时),它从存储库中的文件构建包。然后将这些包放置到 git 服务器上的目录中,该目录通过 HTTP 向客户端公开以供将来使用。
问题是,我不确定如何在更新后挂钩中访问存储库中的文件。
如果有人可以提供一些见解,将不胜感激。
我现在遇到了一些困境,因为我需要一个脚本来在远程存储库更新时运行(即,每当有人运行 git push 时),它从存储库中的文件构建包。然后将这些包放置到 git 服务器上的目录中,该目录通过 HTTP 向客户端公开以供将来使用。
问题是,我不确定如何在更新后挂钩中访问存储库中的文件。
如果有人可以提供一些见解,将不胜感激。
首先,您可能希望使用 post-receive 挂钩而不是 post-update。根据githooks(5)手册页,post-receive 取代 post-update。
也就是说,你的钩子脚本是在 .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 命令都将在该目录中运行——无论你 cd'ed 到哪里。
如果您的远程存储库是一个裸共享存储库,则没有文件副本。你可以改变它,然后你只需要运行一个自动结帐。
如果您打包 hte 文件,最好将 repo 也放在单独的目录中
我将以下内容用于您命名的确切目的
这是向我展示如何设置它的博客文章 http://toroid.org/ams/git-website-howto
以下是我的简要说明
在存储库之外创建一个目录并将工作树放在那里,然后使它不再是一个裸存储库,因此有文件的副本,然后在运行打包脚本之前运行
# 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