Git post receive签出到网站未清除文件夹

Git post receive签出到网站未清除文件夹,git,Git,我在我的web服务器上使用git repo设置了当前的工作流,带有一个post接收钩子,将我的分支机构master和staging签出到各自的文件夹中,master是我的实时站点,staging是我的staging站点 如果我将文件夹js更改为javascript,例如,当钩子签出我的分支时,它将创建文件夹javascript,但保留文件夹js及其以前提交的内容。我确信git已经检测到这些文件被重命名,因为当我在本地签出分支时,这些文件就消失了 这是我的收帖钩: #!/bin/sh GIT_WO

我在我的web服务器上使用git repo设置了当前的工作流,带有一个post接收钩子,将我的分支机构
master
staging
签出到各自的文件夹中,
master
是我的实时站点,
staging
是我的staging站点

如果我将文件夹
js
更改为
javascript
,例如,当钩子签出我的分支时,它将创建文件夹
javascript
,但保留文件夹
js
及其以前提交的内容。我确信git已经检测到这些文件被重命名,因为当我在本地签出分支时,这些文件就消失了

这是我的收帖钩:

#!/bin/sh
GIT_WORK_TREE=/var/www/mysite/live git checkout -f master
GIT_WORK_TREE=/var/www/mysite/staging git checkout -f staging

当您使用-f强制签出分支时,更改可能没有正确提交。请先尝试
git commit
,以便它正确提交更改,然后尝试签出分支


我认为这种方法可能有效

我当前的post receive钩子现在看起来是这样的:

#!/bin/sh
GIT_WORK_TREE=/var/www/mysite/live git clean -df
GIT_WORK_TREE=/var/www/mysite/live git checkout -f master
GIT_WORK_TREE=/var/www/mysite/staging git clean -df
GIT_WORK_TREE=/var/www/mysite/staging git checkout -f staging

这将删除git不再跟踪的所有文件,并以递归方式执行。如果我重命名一个文件或文件夹,它将在下一次推送到服务器时被“清除”。如果这是错误的,或者有更好的方法,我可能会接受另一个答案,但目前这是我的问题的解决方案。

您是否使用“-f”强制签出?是的,仅根据本教程:这可能是我问题的根源吗?因此我的挂钩应该提交,然后签出每个分支?但是,从我的回购协议本地副本中,我已经提交了,然后推送新的提交?是的,它应该提交,否则更改将不会推送到分支机构,您可能最终得到一致的结果。因此,请确保钩子在切换新分支之前始终提交更改