Чтобы нажать все ваши ветви , используйте либо (замените REMOTE на имя пульта, например «origin»):
git push REMOTE '*:*'
git push REMOTE --all
Чтобы нажать все ваши теги :
git push REMOTE --tags
Наконец, я думаю, вы можете сделать это все в одной команде с помощью:
git push REMOTE --mirror
Однако, кроме того, --mirror
, также надавит ваши пульты, так что это может быть не совсем то, что вы хотите.
Нажимать ветки и теги (но не удалять):
git push origin 'refs/tags/*' 'refs/heads/*'
Это было бы эквивалентно объединению опций --tags
и --all
для git push
, что git не кажется позволяют.
На основании ответа @Daniel я сделал:
for remote in \`git branch | grep -v master\`
do
git push -u origin $remote
done
В случае, как я, что вы приобрели репо и теперь переключили отдаленное происхождение на другое репо, новый пустой ...
Итак, у вас есть свое репо и все ветви внутри, но вам еще нужно проверить эти ветви для команды git push --all
, чтобы на самом деле нажать их тоже.
Вы должны сделать это, прежде чем нажимать:
for remote in `git branch -r | grep -v master `; do git checkout --track $remote ; done
Далее следует
git push --all
Зеркалирование репозитория
Создание голого клона в репозитории.
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/
В моем случае работа была.
git push origin --all
Я обнаружил, что никто из них, похоже, не работал должным образом для меня. Невозможно искупить это до смерти, но по какой-то причине не смогли заставить другие опции работать правильно.
Ожидаемый результат был репо «клонирован» на другой пульт (т. Е. От Github к другому провайдеру):
Главной проблемой, которую я наблюдал, было то, что либо все удаленные филиалы не воссоздавались на новом пульте дистанционного управления. Если команда была выполнена, новый пульт не имел истории ветвей (т. Е. Выполнение 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
Командная строка для git-push
стоит прочитать. В сочетании с этим сайтом я написал следующее в моем .git/config
:
[remote "origin"]
url = …
fetch = …
push = :
push = refs/tags/*
. push = :
означает «нажимать любые« соответствующие »ветви (т. Е. Ветви, которые уже существуют в удаленный репозиторий и локальный экземпляр), а push = refs/tags/*
означает «нажимать все теги».
Так что теперь мне нужно запустить git push
, чтобы нажимать все соответствующие ветви и все теги.
Да, это не совсем то, что хотел OP (все ветви, которые нужно нажимать, уже должны существовать на удаленной стороне), но могут быть полезны для тех, кто находит этот вопрос во время поиска в googling для «как я нажимаю ветви и теги одновременно ».
Это самый сжатый способ, который я нашел, если пункт назначения пуст. Переключитесь в пустую папку, а затем:
# 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
и т. Д., Если это необходимо.
Я нашел ответы выше, все еще есть некоторые неясные вещи, которые будут вводить пользователей в заблуждение. Во-первых, он уверен, что 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
Таким образом, вы получите дополнительную головную ветвь, которая не имеет смысла.