git post-receive hook不会删除文件

时间:2013-01-28 11:04:10

标签: git

我正在尝试使用git,我正在尝试创建一个工作流,以便在服务器上推送到一个裸的远程仓库将根据不同的分支更新2个不同的站点。

收件后挂钩是:

#!/bin/sh
GIT_WORK_TREE=/www/development/ git checkout -f master
GIT_WORK_TREE=/www/production/ git checkout -f production

基于https://stackoverflow.com/a/3838804/1097483但有一些修改。

不幸的是,在测试它时,将推送新的测试文件到任何分支将被推送并成功更新Web根目录,但是为了删除相同的测试文件,Web根目录仍保留已删除文件的副本。

有谁知道如何获得post-receive挂钩以强制删除?

3 个答案:

答案 0 :(得分:2)

您应该使用git-resetgit-clean

#!/bin/sh
GIT_WORK_TREE=/www/development/ git reset --hard master
GIT_WORK_TREE=/www/development/ git clean -fdx
GIT_WORK_TREE=/www/production/ git reset --hard production
GIT_WORK_TREE=/www/production/ git clean -fdx

答案 1 :(得分:1)

我认为工作树检出不会在工作目录中记录有关存储库的任何信息。因此,当更新已经签出的版本时,Git将无法分辨它必须应用哪个差异,以及它需要删除哪些文件。

最简单的解决方案是在删除之前删除文件夹中的所有文件。

答案 2 :(得分:0)

我最终做了

#!/bin/sh
GIT_WORK_TREE=/www/development/ git checkout -f master
GIT_WORK_TREE=/www/development/ git clean -fdx
GIT_WORK_TREE=/www/production/ git checkout -f production
GIT_WORK_TREE=/www/production/ git clean -fdx

基于@Koraktor的回答。