2017-08-02 30 views
1

我已經看到您可以添加一個遠程並且聲明它的pushurl是另一個遠程。GIT使本地分支從remote1/master拉出並推送到remote2/legacy

例如,如果我把我的原點爲

git remote add origin [email protected]:newrepo/newrepo.git 

我可以添加一個新的遠程,並設置其pushurl我的原點:

git remote add oldremote [email protected]:oldrepo/oldrepo.git 
git remote set-url --push oldremote [email protected]:newrepo/newrepo.git 

所以,如果我從oldremote/branch1創建一個分支branch1

​​

它會從oldremote/branch1並推送到origin/branch1

這可按預期工作。做git pulloldremote拉(並說我們是最新的),並推到origin。好,易於。

現在我試圖創建一個與遠程分支名稱不同的分支。特別是,我想跟蹤oldremote/master作爲本地分支legacy,並且讓本地分支推送到origin/legacy

git fetch oldremote master 
git checkout -b legacy oldremote/master 

現在,這有兩個副作用。

首先,做git push不推送到origin/legacy。我必須做git push origin legacy

其次,做git pull不只是從oldremote/master獲取和合並。它從oldremote獲取每個分支。

TL/DR

有沒有辦法從一個分支拉在一個遠程推到另一個分支在另一個遠程分支時的名字有什麼不同?

回答

3
git config branch.legacy.remote oldremote 
git config branch.legacy.pushremote origin 
git config branch.legacy.merge refs/heads/master 

git config --local -e應該是這樣的:

[remote "oldremote"] 
    url = [email protected]:oldrepo/oldrepo.git 
    fetch = +refs/heads/*:refs/remotes/oldremote/* 
[remote "origin"] 
    url = [email protected]:newrepo/newrepo.git 
    fetch = +refs/heads/*:refs/remotes/origin/* 
[branch "master"] 
    remote = oldremote 
    merge = refs/heads/master 
[branch "legacy"] 
    remote = oldremote 
    pushremote = origin 
    merge = refs/heads/master 

注意的push.default值應該是未設置或simple。正如手冊所述,simple已成爲Git 2.0中的默認設置。如果其值不是simple或未設置,則git push可能會失敗。

+0

我不知道'pushremote'設置。我會給它一個 – amenadiel

+0

它的工作原理!唯一讓人煩惱的是,在踩上傳統分支時進行git pull,它會提取舊分支回購的每個分支和每個標籤。但我想我可以忍受這一點。 – amenadiel