我是一个git新手,所以原谅我缺乏知识,但我甚至不确定搜索谷歌有什么问题。
我有一个大型项目,我正在开发本地开发并使用git推送到远程网络服务器。服务器有一个post-receive hook,它使用以下命令复制文件以供服务:
GIT_WORK_TREE=/my/remote/webserver/base/directory git checkout -f
这已经好几个月了。
现在,我想建立一个衍生产品并在我的网络服务器上运行新分支。我还希望能够在衍生和主分支之间来回切换并覆盖服务器的代码,这样我就可以同时只用一台服务器开发两个独立的网站。首先,我创建一个新的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
我知道我在这里错过了一些大关键概念。我的猜测是有两个远程存储库符合预期,但我需要设置其他东西来从衍生产品回购复制到网络服务器。
我想我可能要编辑远程存储库中的HEAD文件?目前包含:
ref: refs/heads/master
答案 0 :(得分:2)
你的命令的语法对我来说似乎有点不对。
这会将所有与远程分支匹配的本地分支推送到服务器。
git push origin
这会将您的本地衍生分支推送到遥控器,并使您的本地分支跟踪遥控器。
git push -u origin spinoff
这将设置本地分支spinoff以跟踪远程分支spinoff(如果您执行上一个命令则不应该这样做。)
git branch -u origin spinoff
答案 1 :(得分:2)
git push origin master
正在更新消息,因为您正在尝试推送尚未更改的分支主文件。
你的钩子正在做git checkout -f
,这意味着它会检查出HEAD。当您将spinoff推送到您的存储库时,HEAD尚未更改(它指向master),因此不会更新任何内容。
您需要更改挂钩,以查看正在推送的引用,或者将特定分支指定为将被检出的分支。
虽然git不适合作为正确的部署工具,但请参阅this列表以了解不同的技术。