Обновление нескольких веток разветвленного репозитория на Github - PullRequest
3 голосов
/ 02 декабря 2010

У меня есть разветвленный репозиторий github (назовите его repo-O и назовите мой fork-repo-F), который содержит около 8 веток.Несколько (100) коммитов было сделано для репо-O от других участников и в нескольких ветках репо-O.Теперь я хотел бы перенести эти изменения в свое раздвоенное репо (repo-F).Я не могу использовать очередь разветвления, так как существует около 3000 коммитов, и я бы предпочел сделать это из командной строки.

Итак ... Я клонировал свое репо, добавил repo-O в качестве удаленного(вверх по течению) и извлек изменения, после чего следует слияние источника / вверх по течению ... затем откат назад к repo-F.

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

Как я могу повторить вышеописанный процесс, чтобы «все» ветви были обновлены?

Спасибо

Ответы [ 2 ]

4 голосов
/ 02 декабря 2010

То, что вы хотите сделать, это "для каждой удаленной ветви в репо-о, создать ту же ветку, указывающую на ветку репо-о, если у меня ее нет, или получить информацию о локальной ветке из того, что находится в той же ветке в репо, и в конце вставьте все эти ветки в мой репо ".

Если предположить, что ваши пульты действительно имеют имена repo-o и repo-f, я бы поиграл с чем-то вроде bash:

for repo_o_branch in \
    $(git branch -a|grep repo-o|perl -nle's,^\s*repo\-o/,,;print $_';
do
    (                                                              \
       ( git checkout $repo_o_branch                               \
         && git pull --rebase repo-o $repo_o_branch)               \
       || ( git checkout -b $repo_o_branch repo-o/$repo_o_branch ) \
    ) && git push repo-f $repo_o_branch;
done

Для всех «веток репо» (обозначается git branch -a как «repo-o / branchname», без «пробелов и части« repo-o / »»),

  • попробуйте проверить ветку и , сделав внутри нее git pull --rebase repo-o branchname,
  • или, если git checkout завершится неудачно (поскольку у вас нет этой ветви): извлеките новую ветку, названную в честь имени ветви репо, и укажите его на фирменное имя репо.
  • Если что-то из вышеперечисленного выполнится успешно, добавьте только что созданное или обновленное имя ветки в репозиторий.

сезон по вкусу; лучше всего использовать только что созданный git-клон repo-f с удаленным repo-o, на случай, если что-то пойдет не так;)

1 голос
/ 14 октября 2011

awk версия с некоторыми хитростями слияния

sync_all_branch () {
  git fetch upstream
  for upstream_branch in   $( git branch -a |awk 'BEGIN {FS="/"} $2=="upstream" {print $3}' ) ;
  do
      if git checkout $upstream_branch
      then
          echo merge $upstream_branch
          git merge -s recursive -Xours upstream/$upstream_branch 
      else
          echo create $upstream_branch
          git checkout -b $upstream_branch upstream/$upstream_branch
      fi
  done
  git checkout master
  git push --all
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...