當你在github上分發倉庫時,你的分叉倉庫包含了所有的分支和標籤。如何更新我的叉具有與github上的原始存儲庫相同的分支和標籤?
隨着時間的推移,這些分支和標籤會過時。
與叉子一樣容易,確保您的叉子具有所有分支和標籤而無需reclone?
即一個git magicpull --rebase上游/ * myremote/*
這將取所有的分支和標籤在上游和確保同存在於myremote。
當你在github上分發倉庫時,你的分叉倉庫包含了所有的分支和標籤。如何更新我的叉具有與github上的原始存儲庫相同的分支和標籤?
隨着時間的推移,這些分支和標籤會過時。
與叉子一樣容易,確保您的叉子具有所有分支和標籤而無需reclone?
即一個git magicpull --rebase上游/ * myremote/*
這將取所有的分支和標籤在上游和確保同存在於myremote。
這裏假設你的「上游」遠程被命名爲「原點」,並輸入您的用戶名(即「maxandersen」)
當你有你的克隆運行以下單下有你自定義的叉子襯墊(的Track all remote git branches as local branches刷新:
remote=origin ; for brname in `git branch -r | grep origin | grep -v master | grep -v HEAD | sed -e 's/.*\///g'`; do git branch --track $brname $remote/$brname ; done
這將建立跟蹤分公司在遠程命名爲「原點」 找到的所有分支如果你已經有這個BRANCHNAME結賬也不會除了確保跟蹤到位之外,更改任何內容。
(可選)現在確保您的所有分支都UPTODATE(有用的,如果你已經分公司簽出):
git pull --rebase --all
現在,隨着各分支機構設置用於跟蹤和UPTODATE推分支和標籤遠程(用您的遠程名稱替換'maxandersen'):
git push --all maxandersen
git push --tags maxandersen
之後,您的分叉同步。
以下腳本做這一切,包括要求確認:
## Checkout all branches from remote as tracking branches. Based on https://stackoverflow.com/questions/379081/track-all-remote-git-branches-as-local-branches/6300386#6300386
UPSTREAM=$1
MYREPO=$2
usage() {
echo "Usage:"
echo "$0 <upstream-remote> <target-remote>"
echo ""
echo "Example which ensures remote named 'maxandersen' have all the same branches and tags as 'origin'"
echo "$0 origin maxandersen"
exit 1
}
if [ -z "$UPSTREAM" ]
then
echo Missing upstream remote name.
usage
fi
if [ -z "$MYREPO" ]
then
echo Missing target remote name.
usage
fi
read -p "1. This will setup '$MYREPO' to track all branches in '$UPSTREAM' - Are you sure ?" -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]
then
for brname in `git branch -r | grep "$UPSTREAM" | grep -v master | grep -v HEAD | sed -e 's/.*\///g'`; do git branch --track $brname $UPSTREAM/$brname ; done
fi
read -p "2. This will push all local branches and tags into '$MYREPO' - Are you sure ?" -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]
then
git push --all $MYREPO
git push --tags $MYREPO
fi
另存爲「updateallbranchestags.sh」,並執行它:
sh updateallbranches.sh origin maxandersen
與各分公司從「產地/標籤'將在遠程名爲'maxandersen'
您仍然需要一個本地克隆,這將:
origin
and upstream
in GitHub」git push --all origin
(原產地是你的叉子):該假設認爲:
upvote發送我在正確的方向:) –
您可以直接推動遠程參考。 顯然這並沒有考慮到fork的變化,但它仍然回答了這個問題。如果更改有限,則可以使用當地分支輕鬆合併/重新整理它們。
git push -f origin refs/remotes/upstream/*:refs/heads/*
聽起來我的答案的具體實現。 +1 – VonC
是的,請注意,我也移動使用--track而不是--set-upstream來擺脫惱人的棄用警告+我用sed而不是awk使得oneliner更短:)因此,感謝您的提示! –
我不會推薦 - 原因在我的單行答案中解釋http://stackoverflow.com/a/6300386/6309(更新):你應該使用'--set-upstream-to'(或' - - u'),在http://stackoverflow.com/a/10002469/6309 – VonC