gpt4 book ai didi

Git post-receive hook 不会从 master 中删除已删除的文件

转载 作者:太空狗 更新时间:2023-10-29 13:51:53 25 4
gpt4 key购买 nike

我在我的服务器上创建了一个裸 git 存储库,并从 this blog 设置了以下接收后 Hook :

#!/bin/bash

while read oldrev newrev ref
do
branch=`echo $ref | cut -d/ -f3`

if [ "master" == "$branch" ]; then
git --work-tree=/path/to/my/project/live/ checkout -f $branch
echo 'Changes pushed live.'
fi

if [ "develop" == "$branch" ]; then
git --work-tree=/path/to/my/project/dev/ checkout -f $branch
echo 'Changes pushed to dev.'
fi
done

这样,每当我在本地推送到我的服务器时,更改都会自动发布到每个分支的文件夹中,而无需手动 pull 。

我设置了正确的权限以同时在 dev 文件夹中运行:

drwxrwsr-x 2 git git 4096 Sep 29 12:10 live/
drwxrwsr-x 2 git git 4096 Sep 29 12:09 dev/

并且从 develop 分支推送按预期工作。当我 checkout 主分支并进行 merge 时出现问题。当我推送 master 时,新文件被复制到我服务器上的事件文件夹中,但我在本地删除的文件没有被删除。

如何使接收后正确更新实时文件夹?谢谢!

最佳答案

我遇到了同样的问题。正在研究 rsync 以将 tmp 文件夹文件复制到事件文件夹,但后来我想为什么不在工作树上使用 git glean。

我不确定这是否不好,但它应该只从文件夹中删除未跟踪的文件并使用您的 .gitignore 设置不删除不在您的存储库中的文件。

它似乎完成了我想要的,即清除未被推送删除的剩余文件。

#!/bin/sh
while read oldrev newrev refname
do
branch=$(git rev-parse --symbolic --abbrev-ref $refname)
if [ "master" == "$branch" ]; then
GIT_WORK_TREE=/home/store/public_html git checkout -f master
GIT_WORK_TREE=/home/store/public_html git clean -fd
fi
if [ "test" == "$branch" ]; then
GIT_WORK_TREE=/home/store/test_html git checkout -f test
GIT_WORK_TREE=/home/store/test_html git clean -fd
fi
if [ "dev" == "$branch" ]; then
GIT_WORK_TREE=/home/store/dev_html git checkout -f dev
GIT_WORK_TREE=/home/store/dev_html git clean -fd
fi
done

关于Git post-receive hook 不会从 master 中删除已删除的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19076489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com