侧面项目的分支git

时间:2013-03-29 05:23:26

标签: git git-post-receive

我是一个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

2 个答案:

答案 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列表以了解不同的技术。