gsync Скрипт для синхронизации одной ветки во всех удалённых репозиториях (linux git bash)

Скрипт также доступен в виде функции: https://github.com/vedro-compota/unix-co...

Делаем так:

  1. Создайте файл напр. с именем gsync, и заполните его кодом, указанным ниже
  2. дайте права на выполнение
  3. и положите его в корень вашего репозитория

Тогда чтобы синхронизировать веку master (можно и другую) во всех удалённых репозиториях просто используйте вызов (в консоли в корне репы):

./gsync master

Скрипт синхронизации (содержимое):

linux bash Выполнение команды из переменной -- пример скрипта

Например (с конкатенацией литералов и переменных для получения комадны):

  COMMAND="git pull $remoteName $1"
  ${COMMAND}

linux bash Оставить в массиве только уникальные элементы

Пусть у вас есть массив myArray, тогда оставить в нём уникальные элементы можно так:

myArray=($(echo "${myArray[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' '))

С распечаткой результата "до и после" можно так:

printf "%s\n" "${myArray[@]}"
echo '-------'
myArray=($(echo "${myArray[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' '))
printf "%s\n" "${myArray[@]}"

linux bash Распечатать массив, вывести все элементы с новой строки

Если ваш массив называется myArray вывесте все его элементы можно так:

printf "%s\n" "${myArray[@]}"

linux bash Добавить в массив элемент другого массива -- пример скрипта (в конец массива, без указания индекса)

Изучите этот пример с перебором строк в цикле:

#!/bin/bash

RemoteReposNames=() # объявляем массив
RemoteDataText="$(git remote -v)"
#echo "${RemoteDataText}"

while read -r line; do
    words=($line) # получаем слова строки в виде массива
	RemoteReposNames+=("${words[0]}")  # добавляем элемент в массив (первое слово из каждой строки)
done <<< "$RemoteDataText"

printf "%s\n" "${RemoteReposNames[@]}"

Непосредственно добавление очередного элемента происходит в строке:

linux bash Разбиение строки на слова, получение первого слова. Добавление элемента в массив

Пример:

#!/bin/bash

while read -r line; do # читаем переменную  $RemoteDataText построчно
    #echo "... $line ..."
    words=($line) # разбиваем (получае слова строки в виде массива)
	RemoteReposNames+=("${words[0]}")  # добавляем в массив первое слово
done <<< "$RemoteDataText

linux bash for Цикл по строкам в тексте переменной -- перебор строк. Пример

Можно так:

#!/bin/bash

RemoteDataText="$(git remote -v)"

while read -r line; do
    echo "... $line ..."
done <<< "$RemoteDataText"

Где в RemoteDataText мы получили многостроный результат выполнения команды (git remote -v) в терминале.

linux bash Получение результат работы команды в переменную

Получаем и выводит результат работы команды:

git remote -v

В скрипте это можно так:

#!/bin/bash

RemoteDataText="$(git remote -v)"
echo "${RemoteDataText}"

[!] Bash shell Справочник, пример команд и скриптов

Смотрите примеры Bash/shell скриптов и команд по ссылкам ниже.

git Синхронизация двух удалённых репозиториев (remote)

Предположим у вас есть два удалённых репозитория:

  • origin
  • second

и вы хотите их синхронизировать.

Синхронизация одной ветки

Одну ветку (например под названием master) можно синхронизировать выполнив на машине локальной машине:

git pull origin master
git pull second master
git push origin master
git push second master

Pages

Subscribe to fkn+antitotal RSS