2010-03-08 214 views
15

我想在Heroku上創建一個分段分支,但有些東西我不太明白。Git推Heroku電流分支到遠程

假設我已經創建了一個應用程序的Heroku和設置遙控器指向分期遠程,如果我做的:

git checkout -b staging staging-remote/master 

我得到所謂的「分期」的本地分支追蹤舉辦的遠程/主 - 或者這就是我想....

但是:

git remote show staging-remote 

給了我這樣的:

remote staging 
    Fetch URL: [email protected]:myappname.git 
    Push URL: [email protected]: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) 

正如你所看到的那樣,拉看起來很合理,但是默認推送沒有。這意味着,如果我這樣做:

混帳推分期遠程

我要去把我的本地的master分支到分段分支。但是,這不是我想要的....基本上,我想更新合併到我的分期分支,然後輕鬆地把它推到Heroku的,而不必指定,像這樣的分支:

git push staging-remote mybranch:master 

上面沒有硬但我想避免無意中執行之前的推送並推錯了錯誤的分支......這對於我想創建的生產分支來說是非常重要的!

我試着混帳配置搞亂,但還沒有想出如何得到這個權利又...

回答

25

我測試了它,@juba和@ MatthewFord的版本完美地工作!

git config remote.staging.push staging:master 

這推動我的本地特性分支命名爲名爲遠程倉庫暫存分期到遠程分支

@nickgrim把它的一般形式,像這樣:

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

更新:

此外,現代git會方便地運行您上面的配置命令時,你git push-u選項:

git push -u staging staging:master 
+1

向後;你想要: 'git config remote。[remoteName] .push [localBranchName]:[remoteBranchName]' – 2011-10-29 03:52:18

+2

@DavidAlpert:不,你已經有了換句話說master'的 – nickgrim 2011-12-02 17:04:29

+0

@nigkgrim是完全正確的。 – thekingoftruth 2011-12-13 19:08:31

1

從頁Everiday的Git與20級的命令或使

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

看來ŧ帽子可以達到你想要做什麼,加入一個配置指令到本地git倉庫,像:

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

然後,如果你做一個git pushmybranch本地分支,應該推到主人分支分段遠程遠程。

然而,請git remote show staging-remote驗證,並在使用前仔細測試它,當我從一個git專家很遠......

7

我有一個名爲的Heroku分支,這個工作對我來說:

git config remote.heroku.push heroku:master 

您面臨的問題是heroku忽略除主人以外的所有分支。

0

我遇到同樣的問題,試圖找出如何處理Heroku的忽略所有分支,但'主'的政策。如果您只能測試Heroku上的主分支,它有點違背了保持獨立分支的全部觀點。

這個限制的後果是,無論我可能在做什麼本地主題分支,我都想要一個簡單的方法將Heroku的主人切換到本地主題分支,並執行「git push -f」來覆蓋掌握在Heroku上。不用說,擁有一個單獨的遠程倉庫(如Github)將是一個非常好的主意,可以在沒有這個限制的情況下支持所有事情。我會稱之爲「起源」,並使用「Herku」作爲Heroku,以便「git push」始終支持一切。

我從閱讀的http://progit.org/book/ch9-5.html的「推Refspecs」一節得到的是

混帳推Heroku的地方話題分支:裁判/頭/主

我真正喜歡的是一種方法,在配置文件中進行設置,以便「git push heroku」總是執行上述操作,用任何當前分支所在的名稱替換「local-topic-branch」。

我可能會問這是一個新問題,看看是否有其他人已經想出瞭如何做到這一點。

+1

'混帳配置remote.heroku.push HEAD: >混帳配置遠程[localBranchName] .push [遠程名]:[remoteBranchName] – 2010-10-02 20:06:40

3

從書「O'Reilly - 使用Git進行版本控制」第184頁|第11章:遠程倉庫

在一個混帳推操作,你通常要提供和發佈 您在您的本地特性分支所做的更改。要允許其他人在上傳遠程存儲庫後在 中找到您所做的更改,您的更改必須作爲主題分支出現在該存儲庫中。

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

此的Refspec可以解釋爲: 從本地儲存庫,把每因此,典型的GIT中推命令期間,從 存儲庫源分支使用的Refspec如發送到遠程存儲庫在源名稱空間 refs/heads/下找到的分支名稱,並將其放置在遠程存儲庫中的目標 名稱空間refs/heads/下的類似命名的匹配分支中。 第一個refs/heads/引用您的本地存儲庫(因爲您正在執行推送),第二個引用遠程存儲庫。星號確保所有分支 都被複制。 ...


這就是爲什麼從朱巴的例子應該失敗。校正的refspec應該是:

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

This works。我已經多次用它來設置git-flow,heroku和備份git服務的客戶端。對於回購

的.git /配置:

[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 

所有正常工作:

git push origin

git pull origin

git push staging

git push production

考慮像stdout和stdin一樣的抓取和推送,其中兩者都可以重定向或關閉爲單向。此外,如果有人知道如何獲得這些設置沒有黑客.git /配置,請隨時修改編輯,業力點肯定會跟着。