簡體   English   中英

git 迭代地將所有分支從一個遠程推送到另一個遠程

[英]git push all branches from one remote to another remote iteratively

我有一個用例,我們正在為一個項目從一個遠程遷移到另一個。

legacy_remote :目前已經存在的現有遙控器。 new_remote :必須從舊遠程推送所有數據的新遠程。

我正在使用以下命令。

git remote set-url origin <legacy_remote>
git checkout master
git pull
git remote set-url origin <new_remote>
git push --force -u origin --all 
git push origin --tags 

我使用 force 關鍵字的原因是,每次我進行合並時,我不想解決新遠程中的沖突,而是替換新遠程中的內容,因為它目前尚未使用。

正在發生的問題是該命令:

git push --force -u origin --all 

此命令僅將主控同步到主控,但不會將所有分支從遺留遠程移動到新遠程。 誰能告訴我命令中缺少什么。

不使用鏡像的原因是在新遠程上創建了幾個新分支,它們不想被覆蓋

然后嘗試

git push newremote --tags refs/remotes/origin/*:refs/heads/*

git push --force -u origin --all相比,不必先檢查分支,如此處所述

除了VonC 的回答,您還可以:

git push newremote localname1:remotename1 localname2:remotename2 ...

根據需要用更多localname : remotename對替換... 每個本地名稱可以是分支或遠程跟蹤名稱: refs/heads/ branchrefs/remotes/origin/ name ,每個遠程名稱通常應該是您要在遠程上創建或更新的分支名稱。 將其完整拼寫出來,例如refs/heads/somebranch ,通常是個好主意; 當且僅當 Git 不會為您執行此操作時,它才是真正需要的,但很難提前知道Git 何時會為您執行此操作,因此最好只提前 go 並執行此操作。

您可以根據需要使用或不使用--force

在 shell 腳本中,您可以構建要推送的名稱集:

names=
# use some local branch names
for b in br1 br2 br3; do
    names="$names refs/heads/$b:refs/heads/$b"
done
# and some remote-tracking names
for r in br3 br4 br5; do
    names="$names refs/remotes/origin/$r:refs/heads/$r"
done

# show what we would run
echo git push --force origin $names

運行腳本,進行調整直到獲得正確的名稱集,然后取出echo顯並最后運行一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM