Я обнаружил, что ни один из них, казалось, не работал должным образом для меня. Не стесняйтесь поджечь это до смерти, но по какой-то причине не смогли заставить другие варианты работать должным образом.
Ожидаемый результат: репо «клонирован» на другой пульт (т. Е. С 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