是否有可能在post-receive hook中使用git-clean进行裸仓库?

时间:2016-11-03 20:14:02

标签: wordpress git

我在wordpress托管服务上设置了一个简单的git存储库,并按照一些说明设置了一个post-receive hook(pagely git setup)据我所知,工作树放在不同的目录中被称为DEPLOYDIR。

现在,我想要实现的是当收到推送请求时,它将在几个目录上执行git -clean。如果有人熟悉wordpress,我们的git已经

  • 文件1
  • file2的
  • 可湿性粉剂内容
    • μ型插件
    • 插件
    • 主题

我希望能够清除mu-plugins,插件和主题,并删除手动添加的任何内容,除了我们的.gitignore中的内容。

我尝试了以上链接后收到的这种变体:

#!/bin/bash
#
## store the arguments given to the script
read oldrev newrev refname

## Where to store the log information about the updates
LOGFILE=./post-receive.log
# The deployed directory (the running site)
DEPLOYDIR=/data/s12345/q1234/r4564

## Record the fact that the push has been received 
echo -e "Received Push Request at $( date +%F )" >> $LOGFILE
echo " - Old SHA: $oldrev New SHA: $newrev Branch Name: $refname" >> $LOGFILE

## Update the deployed copy
echo "Starting Deploy" >> $LOGFILE

echo " - Starting code update"
GIT_WORK_TREE="$DEPLOYDIR" git checkout wpqa -f
GIT_WORK_TREE="$DEPLOYDIR/wp-content/plugins" git clean -fd
GIT_WORK_TREE="$DEPLOYDIR/wp-content/themes" git clean -fd
GIT_WORK_TREE="$DEPLOYDIR/wp-content/mu-plugins" git clean -fd
echo " - Finished code update"
echo "Finished Deploy" >> $LOGFILE

在我推动之后,一切都被删除了!

推送到ssh://username@helloworld.vendor.com:/data/git/mydirectory.git

远程: - 启动代码更新
遥控器:切换到分支机构' qa'
remote:删除stuff_that_is_in_the_repo /
remote:删除stuff_in_your_gitignore /
...等

有关如何引用工作树的特定路径的任何建议吗?

1 个答案:

答案 0 :(得分:0)

the git clean documentation中所述,您只需将<path>的一组添加到命令的末尾(前缀为--,如果任何路径类似于选项;在您的情况下如果没有--,你就会没事,但这是一个很好的习惯。因此:

GIT_WORK_TREE="$DEPLOYDIR" git checkout wpqa -f
GIT_WORK_TREE="$DEPLOYDIR" git clean -fd -- \
    wp-content/plugins wp-content/themes wp-content/mu-plugins

(为了显示目的,我打破了最后一行;你可以做同样的事情,或者只是做一个没有反斜杠的大行。)

请注意,git clean通常在存储库上没有任何功能,因为裸存储库没有工作树,git clean从工作树中删除文件。但是,当您使用git --work-tree=... command [ options ]代码路径或$GIT_WORK_TREE环境变量时,您将提供一个工作树,它将覆盖&#34;裸露&#34;。您尝试的方法的问题是您提供了三个不同的工作树,其中没有一个与您为checkout步骤提供的工作树相同。