3

我目前正在尝试 git,并且正在尝试创建一个工作流,以便推送到服务器上的裸远程 repo 将根据不同的分支更新 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 挂钩强制删除?

4

3 回答 3

2

您可能应该使用git-resetand git-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
于 2013-01-28T11:13:39.537 回答
1

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

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

于 2013-01-28T11:12:56.813 回答
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 的回答。

于 2013-01-29T03:13:32.313 回答