У меня есть локальное Git-репо, которое я хотел бы перенести в новое удаленное репо (новое репо, настроенное на Beanstalk, если это имеет значение).
В моем локальном репо есть несколько веток и тегов, и я бы хотел сохранить всю свою историю.
Похоже, мне просто нужно сделать git push
, но это только загружает master
ветку.
Как мне все подтолкнуть, чтобы я получил полную копию моего локального репо на пульте?
Ответы:
Чтобы протолкнуть все ваши ветви , используйте любую (замените REMOTE на имя пульта, например «origin»):
Чтобы вставить все ваши теги :
Наконец, я думаю, что вы можете сделать все это одной командой:
Тем не менее, кроме того
--mirror
, также подтолкнет ваши пульты, так что это может быть не совсем то, что вы хотите.источник
--all
вместо того, чтобы*:*
казаться более дружелюбнымgit push REMOTE --all
вернулNo refs in common and none specified;
ничего не делая., В то время как наgit push REMOTE "*:*
самом деле подтолкнул все ветви к удаленному.git clone --mirror old-remote-url; cd repo.git; git push --mirror new-remote-url
.В случае, как я, вы приобрели репо и теперь переключаете удаленный источник на другой репо, новый пустой ...
Итак, у вас есть репо и все ветки внутри, но вам все равно нужно проверить эти ветки, чтобы
git push --all
команда тоже подтолкнула их.Вы должны сделать это, прежде чем нажать:
С последующим
источник
git push '*:*'
подтолкнули все ветки.git push -all
просто толкнул мастера. Я перевозил репо из GitHub в Bitbucket.--track remotes/$remote
вместо--track $remote
. Вот полная командная строка:for remote in `git branch -r | grep -v master `; do git checkout --track remotes/$remote ; done
Вот еще один пример того же, что сработало лучше для ситуации, в которой я находился. Он решает проблему, когда у вас есть более одного пульта, вы хотели бы клонировать все ветви от удаленного
source
к удаленному,destination
но без предварительной проверки их всех.(Проблема, с которой я столкнулся при решении Даниэля, состояла в том, что он отказывался бы извлекать ветку отслеживания с
source
удаленного компьютера, если я уже проверил ее ранее, то есть она не будет обновлять мою локальную ветвь до отправки)это подтолкнет все ветви в удаленном направлении
source
к головному ответвлениюdestination
, возможно, выполняя ускоренную перемотку вперед. Вы все еще должны нажимать метки отдельно.источник
remote
к другому. Спасибо!git push destination +refs/remotes/source/\*:refs/heads/\*
--prune
опции.--mirror
параметра, который все рекомендуют. Идеально подходит для сценариев, где вы просто хотите синхронизировать два пульта дистанционного управления для целей автоматизации или аудита.Это самый краткий способ, который я нашел, при условии, что пункт назначения пуст. Переключитесь на пустую папку и затем:
Подставим
https://...
дляfile:///your/repo
т.д. в зависимости от обстоятельств.источник
Руководство
git-push
стоит прочитать. В сочетании с этим сайтом я написал следующее в моем.git/config
:Это
push = :
означает «проталкивать любые« совпадающие »ветви (т. Е. Ветви, которые уже существуют в удаленном репозитории и имеют локальный аналог), аpush = refs/tags/*
означает« проталкивать все теги ».Так что теперь мне нужно только запустить
git push
все соответствующие ветви и все теги.Да, это не совсем то, что хотел OP (все ветви, которые нужно нажать, должны уже существовать на удаленной стороне), но может быть полезно для тех, кто находит этот вопрос во время поиска в Google «Как я нажимаю ветви и теги одновременно? время".
источник
В моем случае, что сработало.
источник
origin
псевдоним удаленного URL Git-репозитория.Зеркальное отображение хранилища
Создайте голый клон репозитория.
Зеркало-толчок в новый репозиторий.
Удалите временный локальный репозиторий, созданный на шаге 1.
Зеркалирование репозитория, содержащего объекты Git Large File Storage
Создайте голый клон репозитория. Замените пример имени пользователя на имя человека или организации, которая владеет репозиторием, и замените пример репозитория именем репозитория, который вы хотите дублировать.
Перейдите в репозиторий, который вы только что клонировали.
Вытащите объекты хранилища Git Large File Storage.
Зеркало-толчок в новый репозиторий.
Поместите объекты хранилища Git Large File Storage в свое зеркало.
Удалите временный локальный репозиторий, созданный на шаге 1.
Приведенная выше инструкция взята из справки Github: https://help.github.com/articles/duplicating-a-repository/
источник
Я нашел выше ответы все еще есть некоторые неясные вещи, которые могут ввести пользователей в заблуждение. Во-первых, уверен, что
git push new_origin --all
иgit push new_origin --mirror
не может дублировать все ветви происхождения, это просто дублировать ваши местные существовавшие ветви к вашему new_origin.Ниже приведены два полезных метода, которые я протестировал:
1, дублировать клоном голого репо.
git clone --bare origin_url
, затем войдите в папку, иgit push new_origin_url --mirror
. Таким образом, вы также можете использоватьgit clone --mirror origin_url
оба,--bare
и--mirror
загрузит голое хранилище, не включая рабочее пространство. пожалуйста, отошлите это2, если у вас есть git-репо с помощью
git clone
, что означает, что у вас есть голое репо и git-рабочее пространство, вы можете использоватьgit remote add new_origin new_origin_url
, а затемgit push new_origin +refs/remotes/origin/\*:refs/heads/\*
, а затемgit push new_origin --tags
Таким образом, вы получите дополнительную головную ветку, которая не имеет смысла.
источник
Чтобы подтолкнуть ветви и теги (но не удаленные):
Это было бы эквивалентно объединению параметров
--tags
и--all
дляgit push
, которые, по-видимому, git не позволяет.источник
+refs/remotes/source/*
На основании ответа @Daniel я сделал:
источник
| grep -v master
может быть заменено на| sed 's/\*//'
(я полагаю, что вы исключили,master
чтобы избежать неприятных*
мелочей, добавленных к текущей выбранной ветви), что позволяет вам включатьmaster
и избегать любых проблем, когдаmaster
ваша текущая ветка не выбрана. Также извините за некропостинг, просто этот ответ помог мне сегодня, и я хотел поделиться своей модификацией, если она может помочь другим в моем положении ...Я обнаружил, что ни один из них, казалось, не работал должным образом для меня. Не стесняйтесь зажигать это до смерти, но по некоторым причинам не могли заставить другие варианты работать должным образом.
Ожидаемый результат - репо, «клонированный» на другой пульт (т. Е. С Github на другого провайдера):
Основная проблема, с которой я столкнулся, заключалась в том, что все удаленные ветви не воссоздались в новом пульте. Если команда сделала, у нового удаленного не было истории ветвления (т.е.
git checkout branch; git log
Выполнение не показывало ожидаемые коммиты ветвления).Я заметил, что
git checkout -b branchname
это не то же самое, чтоgit checkout branchname
(последнее, что мне было нужно). Я заметил,git checkout --track branchname
что, кажется, не тянет ветку истории.Мое решение (основанное на powershell):
источник
Команда ниже будет выдвигать все ветви ( включая те, которые вы никогда не проверяли, но присутствовали в вашем git-репо, вы можете просмотреть их
git branch -a
)git push origin '*:*'
источник
Я был в процессе перехода от одной службы контроля версий к другой, и мне нужно было клонировать все репозитории, включая все ветви, теги и историю.
Чтобы достичь выше, я сделал следующее:
git push origin '*:*'
Скрипт .sh используется для извлечения всех веток в локальный репозиторий:
источник