Farklı yerel Git dalları Heroku / master'a nasıl aktarılır


402

Heroku'nun 'usta' hariç tüm dalları görmezden gelme politikası vardır.

Heroku'nun tasarımcılarının bu politika için mükemmel nedenleri olduğundan emin olmama rağmen (depolama ve performans optimizasyonu için tahmin ediyorum), geliştirici olarak sonuç, çalıştığım yerel konu dalı ne olursa olsun, kolay bir yol istiyorum Heroku'nun ustasını bu yerel konu dalına geçirmek ve Heroku'da ustayı aşırı yazmak için "git push heroku -f" yapmak.

Ne bir "Pushing Refspecs" bölümünü okuyarak aldığım http://progit.org/book/ch9-5.html olduğunu

git push -f heroku yerel-konu-şube: refs / kafaları / usta

Gerçekten istediğim, yapılandırma dosyasında bunu ayarlamanın bir yoludur, böylece "git push heroku" her zaman yukarıdakileri yapar, yerel konu dalını mevcut dalımın adı ne olursa olsun değiştirir. Bunu nasıl başaracağını bilen biri varsa, lütfen bana bildirin!

Bunun için uyarı, elbette, bunun sadece o Heroku uygulamasına / havuzuna itebilecek tek kişi olduğumda mantıklı olmasıdır. Bir test veya KG ekibi, farklı aday şubeleri denemek için böyle bir veri havuzunu yönetebilir, ancak belirli bir günde hangi şubeye ittikleri konusunda hemfikir olması için koordinasyon yapmaları gerekir.

Söylemeye gerek yok, her şeyi yedeklemek için bu kısıtlama olmadan ayrı bir uzak depoya (GitHub gibi) sahip olmak da çok iyi bir fikir olacaktır. Ona "orijin" diyorum ve Heroku için "heroku" kullanacağım, böylece "git push" her zaman orijin için her şeyi yedekler ve "git push heroku" şu anda hangi şubede olduğum dalı iter, üzerine yazar Eğer gerekliyse.

Bu işe yarar mı?

[uzak "heroku"]
    url = git@heroku.com: my-app.git
    push = + refs / kafalar / *: refs / kafalar / master

Denemeye başlamadan önce daha deneyimli birinden duymak isterim, ancak Heroku'da bir kukla uygulama oluşturabilir ve bununla deney yapabilirim.

Getirmeye gelince, Heroku deposunun salt yazılır olup olmadığı gerçekten umrumda değil. Tüm işlerimin yedeklenmesi ve kopyalanması için GitHub gibi ayrı bir havuzum var.

Dipnot: Bu soru, Heroku ile şube stratejisini kullanarak Good Git dağıtımına benzer, ancak tam olarak aynı değil mi?


1
Şu anda en çok oylanan cevap, bunu yapmanın deyimsel yoludur (ve gerçek doğru cevabı Imo)
Selali Adobor

Refspecs gönderme hakkında alternatif bir https kaynağı: git scm refspecs gönderme ile ilgili belgeler .
Dylan Landry

Yanıtlar:


131

Bir joker karakter kullanırken, refspec'in her iki tarafında bulunması gerekiyordu, bu yüzden +refs/heads/*:refs/heads/masterişe yaramayacak. Ancak şunları kullanabilirsiniz +HEAD:refs/heads/master:

git config remote.heroku.push +HEAD:refs/heads/master

Ayrıca, git push ile doğrudan yapabilirsiniz :

git push heroku +HEAD:master
git push -f heroku HEAD:master

4
Bu iki komut arasındaki fark nedir ya da ikisini birden yapmak zorunda mıyız
Saad Masood

2
@SaadMasood: git pushKomutların sonuncusu aynı şeyi yapar. Bkz git push --helpanlamı için -fseçeneği ve +refspec içinde.
Chris Johnsen

4
@Chris Johnson: Buradaki adamları RTFMing yerine -f parametrelerinin ne anlama geldiğini söyleyebilir misiniz?
AHH

