Как обновить свою вилку, чтобы иметь те же ветки и теги, что и исходный репозиторий на github?

Когда вы форкируете репозиторий на github, ваше разветвленное репо содержит все ветки и теги.

С течением времени эти ветки и теги устаревают.

Как легко сделать это с помощью fork, убедитесь, что у вашей вилки есть все ветки и теги, не требующие повторения?

то есть. a git magicpull --rebase upstream/* myremote/*

который будет извлекать все ветки и теги в восходящем направлении и убедиться, что они есть в myremote.

+28
03 апр. '13 в 5:45
источник поделиться
3 ответа

Это предполагает, что ваш "восходящий" удаленный носитель называется "origin" , и у вас есть свой собственный вил под вашим именем пользователя (то есть "maxandersen" )

Когда у вас есть клон, запустите следующий однострочный (обновить Отслеживать все удаленные ветки git как локальные ветки:

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

Это приведет к настройке ветвей отслеживания для всех ветвей, найденных в удаленном объекте с именем "origin" . Если у вас уже есть чек с этим branchname, это ничего не изменит, за исключением того, что отслеживание на месте.

(Необязательно) Теперь убедитесь, что все ваши ветки uptodate (полезно, если вы уже проверили ветки):

git pull --rebase --all

Теперь со всеми настройками ветвей для отслеживания и перетаскивания ветвей и тегов push на ваш пульт (замените "maxandersen" на свое удаленное имя):

git push --all maxandersen
git push --tags maxandersen

После этого ваша вилка находится в синхронизации.

Следующий script делает все это, включая запрос подтверждения:

## Checkout all branches from remote as tracking branches. Based on    /questions/1016/track-all-remote-git-branches-as-local-branches/15447#15447

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

И все ветки/теги из "origin" будут доступны в удаленном имени "maxandersen"

+28
03 апр. '13 в 7:20
источник

Связанные вопросы


Похожие вопросы

Вам все равно нужен локальный клон, который:

upstream and fork

  • git push --all origin (происхождение - это ваша вилка): это предполагает, что:
    • у вас есть все локальные ветки, отслеживающие все ветки восходящего потока (см. предыдущий шаг).
      В противном случае вы по умолчанию нажимаете только одну локальную ветвь, поскольку клон будет создавать только одну локальную ветвь (по умолчанию)
    • вы не нажимали на свои ветки свои собственные.
+15
03 апр. '13 в 5:53
источник

Вы можете напрямую нажать пульт ДУ. Очевидно, что это не учитывает изменения в вилке, но это все еще отвечает на вопрос. И если изменения ограничены, вы можете легко объединить/переустановить их, используя свои локальные ветки.

git push -f origin refs/remotes/upstream/*:refs/heads/*
0
24 дек. '17 в 12:58
источник

Посмотрите другие вопросы по меткам или Задайте вопрос