Я бы хотел по умолчанию выдвигать и извлекать все ветви, включая только что созданные.
Есть ли параметр, который я могу определить для него?
В противном случае, когда я добавляю новую ветку локально и хочу извлечь ее с сервера, какой самый простой способ сделать это?
Я создал новую ветку с тем же именем и попытался вытащить, но это не работает. Спрашивает у меня все удаленные конфиги ветки. Как мне это установить.
git
version-control
branch
push
Лакшман Прасад
источник
источник
Ответы:
Самый простой способ сделать это:
Это подтолкнет теги и ветви.
источник
-u
один раз, напримерgit push --all origin -u
, отслеживание настроено, и после этого вы можете просто использоватьgit push
.git push --tags origin
для нажатия всех тегов.С современным git вы всегда извлекаете все ветви (как ветви с удаленным отслеживанием в
refs/remotes/origin/*
пространство имен, видимое с помощьюgit branch -r
илиgit remote show origin
).По умолчанию (см. Документацию по
push.default
переменной config) вы нажимаете соответствующие ветви , что означает, что сначала вы должны сделать,git push origin branch
чтобы git всегда включал егоgit push
.Если вы хотите всегда выдвигать все ветви , вы можете настроить push refspec. Предполагая, что имя удаленного устройства
origin
вы можете использовать, вы можете использовать git config :или напрямую отредактируйте
.git/config
файл так, чтобы он был примерно таким:источник
git push --all origin
подходит для однократной публикации всех веток и тегов, хотя по умолчанию вплоть до «соответствующей» семантики текущей версии будет означать, что вы будете толкать все ветви потом ... если вы не добавите новую ветку или тег. Установка на «толчок [...] все ветви по умолчанию» будет , как написано.fatal: Invalid refspec ''+refs/heads/*:refs/heads/*''
(Примечание: я нахожусь на git 2.0. Я все еще работаю над тем, как это исправить.)push.default
issimple
.Включение + в спецификации push, вероятно, является плохой идеей, поскольку это означает, что git с радостью выполнит push без ускоренной перемотки вперед даже без -f , и если удаленный сервер настроен на их прием, вы можете потерять историю.
Попробуйте только это:
источник
--global
опцию к каждому из них, чтобы сделать это глобальным значением по умолчанию для всех ваших репозиториев.git remote add
.Я использовал приведенные ниже команды для переноса всех веток в новый репозиторий.
ПРИМЕЧАНИЕ. При клонировании репозитория из Atlassian Stash в AWS CodeCommit (пустой репо) мне пришлось использовать вторую последнюю команду (т. Е. Push master first ). Я не уверен, что причина, но после нажатия (
git push new-origin --mirror
) ветка по умолчанию ссылалась на какую-то другую ветку, чемmaster
.источник
git push new_origin --all
только подтолкнуть ваши текущие локальные ветви к new_origin, а не ко всем веткам происхождения.--bare
хранилище, которое немного отличается от обычного хранилища, в нем есть только.git
файлы, а не ваши файлы. Это вполне достаточно, если вы не собираетесь работать в нем. Смотрите--bare
и--mirror
git-scm.com/docs/git-clone .Если вы перемещаете ветки в новое репо из старого и НЕ имеете все локальные ветки репо, вы должны будете сначала отследить их.
Затем добавьте ваше новое удаленное репо:
Затем вы можете нажать все, используя эту команду:
Или вы можете настроить репо, используя команды git config, указанные в других ответах здесь, если вы не делаете это один раз или только хотите переместить локальные ветви.
Важный момент, другие ответы только подталкивают все ЛОКАЛЬНЫЕ ветви. Если ветви существуют только в альтернативном REMOTE-репозитории, они не будут перемещаться без предварительного их отслеживания. Представленный здесь цикл for поможет в этом.
источник
git branch --track reponame origin/reponame
противном случае вы будете отслеживать все удаленные ветки в текущей локальной веткеgit branch -r | grep -v '\->' | sed 's/ origin\///'
, который дает только имя удаленной ветви.Чтобы увидеть все ветви без использования,
git branch -a
вы должны выполнить:Теперь вы можете увидеть все ветви:
Чтобы подтолкнуть все ветви попробуйте:
источник
git fetch --all
?Если вы перемещаете все ветви в новое репо из старого, то в локальном репо необходимо настроить отслеживание каждой ветви в существующих исходных ветках, прежде чем переходить к новому репо, иначе все ваши исходные ветви не появятся в новое происхождение. Сделайте это вручную, отслеживая или проверяя каждую ветку, или используйте один вкладыш:
Эта однострочная команда основана на ее версиях в других ответах на этой странице, но, возможно, лучше, потому что:
Далее, если вы переключаете источники, замените ссылку на старый источник и укажите на новый пульт. Сначала убедитесь, что вы создаете новый пульт, используя графический интерфейс bitbucket / github, но не добавляйте в него какие-либо файлы, иначе возникнет проблема слияния. Например
Теперь дави. Обратите внимание, что вторая команда необходима также для добавления тегов:
источник
Решение без жесткого кодирования
origin
в конфигеИспользуйте следующее в вашем глобальном gitconfig
Это подталкивает все ветви и все теги
Почему вы не должны жестко кодировать
origin
в конфиге?Если вы жестко закодировали:
origin
в качестве удаленного во всех репозиториях. Таким образом, вы не сможете добавить источник, но вам нужно использоватьset-url
.origin
уже существует (из пункта 1), помните :)За загрузкой позаботился уже современный git
Согласно ответу Якуба Наребского:
источник