2

我是一个 git 新手,所以请原谅我缺乏知识,但我什至不确定要在谷歌搜索什么问题。

我有一个大型项目,只是我正在本地开发并使用 git 推送到远程网络服务器。服务器有一个 post-receive 钩子,它复制文件以使用此命令提供服务:

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

这几个月来一直运行良好。

现在,我想构建一个衍生产品并在我的 webserver 上运行新分支。我还希望能够在衍生分支和主分支之间来回切换并覆盖服务器的代码,这样我就可以只用一台服务器同时开发两个独立的网站。首先,我创建一个新的 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
4

2 回答 2

2

你的命令语法对我来说似乎有点不对劲。

这会将与远程分支匹配的所有本地分支推送到服务器。

git push origin

这会将您的本地衍生分支推送到远程,并使您的本地分支跟踪远程。

git push -u origin spinoff

这将设置本地分支衍生以跟踪远程分支衍生(如果您执行了上一个命令,则不需要)。

git branch -u origin spinoff
于 2013-03-29T05:39:30.540 回答
2

git push origin master正在使消息保持最新,因为您正在尝试推送您尚未更改的分支主控。

你的钩子在做 git checkout -f,这意味着它检查了 HEAD。当您将衍生产品推送到您的存储库时,HEAD 没有更改(它指向 master),因此不会更新任何内容。

您需要更改您的钩子以查看正在推送的 refs,或者指定一个特定的分支作为将被检出的分支。

尽管 git 不太适合作为适当的部署工具,但请参阅列表了解不同的技术。

于 2013-03-29T09:28:00.430 回答