Измените удаленный URL-адрес git без потери какого-либо отделения и там Data [duplicate]

398
задан Cory Imdieke 28 July 2011 в 21:33
поделиться

10 ответов

Чтобы нажать все ваши ветви , используйте либо (замените REMOTE на имя пульта, например «origin»):

git push REMOTE '*:*'
git push REMOTE --all

Чтобы нажать все ваши теги :

git push REMOTE --tags

Наконец, я думаю, вы можете сделать это все в одной команде с помощью:

git push REMOTE --mirror

Однако, кроме того, --mirror , также надавит ваши пульты, так что это может быть не совсем то, что вы хотите.

628
ответ дан Pramod K. 4 September 2018 в 08:13
поделиться

Нажимать ветки и теги (но не удалять):

git push origin 'refs/tags/*' 'refs/heads/*'

Это было бы эквивалентно объединению опций --tags и --all для git push, что git не кажется позволяют.

2
ответ дан CEL 4 September 2018 в 08:13
поделиться

На основании ответа @Daniel я сделал:

for remote in \`git branch | grep -v master\`
do 
    git push -u origin $remote
done
77
ответ дан Community 4 September 2018 в 08:13
поделиться

В случае, как я, что вы приобрели репо и теперь переключили отдаленное происхождение на другое репо, новый пустой ...

Итак, у вас есть свое репо и все ветви внутри, но вам еще нужно проверить эти ветви для команды git push --all, чтобы на самом деле нажать их тоже.

Вы должны сделать это, прежде чем нажимать:

for remote in `git branch -r | grep -v master `; do git checkout --track $remote ; done

Далее следует

git push --all
107
ответ дан Daniel 4 September 2018 в 08:13
поделиться

Зеркалирование репозитория

Создание голого клона в репозитории.

git clone --bare https://github.com/exampleuser/old-repository.git

Зеркальное нажатие на новый репозиторий.

cd old-repository.git
git push --mirror https://github.com/exampleuser/new-repository.git

Удалить временный локальный репозиторий, созданный на шаге 1.

cd ..
rm -rf old-repository.git

Зеркалирование репозитория, содержащего объекты Git Large File Storage

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

git clone --bare https://github.com/exampleuser/old-repository.git

Перейдите в репозиторий вы просто клонировали.

cd old-repository.git

Потяните объекты хранилища больших объектов Git большого хранилища.

git lfs fetch --all

Зеркально нажмите в новый репозиторий.

git push --mirror https://github.com/exampleuser/new-repository.git

Нажмите на объект Git Large File Storage в зеркало.

git lfs push --all https://github.com/exampleuser/new-repository.git

Удалите временный локальный репозиторий, созданный на шаге 1.

cd ..
rm -rf old-repository.git

Выше инструкция поступает от Github Справка: https://help.github.com/articles/duplicating-a-repository/

-2
ответ дан Michał Zalewski 4 September 2018 в 08:13
поделиться

В моем случае работа была.

git push origin --all
5
ответ дан nomulex 4 September 2018 в 08:13
поделиться

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

Ожидаемый результат был репо «клонирован» на другой пульт (т. Е. От 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
0
ответ дан PotatoFarmer 4 September 2018 в 08:13
поделиться

Командная строка для git-push стоит прочитать. В сочетании с этим сайтом я написал следующее в моем .git/config:

[remote "origin"]
    url = …
    fetch = …
    push = :
    push = refs/tags/*

. push = : означает «нажимать любые« соответствующие »ветви (т. Е. Ветви, которые уже существуют в удаленный репозиторий и локальный экземпляр), а push = refs/tags/* означает «нажимать все теги».

Так что теперь мне нужно запустить git push, чтобы нажимать все соответствующие ветви и все теги.

Да, это не совсем то, что хотел OP (все ветви, которые нужно нажимать, уже должны существовать на удаленной стороне), но могут быть полезны для тех, кто находит этот вопрос во время поиска в googling для «как я нажимаю ветви и теги одновременно ».

11
ответ дан scy 4 September 2018 в 08:13
поделиться

Это самый сжатый способ, который я нашел, если пункт назначения пуст. Переключитесь в пустую папку, а затем:

# Note the period for cwd >>>>>>>>>>>>>>>>>>>>>>>> v
git clone --bare https://your-source-repo/repo.git .
git push --mirror https://your-destination-repo/repo.git

Подставьте https://... для file:///your/repo и т. Д., Если это необходимо.

7
ответ дан ta.speot.is 4 September 2018 в 08:13
поделиться

Я нашел ответы выше, все еще есть некоторые неясные вещи, которые будут вводить пользователей в заблуждение. Во-первых, он уверен, что git push new_origin --all и git push new_origin --mirror не могут дублировать все ветви происхождения, а просто дублируют ваши локальные ветви на ваш new_origin.

Ниже приведены два полезных метода, которые я тестировал:

1, дублируйте с помощью clone bare repo. git clone --bare origin_url, затем введите папку и git push new_origin_url --mirror. Таким образом, вы также можете использовать git clone --mirror origin_url, оба --bare и --mirror загружают голый репо, не считая рабочего пространства. пожалуйста, обратитесь к this

2, если у вас есть git repo с помощью git clone, что означает, что у вас есть рабочее пространство repo и git, вы можете использовать git remote add new_origin new_origin_url, а затем git push new_origin +refs/remotes/origin/\*:refs/heads/\*, а затем git push new_origin --tags

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

3
ответ дан yanzi1225627 4 September 2018 в 08:13
поделиться
Другие вопросы по тегам:

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