@AHH -ftemsil yürürlükte . Jassa'nın cevabı ile benim için çalıştı .
Bay Tao

@Chris Johnson: HEAD, uygulamanın tüm geçmişi yerine yalnızca en son sürümü yayınlamak için mi kullanılıyor?
Cameron Wilby

1566

Bkz. Https://devcenter.heroku.com/articles/git#deploying-code

$ git push heroku yourbranch:master

24
-F kuvveti gerektirebilir.
Scott Stafford

Bu, dokümanlarında bulunmasına rağmen artık işe yaramıyor gibi görünüyor. Zorla bile olsa sunucu, ana dalı silemeyeceğini söyleyerek pushu reddeder.
Dave Meehan

3
@DaveMeehan bu hala çalışıyor. git push :masterAna dalı sileni hiçbir şey olmadan üzerine yazarak yapmaya çalışıyorsunuz . Bu, başka bir dalla üzerine yazmaktan farklı. Heroku'nun büyük olasılıkla ana şubenin silinmesini önlemek için güvenlik önlemleri vardır.
Dennis

Bu harika bir çözüm
Ajay Kumar

2
@nxmohamad Şubeniz ana dalın arkasına girmedikçe ve Heroku'daki geçerli kodu geçersiz kılmak istemediğiniz sürece gerçekleşmez.
ricks

64
git push -f heroku local_branch_name:master

3
Dikkat edin, bu -fya da kullanır --forceve itmeye zorladığınızda ne yaptığınızı bilmeniz her zaman en iyisidir.
MiFiHiBye

@ tomasz-mazur neden -f gerektiriyor?
nxmohamad

Evet biz birden Devam dalları ile çalışma gibi bazı durumlarda -f kullanabilir ve her ne Heroku değiştirin ve çalışma dalı test etmek gerekebilir, lütfen danışma halinde teste başka daha iyi bir yolu var mı
Fahad

bilgisayarımda çalışıyor, cevap için teşekkürler, aslında bu sözdizimi normal Github deposunda geçerli mi?
Luk Aron

10

Farklı yerel Git dallarını Heroku / master'a göndermek için en güvenli komut.

git push -f heroku branch_name:master

Not: -f'yi kullanmadan itebilirsiniz, ancak diğer geliştiricilerin push'larıyla çakışmaları önlemek için -f (kuvvet bayrağı) önerilir.


1
önce -f olmadan yapmanın daha iyi bir uygulama olduğunu düşünmüyor musun? çatışmalar varsa, önce bunların üzerine
yazmanın

7

Benim için çalışıyor,

git push -f heroku otherBranch:master

Diğer geliştiricilerin itmeleriyle çatışmaları önlemek için -f (kuvvet bayrağı) önerilir. Git'i revizyon kontrolünüz için değil, yalnızca taşıma olarak kullandığınız için, kuvvet bayrağını kullanmak makul bir uygulamadır.

Kaynak: - resmi dokümanlar


5

Ayrıca git akış sistemini ve özellik dalınızı kullanmanızın

feature/mobile_additions

ve stagingtwo adlı bir git uzaktan kumandasıyla, heroku'ya itme komutu

git push stagingtwo feature/mobile_additions:master

4

Dışarı kontrol etmelisiniz heroku_san oldukça güzel bu sorunu çözer.

Örneğin, şunları yapabilirsiniz:

git checkout BRANCH
rake qa deploy

Ayrıca, bir konu dalını yeni sunuculara dağıtmak için yeni Heroku örneklerini döndürmeyi kolaylaştırır:

git checkout BRANCH
# edit config/heroku.yml with new app instance and shortname
rake shortname heroku:create deploy # auto creates deploys and migrates

Ve sık sık bir şey yaparsanız, elbette daha basit tırmık görevleri yapabilirsiniz.




0

Bence olmalı

push = refs/heads/*:refs/heads/*

yerine...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.