2010-03-08 23 views
15

ile uzaktaki bir şubeye giden bir uzaklığa itin Kahraman kozunda bir hazırlama dalı oluşturmaya çalışıyorum, ancak tam olarak almadığım bir şey var. Yaparsam Zaten, evreleme-uzak işaret edecek bir Heroku uygulamasını mı ve kurulumu uzaktan oluşturduk varsayarsakGit Heroku

:

git checkout -b staging staging-remote/master 

Ben evreleme-uzak izler 'evreleme' adlı bir yerel şube olsun/usta - ya da ben öyle düşündüm ....

Ama:

:

git remote show staging-remote 

bana bu verir

Gördüğünüz gibi, çekme makul görünüyor, ancak varsayılan itme yok.

git push evreleme-uzak

Ben evreleme dalına kadar benim yerel ana dalı itmek için gidiyorum: Bu benim yaptığım eğer ima etmektedir. Sert yukarıda

git push staging-remote mybranch:master 

değildir: Ama bu ben Temelde, şöyle dalı belirtmek zorunda kalmadan kolayca o sırada, evreleme dalı haline güncellemeleri birleştirme Heroku bunu itmek istiyor .... istediğim bu değil yapmak, ama yanlışlıkla önceki itme ve yanlış şube iterek önlemek istemiyorum ... Bu oluşturmak istiyorum üretim dalı için iki kat büyük!

Ben git yapılandırma ile karıştırmasını denedim ama

cevap

25

!

git config remote.staging.push staging:master 

Bu benim yerel konu şube evreleme adlı uzak depo uzaktan dalı haline usta evreleme adlı iter.

şöyle genel formda koymak @nickgrim:

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

Güncelleme:

Dahası, çağdaş git elverişli sizin için yukarıdaki yapılandırma komutu çalıştırmak ne zaman -u seçeneği ile size git push :

git push -u staging staging:master 
+1

master' geriye doğru; İstediğiniz: 'git config uzak. [remoteName] .push [localBranchName]: [remoteBranchName]' –

+2

@DavidAlpert: hayır, bunu var yani – nickgrim

+0

@nigkgrim tamamen doğrudur. – thekingoftruth

1

everiday Git 20 komutlar ya da öylesine ile:

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

O t görünüyor şapka yerel git deposunda bir yapılandırma yönergesi ekleyerek ne yapmak istediğinizi elde edebilirsiniz, gibi bir şey: Eğer mybranch bir git push yerel şube yaparsanız Sonra

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

, bu aktarılması gerekir ana kademelendirme-uzak uzaktan kumandasınınana şubesi.

Yine de git remote show staging-remote ile kontrol edebilirsiniz ve ben bir git uzmanı uzak olduğum kadar dikkatlice kullanmadan önce test ...

7

Ben Heroku adında bir şube var ve bu benim için çalıştı:

git config remote.heroku.push heroku:master 

Karşılaştığınız sorun, heroku master dışındaki tüm şubeleri yok sayar.

0

Heroku'nun tüm şubeleri görmezden gelme politikasıyla nasıl baş edeceğini anlamaya çalışmakla aynı sorunu yaşıyorum ama 'usta'.Eğer ana dalını sadece Heroku'da test edebilecek olursanız, ayrı dalları tutmanın bütün noktasını yener.

Bu kısıtlamanın sonucu üzerinde çalıştığım yerel konu dalı ne olursa olsun, Heroku'nun master'ını bu yerel konu dalına geçirmenin ve bir "git push -f" yazmanın kolay bir yolunu yapmak istiyorum. Heroku'da usta. Söylemeye gerek yok, bu kısıtlama olmadan herşeyi yedeklemek için ayrı bir uzak deponun (Github gibi) olması çok iyi bir fikir olurdu. Bunu bir "kökeni" olarak adlandırır ve Heroku için "heroku" yu kullanırdım, böylece "git basma" her zaman her şeyi yedekler.

Ne http://progit.org/book/ch9-5.html ait "Pushing Refspecs" bölümünü okuduktan döndüm

git push Heroku yerel-konu-dalıdır: ref/kafa/ustası

Ne gibi gerçekten istiyorum için bir yoldur Bunu yapılandırma dosyasında ayarlayın, böylece "git heroku it" her zaman, yukarıdaki geçerli dalın ne olacağı ile ilgili "yerel-konu-dal" yerine, yukarıdaki yapar.

Bunu nasıl yapılacağını başka birinin anladığını görmek için bunu yeni bir soru olarak sorabilirim.

+1

'git config remote.heroku.push BAŞ: > git config uzak [localBranchName] .push [durumda uzak]:. [RemoteBranchName] –

3

"O’Reilly - Sürümüyle Kontrol" sayfa 184 | Fasıl 11: Uzaktan Depoları bir git itme işlemi sırasında

, genellikle sağlamak ve yerel konu dallarında yapılan değişiklikleri yayınlamak istiyoruz. Başkalarının yüklemeden sonra uzak deposundaki değişikliklerinizi bulmasına izin vermek için, değişiklikleriniz bu depoda konu dalları olarak görünmelidir.

+refs/heads/*:refs/heads/* 
Bu refspec olarak paraphrased edilebilir

: Yerel depo itibaren , her almak Böylece tipik bir git push komutu sırasında, senin deposundan kaynak dalları gibi bir refspec kullanarak uzak havuzuna gönderilir Şube adı kaynak ad alanı refs/heads/ altında bulunur ve uzak depoda hedef ad alanı ad alanı altında aynı adlı eşleşen bir şube içine yerleştirin. İlk refs/heads/, yerel deponuza başvuruda bulunur (bir itme yürütüyorsanız), ve ikincisi uzak depoya başvurur. Yıldız işaretleri tüm dalların çoğaltılmasını sağlar. ... Juba örnek arızalanması durumunda yüzden


. Düzeltilmiş refspec olmalıdır: Ben ve @juba ve MatthewFord en versiyonları mükemmel çalışmasını @ test ettik

git config remote.staging-remote.push +refs/heads/local_branch_name:refs/heads/master 
0

Bu, çalışır. Git-akış, heroku ve bir yedek git hizmeti ile müşterileri kurmak için birkaç kez daha kullandım. Repo için

.git/yapılandırma: Tüm doğru

[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = false 
    logallrefupdates = true 
    ignorecase = true 
[heroku] 
    account = youraccount 
[remote "origin"] 
    url = [email protected]: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 = [email protected]:your-prod-app.git 
    push = master:master 
[remote "staging"] 
    pushurl = [email protected]:your-staging-app.git 
    push = staging:master 

çalışma:

git push origin

git pull origin

git push staging

git push production

Her iki yolun tek bir yolla yönlendirilebildiği veya kapatılabildiği stdout ve stdin gibi getirme ve itme hakkında düşünün. Ayrıca, herkes bu ayarları hacklemeden .git/config olmadan nasıl alacağını biliyorsa, lütfen bir düzenlemeyle değişiklik yapmaktan çekinmeyin, karışık noktaları takip ettiğinizden emin olun.