2013-03-07 83 views
1

This answer解釋瞭如何同時推送多個回購。「git push all」(多個存儲庫)不起作用

  1. .git/config包含:

    [remote "all"] 
        url = [email protected]:commerce-sciences/scale-master.git 
        url = [email protected]:scale-master.git 
    
  2. git push all成功地部署到Heroku的。

  3. 看來,由於某種原因,更改不會推到github上。

> git push all 
Everything up-to-date 
Everything up-to-date 

> git status 
# On branch master 
# Your branch is ahead of 'origin/master' by 22 commits. 
# 
nothing to commit (working directory clean) 

我缺少什麼?

+0

你能確認GitHub真的沒有更新嗎?即通過網站,或通過運行'git fetch origin'? – poke 2013-03-07 14:03:17

回答

5

您配置all遠程存儲庫的方式根本沒有鏈接到本地​​存儲庫中的現有存儲庫。因此,all中的第二個存儲庫與origin不同,儘管它具有相同的URL。

當你推動所有,Git不知道它也推動到origin這樣做。因此它不能更新本地存儲庫中的遠程分支。

不幸的是,你不能改變這種行爲。 git push不支持遠程存儲庫組,如git fetch所做的那樣。至少尚未。如果確實如此,Git將會有一個從遠程倉庫(組)allorigin的顯式鏈接,並且可以更新本地引用。

就目前而言,你唯一的選擇就是力推all,使用git fetch origin或者只是git fetch(用於遠程跟蹤分支)之後的個人遙控器取出,或推給他們明確地開始。

+0

謝謝,我仍然難過,但現在我明白了。 – ripper234 2013-03-07 15:00:04

2

從我所瞭解的需求中,您不需要「全部」遙控器。 :只需在「origin」遙控器上配置第二個推送網址,就不會有這個問題。

[remote "origin"] 
    url = [email protected]:commerce-sciences/scale-master.git 
    url = [email protected]:scale-master.git 

git remote -v輸出:

origin [email protected]:commerce-sciences/scale-master.git (fetch) 
origin [email protected]:commerce-sciences/scale-master.git (push) 
origin [email protected]:scale-master.git (push) 

這意味着: - git push origin現在推到這兩個URL。 - git fetch origin(仍然)只從第一個網址取回

1

但是,如果您真的想要分開「所有」和「原點」遙控器,您仍然可以正確地執行您想要的操作。

關鍵是(再一次)在git的非常酷的配置。

讓我們看看會發生什麼,當你git push all

  • git的第一個網址(好)

  • 混帳推第二網址(好)

  • 它,然後取推第一個URL用於更新存儲庫的遠程分支,refs/remote/all

爲什麼git抱怨「提前提交」?因爲它比較你的當前分支(主)和上游分支,這是起源/主。

事實是,我們可以改變(或者一個就足夠了):

  1. 更新的分支,所以我們獲取所有到裁判/遙控器/原產地,而不是爲參/遙控器/所有。在[remote "all"]配置塊,線

    fetch = +refs/heads/*:refs/remotes/all/*

手段 「更新參/遙控器/所有」。所以你剛纔添加/更改它:

`fetch = +refs/heads/*:refs/remotes/origin/*` 

它完成:git fetch origingit fetch all現在有同樣的效果(更新origin/master分支)

警告:太多擺弄獲取配置可能會導致存儲庫不知道實際執行的內容。所以保持簡單和合乎邏輯。

  • 了Git當前的一個
  • 如果git push --set-upstream all,那麼你的主人分行將遵守所有/主比較,而不是產地/主遠程分支。所以它不會抱怨你有提交。請注意,由於上游分支永久保留,因此您只需對此一次。

    簡而言之:

    方法1:更改爲遠程 「所有」

    [remote "all"] 
        url = (url1) 
        url = (url2) 
        -fetch = +refs/heads/*:refs/remotes/all/* 
        +fetch = +refs/heads/*:refs/remotes/origin/* 
    

    方法2獲取配置:使你的分支遵守所有/主,而不是產地/主

    [branch "master"] 
        -remote = origin 
        +remote = all 
        merge = refs/heads/master