我在wordpress托管服务上设置了一个简单的git存储库,并按照一些说明设置了一个post-receive hook(pagely git setup)据我所知,工作树放在不同的目录中被称为DEPLOYDIR。
现在,我想要实现的是当收到推送请求时,它将在几个目录上执行git -clean。如果有人熟悉wordpress,我们的git已经
我希望能够清除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 /
...等
有关如何引用工作树的特定路径的任何建议吗?
答案 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
步骤提供的工作树相同。