我是一个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列表以了解不同的技术。