Передача локального репозитория Git на новый пульт, включая все ветви и теги - PullRequest
477 голосов
/ 29 июля 2011

У меня есть локальное Git-репо, которое я хотел бы перенести в новое удаленное репо (новое репо, настроенное на Beanstalk, если это важно). В моем локальном репо есть несколько веток и тегов, и я бы хотел сохранить всю свою историю. Похоже, мне просто нужно сделать git push, но это только загрузит основную ветку. Как мне все подтолкнуть, чтобы я получил полную копию моего локального репо на пульте?

Ответы [ 11 ]

1 голос
/ 30 марта 2017

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

Ожидаемый результат: репо «клонирован» на другой пульт (т. Е. С Github на другого провайдера):

  • Все филиалы созданы на новом пульте
  • Вся история ветки создается на новом пульте
    • (это было пропущено при каждом решении, которое я пробовал)
  • Все теги созданы на новом пульте
  • Источник движется над (данное)
  • Неразрушающий (пауза для опции --mirror)

Основная проблема, с которой я столкнулся, заключалась в том, что все удаленные ветви не были воссозданы в новом пульте. Если команда это сделала, у нового пульта не было истории ветвей (т. Е. Выполнение git checkout branch; git log не показывало бы ожидаемые коммиты ветвления).

Я заметил, git checkout -b branchname - это НЕ то же самое, что git checkout branchname (последний - то, что мне было нужно). Я заметил, что git checkout --track branchname, похоже, не тянул историю веток.

Мое решение (на базе PowerShell):

Function Git-FetchRemoteBranches {
$originalbranch = (git symbolic-ref HEAD).split("/")[-1]

Foreach ($entry in (git branch -r)) {

If ($entry -like "*->*") {
  $branch = $entry.split("->")[2].split("/")[1]
}
  else {$branch = $entry.split("/")[1]}

Write-Host "--Trying git checkout " -NoNewline
Write-Host "$branch" -Foreground Yellow

git checkout $branch

Remove-Variable branch -Force

""}

#Switch back to original branch, if needed
If ( ((git symbolic-ref HEAD).split("/")[-1]) -ne $originalbranch) {
"Switching back to original branch"
git checkout $originalbranch
Remove-Variable originalbranch -Force
}
}

git clone http://remoterepo
cd remoterepo
Git-FetchRemoteBranches
git remote add newremote
git push newremote --all
git push newremote --tags #Not sure if neeeded, but added for good measure
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...