“ git push heroku master”如何知道要推送到何处以及如何推送到其他仓库?


92

当推送到Heroku上托管的存储库时,必须执行以下命令:

git push heroku master

做什么herokumaster在此命令指示?git如何知道要推送到哪里?(git路径)

另外,我不知道我可以heroku rename用来重命名应用程序,所以在此之前,说我正在使用应用程序名称trytryheroku,现在我使用了,heroku create real-thing但是如果我按下,它仍然会推送到trytryheroku ...有没有办法推送到真实的东西呢?

Answers:


107

“ heroku”部分是您已设置的遥控器的名称-首次创建heroku应用程序时,它会创建一个指向您的应用程序的git remote调用“ heroku”-如果您在项目中键入“ git remote”,将向您显示远程端点。没有什么可以阻止您使用“ heroku”作为远程名称的-如果您的应用程序有多个环境,则可能会有名为production或staging的远程。

“主”部分是您希望推送到远程服务器的本地分支。如果您在一个名为“ myfeature”的功能分支中进行开发,并且想要将其部署到heroku,则可以这样做。

git push heroku myfeature:master

另外的:master在这里说将我的本地myfeature分支推到master远程分支上-注意:heroku只能从master分支进行部署。

如果重命名的应用程序Heroku的git的远程URL将改变-做一个git remote -v ,它会显示你的git回购您的应用程序使用,您可能需要删除旧的Heroku的起源,并添加新的,git remote rm heroku然后git remote add heroku git@newgitpathfromcontrolpanel

要了解有关Git的更多信息,我会推荐本书


您可以使用git remote set-url <remote-name> <new-url>(Git 1.7.0及更高版本)或git config remote.<remote-name>.url <new-url>,或通过编辑.git/config(可能通过git config -eGit 1.6.3及更高版本)来更新遥控器的URL 。
克里斯·约翰森

3
那非常有帮助。谢谢
Diego Urenia

43

第1部分:“ git如何知道要推送到哪里?”

在执行上述命令之前:

$ git push heroku master

总是需要执行几个其他步骤:安装Git和Heroku,创建本地Git存储库,注册到heroku,通过命令行登录heroku,创建托管点的heroku句柄(在第2部分中进行了说明

1.本地Git存储库:

    $ git init
    Initialized empty Git repository in .git/
    $ git add .
    $ git commit -m "my first commit"
    Created initial commit 5df2d09: my first commit
     44 files changed, 8393 insertions(+), 0 deletions(-)
     create mode 100644 README
     create mode 100644 Procfile
     create mode 100644 app/controllers/source_file
    ...

2.进行Heroku的注册并通过命令行登录:

$ heroku login
Enter your Heroku credentials.
Email: user@example.com
Password:
Could not find an existing public key.
Would you like to generate one? [Yn]
Generating new SSH public key.
Uploading ssh public key /Users/adam/.ssh/id_rsa.pub

因此,通过运行,$ git push heroku master您已将代码/应用程序推送至Heroku。


第2部分:但是herokumaster表示什么?

与Heroku相比,它更是一个Git问题-Heroku是一个托管平台,它依赖于Git(分布式版本控制系统)进行部署。

“推”的基本概念是将本地(在工作计算机中)拥有的某些东西(文件,应用等)推送到其他地方,在这种情况下,将其推送到远程存储库(远程机器)。

在Git中使用“推”之前,我们创建一个远程(句柄)作为对远程存储库(完整URL)的引用,我们使用以下命令进行操作:

$ git remote add <remote-name-of-our-choice> <URL-where-you-be-pushing-yourapp>

'push'命令的基本结构是:

$ git push <remote-name> <branch>

所以 $ git push heroku master实际上是将您的代码/应用程序/文件(从某些本地Git存储库)推送到远程存储库“ heroku”。

想知道这个“ heroku”遥控器是何时创建的,它是在执行$ heroku create时添加的

$ heroku create
Creating stark-fog-398... done, stack is cedar
http://stark-fog-398.herokuapp.com/ | git@heroku.com:stark-fog-398.git
Git remote heroku added

请注意最后一行“添加了Git remote heroku ”。

为了更清楚一点,这是一条Git命令来检查/输出所有的遥控器:$ git remote -v将显示类似于以下内容

$ git remote -v
heroku     git@heroku.com:somerepo.git (fetch)
heroku     git@heroku.com:somerepo.git (push)

因此,我们可以假设在执行$ heroku create时(隐式)在某处执行了以下命令,从而创建了一些heroku存储库(url)*的heroku远程对象*

$ git remote add heroku git@heroku.com:somerepo.git

12

heroku是heroku gem的一部分,需要它来协助推送,而master只是您要推送的git分支。git知道要推送到哪里,因为您创建了一个heroku应用程序,该推送会自动设置,您可以通过键入以下内容来查看

git remote -v

如果您需要更改将其删除git remote rm heroku,然后使用添加新的应用程序git remote add heroku git@heroku.com:your-application-15.git


请注意,通常将使用与您推送的分支相同的名称来创建远程分支。不过,这可以更改(例如,git push heroku master:mymaster或通过confgi文件)
sehe 2011年

2
这个答案是不正确的。heroku是遥控器的名称,与heroku gem完全无关。
jergason 2012年


1

就像您一样,我也很难理解git和heroku的本质,我也感到困惑。但是,现在我已经很清楚可以简短地回答您的问题了。

假设您在项目目录上已安装git。您的项目文件夹中存在一个.git隐藏文件夹,其中包含一个名为“ config”的文件,其中包含有关遥控器的所有信息。

遥控器是您的个人存储库,分别命名为来源,heroku,登台,产品等。

在您的命令中,heroku代表您已映射到heroku项目的存储库。打开配置文件,您将看到URL。

当你跑步

git push heroku master

您要告诉git将您当前的原始存储库的master分支推送到heroku存储库的master分支

其余所有详细信息已在其他答案中共享,因此不想重复。因此,按照我的理解,这只是一个简短的答案。希望能帮助到你。


0

但是如果我推送,它仍然会推送到trytryheroku ...有没有办法推送到真实的东西呢?

我在heroku的网站上找到了您可能感兴趣的答案:

https://dashboard.heroku.com/apps/NAMEOFYOURAPP/deploy/heroku-git

$ cd my-project/
$ git init
$ heroku git:remote -a nameofyourapp

$ git add .
$ git commit -am "make it better"
$ git push heroku master

这样,heroku会知道该往哪里推!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.