15

Herokuにステージングブランチを作成しようとしていますが、うまくいかないことがあります。

すでにherokuアプリを作成し、ステージングリモートを指すようにリモートを設定していると仮定します。

git checkout -b staging staging-remote/master

ステージング(リモート/マスター)を追跡する「ステージング」というローカルブランチを取得します。または、それが私が考えたものです。

だが:

git remote show staging-remote

私にこれを与えます:

remote staging
  Fetch URL: git@heroku.com:myappname.git
  Push  URL: git@heroku.com:myappname.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    staging-remote merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

ご覧のとおり、プルは妥当に見えますが、デフォルトのプッシュはそうではありません。それは私がそうするならそれを意味します:

gitpushstaging-リモート

ローカルマスターブランチをステージングブランチにプッシュします。しかし、それは私が望んでいることではありません。基本的に、更新をステージングブランチにマージし、次のようにブランチを指定しなくても、簡単にherokuにプッシュしたいと思います。

git push staging-remote mybranch:master

上記は難しいことではありませんが、誤って前のプッシュを実行して間違ったブランチをプッシュすることは避けたいと思います...これは私が作成したいプロダクションブランチにとって二重に重要です!

git configをいじってみましたが、これを正しく行う方法がまだわかりません...

4

7 に答える 7

25

私はそれをテストしました、そして@jubaと@MatthewFordのバージョンは完全に動作します!

git config remote.staging.push staging:master

これにより、 stagingという名前のローカルトピックブランチが、stagingという名前のリモートリポジトリのリモートブランチマスターにプッシュされます。

@nickgrimはそれを次のような一般的な形式で表現します:

git config remote.[remoteRepositoryName].push [localBranchName]:[remoteBranchName]

アップデート:

git pushさらに、最新のgitは、次のオプションを使用すると、上記の構成コマンドを便利に実行-uできます。

git push -u staging staging:master
于 2010-10-02T09:08:07.947 に答える
7

私はherokuというブランチを持っていますが、これは私にとってはうまくいきました:

git config remote.heroku.push heroku:master

あなたが直面している問題は、herokuがmaster以外のすべてのブランチを無視することです。

于 2010-05-19T16:45:16.420 に答える
3

184ページの「O'Reilly-Gitによるバージョン管理」という本から| 第11章:リモートリポジトリ

git push操作中に、通常、ローカルトピックブランチで行った変更を提供して公開する必要があります。アップロード後に他の人がリモートリポジトリで変更を見つけられるようにするには、変更がトピックブランチとしてそのリポジトリに表示される必要があります。したがって、通常のgit pushコマンドでは、リポジトリからのソースブランチが次のようなrefspecを使用してリモートリポジトリに送信されます。

+refs/heads/*:refs/heads/*

このrefspecは、次のように言い換えることができます。ローカルリポジトリから、ソース名前空間の下にある各ブランチ名を取得 し、リモートリポジトリrefs/heads/の宛先名前空間の下にある同様の名前の一致するブランチに配置します。refs/heads/1つ目refs/heads/はローカルリポジトリを参照し(プッシュを実行しているため)、2つ目はリモートリポジトリを参照します。アスタリスクは、すべてのブランチが複製されることを保証します。..。


そのため、jubaの例は失敗するはずです。修正されたrefspecは次のようになります。

git config remote.staging-remote.push +refs/heads/local_branch_name:refs/heads/master
于 2010-06-17T15:05:39.933 に答える
1

20コマンド程度のEveridayGitのページから:

http://www.kernel.org/pub/software/scm/git/docs/everyday.html

ローカルのgitリポジトリにconfigディレクティブを追加することで、やりたいことを達成できるようです。

git config remote.staging-remote.push mybranch:refs/remotes/staging-remote/master

次に、mybranchローカルブランチgit pushからを実行する場合は、ステージングリモートリモートのマスターブランチにプッシュする必要があります。

それでも、git remote show staging-remote私はgitの専門家から遠く離れているので、使用する前に確認して慎重にテストしてください...

于 2010-04-07T09:57:20.203 に答える
0

これを行う方法を見つけることができませんでしたが、最終的には簡単にするための便利なrakeタスクを見つけました: http ://www.jbarnette.com/2009/11/10/deploying-to-heroku.html

于 2010-03-09T10:20:01.433 に答える
0

'master'以外のすべてのブランチを無視するというHerokuのポリシーに対処する方法を見つけようとしても同じ問題が発生しています。Herokuでマスターブランチをテストすることしかできない場合は、別々のブランチを保持するという全体的なポイントをやや打ち負かします。

この制限の結果、作業しているローカルトピックブランチが何であれ、Herokuのマスターをそのローカルトピックブランチに切り替え、「gitpush-f」を実行してHerokuのマスターを上書きする簡単な方法が必要になります。言うまでもなく、この制限なしにすべてをバックアップするには、別のリモートリポジトリ(Githubなど)を用意することをお勧めします。これを「origin」と呼び、Herokuに「heroku」を使用して、「gitpush」が常にすべてをバックアップするようにします。

http://progit.org/book/ch9-5.htmlの「PushingRefspecs」セクションを読んで得たものは

git push heroku local-topic-branch:refs / heads / master

私が本当に望んでいるのは、これを設定ファイルで設定して、「git push heroku」が常に上記を実行し、「local-topic-branch」を現在のブランチの名前に置き換える方法です。

他の誰かがこれを行う方法を理解しているかどうかを確認するために、これを新しい質問として尋ねることがあります。

于 2010-06-04T02:47:33.883 に答える
0

これは機能します。git-flow、heroku、およびバックアップgitサービスを使用してクライアントをセットアップするために数回以上使用しました。

リポジトリの.git/config:

[core]
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
  ignorecase = true
[heroku]
  account = youraccount
[remote "origin"]
  url = git@bitbucket.org:youruser/yoursite.heroku.com.git # or github, etc.
  fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
  remote = origin
  merge = refs/heads/master
[branch "staging"]
  remote = origin
  merge = refs/heads/staging
[branch "develop"]
  remote = origin
  merge = refs/heads/develop
[remote "production"]
  pushurl = git@heroku.com:your-prod-app.git
  push = master:master
[remote "staging"]
  pushurl = git@heroku.com:your-staging-app.git
  push = staging:master

すべて正しく機能しています:

git push origin

git pull origin

git push staging

git push production

フェッチとプッシュをstdoutやstdinのように考えてください。どちらもリダイレクトしたり、閉じたりして一方向にすることができます。また、.git / configをハッキングせずにこれらの設定を取得する方法を知っている人がいる場合は、編集して自由に修正してください。カルマポイントは必ず従います。

于 2012-04-24T02:51:08.543 に答える