如何推送到非裸 git 存储库,自动添加并提交工作树中的任何更改,然后重新签出当前分支以反映来自该推送的更改?
我在想这样的事情:
在远程(非裸仓库)上添加一个钩子以运行git add . && git commit -m "Automated commit" && git reset --hard
这种方法有什么缺点吗?还有另一种方法吗?
(免责声明:我知道这不是最理想的情况,但这就是我们公司所拥有的,我想让它尽可能精简,而不需要每个人都完全改变他们做事的方式)
谢谢!
如何推送到非裸 git 存储库,自动添加并提交工作树中的任何更改,然后重新签出当前分支以反映来自该推送的更改?
我在想这样的事情:
在远程(非裸仓库)上添加一个钩子以运行git add . && git commit -m "Automated commit" && git reset --hard
这种方法有什么缺点吗?还有另一种方法吗?
(免责声明:我知道这不是最理想的情况,但这就是我们公司所拥有的,我想让它尽可能精简,而不需要每个人都完全改变他们做事的方式)
谢谢!
在搞砸之后,我找到了一个很好的解决方案。
预接收钩子: 检查工作目录中的任何更改,添加/提交它们,然后在推送之前提醒用户他/她需要合并
#!/bin/sh
cd ../
unset GIT_DIR
CHANGED=$(git diff-index --name-only HEAD --)
if [ -n "$CHANGED" ]; then
git add -u .
git commit -m "Automated commit"
echo "There were uncommitted changes in the working directory...please pull them and push your changes again"
exit 1
fi
接收后挂钩:强制签出当前分支,以便更改将显示在工作目录中。这将覆盖工作目录中的任何更改,但这些更改已经被 pre-receive 钩子添加/提交/合并。
#!/bin/sh
cd ../
unset GIT_DIR
branch=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')
git checkout -f $branch
echo "Update pushed to branch $branch and checked out in the website directory"