L oop через все git ветви и применить коммит - PullRequest
1 голос
/ 22 апреля 2020

У меня есть несколько филиалов в репо. Я хочу, чтобы oop подумал о каждой ветви, извлеките ветку и запустите команду, которая обновит все пакеты и передаст изменения. В конце концов, я хочу, чтобы pu sh all.

Так что я выяснил, как l oop думал, что ветвь

for BRANCH in `git branch -a | grep remotes/origin/*` ;

do
    A="$(cut -d'/' -f3 <<<"$BRANCH")"
    echo $A

done 

Не уверен, что это лучший способ делая это. Тем не менее, я все еще изо всех сил пытаюсь git оформить ветку и затем продолжить с автоматом c commit.

Любые идеи?

ОБНОВЛЕНИЕ

Основано на ответе @ bk2204 Я сделал еще две вещи: выяснил, как запустить скрипт в контексте другой папки { ссылка }, а затем как автоматически клонировать все удаленные ветви { ссылка }

Вот что я придумал:

#!/bin/sh
cd my-folder #<-- tight to a specific folder
:

set -e

[ -z "$(git status --porcelain)" ] || { echo "working tree not clean" >&2; false; }

#for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master `; do
   #git branch --track ${branch#remotes/origin/} $branch #<-- throws an error if was already cloned
#done

for branch in $(git for-each-ref refs/heads/* | cut -d"$(printf '\t')" -f2 | cut -b12-)
do
    echo $branch
    # This will overwrite any changes.
    git checkout -f $branch
    # Run command here.

    rm -rf node_modules
    npm i
    # run my update thing
    git add .
    git commit -m "Update packages"
done

Это работает, но теперь у него есть две проблемы:

1) скрипт работает только в указанной папке c поэтому мне всегда приходится изменять путь к папке, если я хочу запустить ее в другой папке
2) если я уже потянул все ветви #git branch --track ${branch#remotes/origin/} $branch выдает ошибку.

Как бы вы обратились эти проблемы, чтобы иметь возможность запускать сценарий в любой папке и иметь возможность обрабатывать случай, если конкретное удаленное хранилище уже было клонировано?

1 Ответ

1 голос
/ 22 апреля 2020

git branch не предназначен для сценариев, поэтому вы, вероятно, захотите сделать что-то немного другое. Может быть, что-то вроде этого будет полезно:

#!/bin/sh

set -e

[ -z "$(git status --porcelain)" ] || { echo "working tree not clean" >&2; false; }

for branch in $(git for-each-ref refs/heads/* | cut -d"$(printf '\t')" -f2 | cut -b12-)
do
    # This will overwrite any changes.
    git checkout -f $branch
    # Run command here.
    git add .
    git commit -m "Update packages by running command"
done

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...