Я клонировал Git-репозиторий, который содержит около пяти веток. Однако, когда я делаю, git branch
я вижу только один из них:
$ git branch
* master
Я знаю, что могу сделать, git branch -a
чтобы увидеть все ветви, но как бы я вытянул все ветви локально, чтобы, когда я это сделал git branch
, это показало следующее?
$ git branch
* master
* staging
* etc...
git
branch
git-branch
David542
источник
источник
--single-branch
параметра при клонировании: stackoverflow.com/questions/17714159/… (git fetch --all
никогда не будет работать, если вы указали только одну ветвь!)git clone --bare <repo url> .git
(обратите внимание, что вам нужно добавить «--bare» и «.git» в конце, чтобы клонировать репо как «голое» РЕПО), затемgit config --bool core.bare false
(устанавливает для флага «голое» значение «ложь»), затемgit reset --hard
(переводит ГОЛОВКУ в текущий ГОЛОВ на репо). Теперь, если вам,git branch
вы должны увидеть все ветви репо, который вы клонировали.Ответы:
Вы можете получить все ветви со всех пультов, как это:
Это в основном силовой ход .
fetch
обновляет локальные копии удаленных филиалов, так что это всегда безопасно для локальных филиалов, НО :fetch
не будет обновлять локальные ветви (которые отслеживают удаленные ветви); если вы хотите обновить свои локальные ветки, вам все равно нужно тянуть каждую ветку.fetch
не будет создавать локальные ветви (которые отслеживают удаленные ветви), вы должны сделать это вручную. Если вы хотите перечислить все удаленные ветви:git branch -a
Чтобы обновить локальные филиалы, которые отслеживают удаленные филиалы:
Однако этого может быть недостаточно. Это будет работать только для ваших локальных филиалов, которые отслеживают удаленные филиалы. Для отслеживания всех удаленных веток выполните этот oneliner ДО
git pull --all
:TL; DR версия
(Кажется, что pull извлекает все ветки со всех пультов, но я всегда выбираю сначала, чтобы быть уверенным.)
Выполните первую команду, только если на сервере есть удаленные ветви, которые не отслеживаются вашими локальными филиалами.
PS AFAIK
git fetch --all
иgit remote update
эквивалентны.Комментарий Камиля Шота , который люди сочли полезным.
источник
git checkout -b localname remotename/remotebranch
for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done
потому что ваш код создавал локальные ветви с именем origin / branchname, и я получал, что «refname 'origin / branchname' неоднозначно всякий раз, когда я ссылался на негоgit pull --all; for remote in `git branch -r | grep -v \>`; do git branch --track ${remote#origin/} $remote; done
. Изменение снимает ГОЛОВУ.for /F %remote in ('git branch -r') do ( git branch --track %remote) && git fetch --all && git pull --all
Для просмотра удаленных филиалов:
git branch -r
Вы можете проверить их как местные филиалы с:
git checkout -b LocalName origin/remotebranchname
источник
git checkout remotebranchname
и это работает. какая разница с вашим решением?git checkout remotebranchname
чтобы просто создать новую несвязанную ветку с именем remotebranchname .Вам нужно будет создавать локальные филиалы, отслеживающие удаленные филиалы.
Предполагая, что у вас есть только один удаленный вызов
origin
, этот фрагмент создаст локальные ветви для всех удаленных отслеживающих:После этого
git fetch --all
будут обновлены все локальные копии удаленных филиалов.Кроме того,
git pull --all
будут обновляться ваши локальные ветви отслеживания, но в зависимости от ваших локальных коммитов и от того, как настроен параметр конфигурации «слияние», это может создать коммит слияния, ускоренную перемотку вперед или сбой.источник
git pull --all
обновите все локальные ветви отслеживания? Насколько я могу сказать, он только обновляет текущую ветку со всех пультов.origin
? Посмотрите этот ответ, который будет работать на всех удаленных именах.Если вы делаете:
тогда они будут все там локально. Если вы затем выполните:
вы увидите их в списке как remotes / origin / branch-name. Так как они есть на месте, вы можете делать с ними все, что угодно. Например:
или
или
источник
--all
)git fetch -all
выбирает все ветви всех пультов.git fetch origin
выбирает все ветви пультаorigin
. Последнее - то, о чем спрашивал ОП.--all
означает «все пульты», а не «все ветви данного пульта». Последнее подразумевается любой выборки с пульта.Это предполагает, что все ветви отслеживаются.
Если это не так, вы можете запустить это в Bash:
Затем запустите команду.
источник
->
которой, вероятно, будет существовать выходной файлgit branch -r
`origin / HEAD -> origin / master`Branch 'origin/quote-filenames' set up to track local branch 'master'.
желаемый вывод:Branch 'quote-filenames' set up to track remote branch 'quote-filenames' from 'origin'.
это задом наперед , установка источника для отслеживания пульта. Смотрите этот ответ для исправления.git fetch
не работал. Итак, урок заключается в том, что вам нужно отслеживать удаленные ветви. Gracias!Цикл Bash
for
не работал для меня, но он сделал именно то, что я хотел. Все ветви моего происхождения зеркально отображались как одноименные локально.См. Комментарий Майка Дюпона ниже. Я думаю, что пытался сделать это на сервере Jenkins, который оставляет его в режиме отсоединенной головы.
источник
fatal: Refusing to fetch into current branch refs/heads/master of non-bare repository
после простого клона. Сначала нужно отсоединить голову. Я сделал это сgit checkout <SHA>
git checkout --detach # detach the head
и затемgit fetch origin \'+refs/heads/*:refs/heads/*
Использование
git fetch && git checkout RemoteBranchName
.Это работает очень хорошо для меня ...
источник
origin/branch
, достаточно только сказатьbranch
).Когда вы клонируете репозиторий, вся информация о ветвях фактически загружается, но ветви скрыты. С помощью команды
Вы можете показать все ветви хранилища, и с помощью команды
затем вы можете «загрузить» их вручную по одному.
Тем не менее, есть гораздо более чистый и быстрый способ, хотя он немного сложнее. Вам нужно три шага для этого:
Первый шаг
создайте новую пустую папку на своем компьютере и клонируйте зеркальную копию папки .git из репозитория:
Локальный репозиторий внутри папки my_repo_folder по-прежнему пуст, теперь есть только скрытая папка .git, которую вы можете увидеть с помощью команды «ls -alt» из терминала.
Второй шаг
переключите этот репозиторий из пустого (пустого) репозитория в обычный репозиторий, переключив логическое значение «bare» конфигурации git на false:
Третий шаг
Возьмите все, что находится внутри текущей папки, и создайте все ветви на локальном компьютере, поэтому сделайте это обычным репо.
Теперь вы можете просто ввести команду
git branch
и увидеть, что все ветви загружены.Это быстрый способ, которым вы можете клонировать git-репозиторий со всеми ветками одновременно, но это не то, что вы хотите сделать для каждого отдельного проекта таким образом.
источник
Вы можете получить все ветви:
или:
--depth=10000
Параметр может помочь , если вы обмелевшее хранилищу.Чтобы вытащить все ветви, используйте:
Если вышеприведенное не сработает, то перед этой командой введите:
так как он
remote.origin.fetch
может поддерживать только определенную ветку во время извлечения, особенно когда вы клонировали свое хранилище с--single-branch
. Проверьте это:git config remote.origin.fetch
.После этого вы сможете оформить заказ в любом отделении.
Смотрите также:
Чтобы передать все ветви на удаленный доступ, используйте:
в конце концов,
--mirror
чтобы отразить все ссылки.Если ваша цель - дублировать репозиторий, см .: Дублирование статьи о репозитории на GitHub.
источник
depth=1
), и в конфиге также была указана одна конкретная ветвьfetch
-depth=1000
параметр был исправлением, которое помогло мнеpull --all
не тянет все ветви, но все пультыЯ обычно не использую ничего, кроме таких команд:
Немного короче версия:
источник
Я полагаю, что вы клонировали хранилище:
Теперь перейдите в эту папку с помощью CD:
Если вы напечатаете,
git status
вы можете увидеть все:Чтобы увидеть все скрытые типы веток:
В нем будут перечислены все удаленные ветви.
Теперь, если вы хотите оформить заказ на какую-либо конкретную ветку, просто наберите:
источник
Если вы ищете решение, чтобы получить все ветви и затем перенести все на другой Git-сервер, я соберу следующий процесс. Если вы просто хотите обновить все ветви локально, остановитесь на первой пустой строке.
источник
git fetch git pull
stackoverflow.com/a/292359/1114926pull
действительно делаетfetch
первый, но легче определить, является ли проблемаfetch
частьюpull
или последующейmerge
частью того,pull
когдаfetch
выполняется независимо.После того, как вы клонируете главный репозиторий, вы можете просто выполнить
источник
Убедитесь, что все удаленные ветви извлекаются из
.git/config
файла.В этом примере
origin/production
извлекается только ветвь, даже если вы попытаетесь сделатьgit fetch --all
ничего, ничего не произойдет, кроме извлеченияproduction
ветки:Эта строка должна быть заменена на:
Тогда беги и
git fetch
т.д ...источник
git config --get remote.origin.fetch
а затем (разрушительно) установить его:git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
Цикл не работал для меня, и я хотел игнорировать происхождение / мастер. Вот что сработало для меня.
После того:
источник
grep | awk
антипаттерна :git branch -r | awk -F 'origin/' '!/HEAD|master/{
...Именно эти три команды получат все ветви:
источник
pull --all
. Но если все еще нужно, то другой ответ ниже, @Johnno Nola, предполагая, что все ответвления отслеживаются и смешиваются с этим ответом, - это путь.Почему никто не отвечает на вопрос ребят и не объясняет, что происходит?
Отслеживание всех удаленных веток:
Отслеживайте все филиалы, которые существуют в удаленном репо.
Сделайте это вручную:
Вы бы заменили
<branch>
ветку, которая отображается на выходеgit branch -r
.Сделайте это с помощью bash-скрипта
Обновите информацию об удаленных филиалах на вашем локальном компьютере:
При этом обновляются ветки удаленного репо, которые вы отслеживаете в своем локальном репо. Это не меняет ваши местные филиалы. Ваше локальное git-репо теперь знает о том, что произошло в ветках удаленного репо. Примером может быть то, что новый коммит был передан на удаленный мастер, выполнение выборки теперь предупредит вас, что ваш локальный мастер отстает на 1 коммит.
Обновите информацию об удаленных филиалах на вашем локальном компьютере и обновите локальные филиалы:
Выполняет выборку с последующим объединением всех веток от удаленного к локальному. Примером может служить то, что новый коммит был передан на удаленный мастер, выполнение извлечения обновит ваше локальное хранилище об изменениях в удаленной ветви, а затем объединит эти изменения с вашей локальной веткой. Это может создать беспорядок из-за конфликтов слияния.
источник
Я написал небольшой скрипт для управления клонированием нового репо и создания локальных веток для всех удаленных веток.
Вы можете найти последнюю версию здесь :
Чтобы использовать его, просто скопируйте его в каталог git bin (для меня это так
C:\Program Files (x86)\Git\bin\git-cloneall
), а затем в командной строке:Он клонируется как обычно, но создает локальные ветви отслеживания для всех удаленных ветвей.
источник
Как получить все отслеживания веток Git Single Remote.
Это было проверено и работает в Red Hat и Git Bash в Windows 10.
TLDR:
Объяснение:
Один лайнер проверяет и затем выбирает все ветви, кроме HEAD.
Перечислите ветки удаленного слежения.
Игнорировать ГОЛОВУ.
Снимите название ветки с пульта (ов).
Оформить заказ на все филиалы, отслеживая один пульт.
Выбрать для проверенной ветки.
Технически выборка не нужна для новых локальных филиалов.
Это может быть использовано как для одной, так
fetch
и дляpull
веток, которые являются как новыми, так и имеют изменения в удаленных подразделениях.Просто убедитесь, что вы тянете, только если вы готовы к слиянию.
Испытательная установка
Проверьте хранилище с SSH URL.
Перед
Проверьте филиалы в местном.
Выполнить команды
Выполните один лайнер.
После
Проверьте, что локальные филиалы включают удаленные филиалы.
источник
Для пользователей Windows, использующих PowerShell:
источник
git branch -r | ForEach-Object { # Skip default branch, this script assumes # you already checked-out that branch when cloned the repo if (-not ($_ -match " -> ")) { $localBranch = ($_ -replace "^.*?/", "") $remoteBranch = $_.Trim() git branch --track "$localBranch" "$remoteBranch" } }
Вот что я считаю надежным:
HEAD
чтобы отслеживатьorigin/HEAD
origin
Это не нужно ,
git fetch --all
как проходит-all
вgit pull
проходах эту опцию внутреннийfetch
.Отдайте этому ответу .
источник
Вот Perl-версия однострочника, приведенная в принятом ответе:
git branch -r | perl -e 'while(<>) {chop; my $remote = $_; my ($local) = ($remote =~ /origin\/(.*)/); print "git branch --track $local $remote\n";}' > some-output-file
Вы можете запустить выходной файл как сценарий оболочки, если хотите.
Мы случайно удалили наш репозиторий проекта Stash. К счастью, кто-то создал вилку прямо перед случайной потерей. Я клонировал вилку на свой местный (опущу детали того, как я это сделал). После того, как я полностью освоил вилку, я запустил одну однострочную. Я изменил URL-адрес пульта (источник в моем случае), чтобы он указывал на целевой репозиторий, в который мы восстанавливали:
git remote set-url origin <remote-url>
И, наконец, подтолкнул все ветви к происхождению так:
git push --all origin
и мы вернулись в бизнес.
источник
Мы можем поместить все имена веток или тегов во временный файл, а затем выполнить git pull для каждого имени / тега:
источник
Если у вас есть проблемы,
fetch --all
то отследите вашу удаленную ветку:источник
Чтобы избежать сообщения об ошибке 'fatal: ветвь с именем' origin / master 'уже существует.', Вам нужно это:
источник
Основываясь на ответе Learath2, вот что я сделал после того, как сделал
git clone [...]
иcd
-ing в созданный каталог:git branch -r | grep -v master | awk {print\$1} | sed 's/^origin\/\(.*\)$/\1 &/' | xargs -n2 git checkout -b
Сработало для меня, но я не знаю, сработает ли это для вас. Быть осторожен.
источник
Теперь локально ваш
yourNewLocalBranchName
твойrequiredRemoteBranch
.источник
Для пользователей Visual Studio: на консоли диспетчера пакетов:
мерзавец ветка | % {git fetch upstream; git merge upstream / master}
источник
Перепробовал много способов, только этот прост и работает для меня.
источник
Установить псевдоним: (на основе верхнего ответа)
Теперь для отслеживания всех веток:
git track-all-branches
источник