我是一个git新手,所以请原谅我缺乏知识,但我甚至不知道什么问题搜索谷歌。
我有一个很大的项目,只是我在本地开发,并用git推送到一个远程web服务器上。服务器有一个post-receive钩子,用于复制要使用此命令提供服务的文件:

GIT_WORK_TREE=/my/remote/webserver/base/directory git checkout -f

这几个月来一直很好。
现在,我想建立一个分支,并在我的web服务器上运行新的分支。我还希望能够在剥离分支和主分支之间来回切换,并覆盖服务器的代码,以便我可以同时使用一台服务器开发两个独立的网站。首先,我创建一个新的git分支:
git checkout -b spinoff

我加了一行并做了一个承诺:
git commit -a -m 'test'
 [spinoff 51f90e9] test
 1 file changed, 1 insertion(+)

现在,我正试图推到远程分支。这不起作用
git push origin master
 (everything up to date)

此命令按预期推送,但不通过Web服务器复制文件
git push origin spinoff

将其设置为推送到主服务器似乎没有帮助:
git branch --set-upstream spinoff origin/master

[按@klas mellbourn指出的那样编辑]这是git 1.7的语法。如果您有git 1.8,语法是:
git branch -u origin spinoff

我知道我遗漏了一些重要的概念。我的猜测是,有两个远程存储库如预期的那样,但我需要设置一些其他内容,以便从剥离repo复制到web服务器。
我想我可能需要在远程存储库中编辑头文件?当前包含:
ref: refs/heads/master

最佳答案

git push origin master正在更新消息,因为您正在尝试推送尚未更改的分支主控形状。
你的钩子在做gitcheckout -f,这意味着它检查头部。当您将剥离推送到存储库时,head没有被更改(它指向master),因此不会更新任何内容。
你需要改变你的钩子,要么看看什么ref正在被推,要么指定一个特定的分支作为将被签出的分支。
尽管git不太适合作为一个合适的部署工具,但是请参见this列表以了解不同的技术。

08-27 21:00
查看更多