我正在尝试使用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挂钩以强制删除?
答案 0 :(得分:2)
#!/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的回答。