Псевдоним Git для извлечения всех удаленных веток

Я пытаюсь создать псевдоним git для извлечения удаленных веток на основе этого ответа

git branch -r \
  | grep -v '\->' \
  | sed "s,\x1B\[[0-9;]*[a-zA-Z],,g" \
  | while read remote; do \
      git branch --track "${remote#origin/}" "$remote"; \
    done
git fetch --all
git pull --all

Я пытаюсь создать для этого псевдоним:

git config --global alias.pull-all '!'"f() { git branch -r | grep -v -- '->' | sed \"s,\x1B\[[0-9;]*[a-zA-Z],,g\" | while read b; do git branch --track \"\${b##origin/}\" \"\$b\"; done; git pull --all }; f" 

Но когда я использую псевдоним, я получаю синтаксическую ошибку оболочки (zsh) «неожиданный конец файла»:

$ git pull-all
f() { git branch -r | grep -v -- '->' | sed "s,\x1B\[[0-9;]*[a-zA-Z],,g" | while read b; do git branch --track "${b##origin/}" "$b"; done; git pull --all }; f: -c: line 1: syntax error: unexpected end of file

Но копирование сообщения об ошибке в мою командную строку работает отлично:

$ f() { git branch -r | grep -v -- '->' | sed "s,\x1B\[[0-9;]*[a-zA-Z],,g" | while read b; do git branch --track "${b##origin/}" "$b"; done; git pull --all }; f
branch 'a-branch' set up to track 'origin/a-branch'.
fatal: a branch named 'main' already exists
Already up to date.

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

pull --all это вещь? В документах это не упоминается. Кроме того, чего вы пытаетесь достичь, чего получение еще не дает? Я бы не считал одновременное манипулирование несколькими локальными ветками хорошей практикой.

Fictional 28.08.2024 08:25

@Fictional git pull --all не упоминается в документации, потому что это опция, которая pull передается fetch, а в fetch это означает совсем другое — выборка со всех удаленных устройств, а не со всех ветвей. В варианте git push--all означает все ветки.

phd 29.08.2024 15:23

@phd, да, я никогда этим не пользуюсь, я предпочитаю отправлять по одной ветке за раз. Это звучит грязно. Я не уверен, как я это пропустил, в документации действительно упоминается --all в разделе «Параметры, связанные с выборкой».

Fictional 29.08.2024 21:17
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
93
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Оказывается, функциям нужна точка с запятой или новая строка перед закрывающей скобкой.

git config --global alias.pull-all '!'"f() { git branch -r | grep -v -- '->' | sed \"s,\x1B\[[0-9;]*[a-zA-Z],,g\" | while read b; do git branch --track \"\${b##origin/}\" \"\$b\"; done; git pull --all; }; f" 

См. также stackoverflow.com/questions/67864796/…

matt 28.08.2024 00:57

@matt, ты думаешь, это лучшее решение, чем то, что у меня есть сейчас?

minseong 28.08.2024 01:03

Псевдоним, который вы пытались написать, не является должным образом экранированным кавычками.

git config --global alias.pull-all '!'"f() { git branch -r | grep -v -- '->' | sed \"s,\x1B\[[0-9;]*[a-zA-Z],,g\" | while read b; do git branch --track \"\${b##origin/}\" \"\$b\"; done; git pull --all }; f" 

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

git config --global alias.pull-all '!git branch -r | grep -v -- "->" | sed "s,\x1B\[[0-9;]*[a-zA-Z],,g" | while read b; do git branch --track "${b##origin/}" "$b" 2>/dev/null; done && git fetch --all && git pull --all'

Другие вопросы по теме