GitはHerokuのでリモートに現在のブランチをプッシュ
-
18-09-2019 - |
質問
私は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)
あなたが見ることができるように、プルは合理的に見えますが、デフォルトのプッシュはしていません。それは私がしなければことを意味します:
のgitプッシュステージングリモート
私は、ステージング支店までの私のローカルのmasterブランチをプッシュするつもりです。しかし、それは私が欲しいものではありません....基本的に、私は私のステージングブランチに更新をマージしたい、そして簡単にそのように枝を指定せずにHerokuのにそれをプッシュします:
git push staging-remote mybranch:master
上記行うのは難しいではないですが、私は誤って、以前のプッシュをしていると、間違ったブランチをプッシュしたく...これは私が作成したいのですが、生産ブランチのために二重に重要です!
私はGitの設定をいじって試してみたが、この権利を取得する方法はまだ考え出したていない...
解決
私はそれと@jubaとMatthewFordのバージョンは完璧に動作し、@をテストしてきた!
git config remote.staging.push staging:master
これは私の地元のトピックブランチは、名前のプッシュのという名前のリモートリポジトリ上でリモートブランチのマスターのへのステージングのステージングの。
そのような一般的な形でそれを置く@nickgrim
git config remote.[remoteRepositoryName].push [localBranchName]:[remoteBranchName]
のアップデート:の
あなたはgit push
オプションで-u
ときさらに、現代のgitは便利なあなたのための上記の構成コマンドを実行します。
git push -u staging staging:master
他のヒント
私はHerokuのと呼ばれる分岐を有していて、これは私のために働います:
git config remote.heroku.push heroku:master
あなたが直面している問題は、Herokuのは、マスター以外のすべての分岐を無視している。
ブックから「オライリー - Gitリポジトリとバージョン管理」ページ184 |第11章:リモートリポジトリ
<時間> ジュバからの例が失敗すべき理由Gitのプッシュ操作中に、あなたは一般的に提供し、変更内容を公開します あなたの地元のトピックブランチ上で行いました。他の人がで変更を見つけることができるようにするには リモートリポジトリは、あなたがそれらをアップロードした後、変更内容は、トピックブランチとしてそのリポジトリに現れなければなりません。このように、典型的なのgit pushコマンドの間に、ソースからの分岐 あなたのリポジトリは、このようなとしてrefspecを使用してリモートリポジトリに送信されます:
+refs/heads/*:refs/heads/*
このrefspecは、次のように言い換えることができます。 ローカルリポジトリから、ソースのネームスペースの下で発見された各支店名を取ります
refs/heads/
と宛先の下で同様の名前、一致するブランチに置き リモートリポジトリ内の名前空間refs/heads/
。 (あなたはプッシュを実行しているので)最初refs/heads/
は、ローカルリポジトリを指し、 そして第二には、リモートリポジトリを指します。アスタリスク(*)は、すべての枝を確保します 複製されます。 ...
です。修正refspecはする必要があります:
git config remote.staging-remote.push +refs/heads/local_branch_name:refs/heads/master
ページからの20個のコマンドまたはそうでEveriday Gitのの
http://www.kernel.org/pub /software/scm/git/docs/everyday.htmlする
あなたが、あなたの地元のgitリポジトリに設定ディレクティブを追加することによって、のような何かをしたいものを達成できると思われます
git config remote.staging-remote.push mybranch:refs/remotes/staging-remote/master
あなたは、のmybranch のローカルブランチからgit push
を行う場合は、すると、それはあなたののステージング-リモートのののマスターのブランチにプッシュしなければなりません遠隔ます。
それにも関わらず、git remote show staging-remote
で確認し、慎重に私はGitの専門家から遠くだとして、それを使用する前にそれをテストしてください...
私はこれを行う方法を見つけ出すことができませんでしたが、最終的に私はそれを簡単にするために便利なrakeタスクを見つけました: http://www.jbarnette.com/2009/11/ 10 /展開ツーheroku.html の
私はすべての支店が、「マスター」を無視してのHerokuのの方針に対処する方法を把握しようと、同じ問題を抱えています。あなただけの今までHerokuの上のmasterブランチをテストすることができればそれはちょっと別の枝を維持するの全体のポイントを破ります。
この制限の結果は、私が働いすることができるものは何でもローカルトピックブランチ、私は地元のトピックブランチにHerokuののマスターを切り替えて、オーバーライトマスターに「Gitのプッシュ-f」を行うための簡単な方法が欲しいということですHerokuの上。言うまでもなく、この制限なしですべてのものをバックアップするには、(GitHubのような)別のリモートリポジトリを持っていることは非常に良いでしょう。私はその一つの「起源」を呼び出し、「Gitのプッシュは」常にすべてのものをバックアップするようにHerokuのための「Herokuのを」使用すると思います。
私は http://progit.orgの「Refspecsを押す」セクションを読んでから得たもの/book/ch9-5.html には
GitのプッシュHerokuのローカルトピックブランチ:レフリー/ヘッド/マスター
私は本当にたいことはいつも私の現在のブランチがに起こるものは何でもの名前で上記、置き換える「ローカルトピックブランチを」ない「GitのプッシュHerokuの」なるように設定ファイルにこれを設定する方法ですなります。
私は他の誰がこれを行う方法を考え出したかどうかを確認するために、新しい質問としてこれを依頼することがあります。
この作品。私はgitのフロー、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
についてのフェッチとの両方をリダイレクトまたは1つの方法であることを閉じることができ、標準出力と標準入力、などの押し考えます。また、誰もが.git / configのをハッキングすることなく、これらの設定を取得する方法を知っている場合は、編集して修正すること自由に感じなさい、カルマポイントが続くのは確実です。