Как сделать sh все git репо из каталога в git в виде шеллскрипта - PullRequest
1 голос
/ 14 февраля 2020

Я пытаюсь написать bash сценарий, который находит новые репозитории и файлы и фиксирует & pu sh их всех, и будущие git репо, которые я добавляю в папку своих проектов.

Все мои git проекты хранятся в папке, которую я имею в моей системе для простоты.

Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я пытаюсь использовать 1 вкладыш, чтобы найти все. git папок и запускать на них команды, он не может выполнить все команды 3 git для нужных ему папок (add, commit, pu sh)

Я пытался запустить разные версии сценарий, некоторые с & at git pu sh, а некоторые с &&, но он все еще только добавляет и фиксирует репо с изменениями, но не делает их sh их.

Я также попытался сделать это в функция, позволяющая запустить его как отдельную команду, но я все равно получаю сообщения об ошибках повсюду.

Мой скрипт выглядит следующим образом:

# Location of all my github projects
mygit=$HOME/github/myrepos

addcompush="git add . && git commit -a -m "Uploaded by script, no commit msg" & git push"

# Find all git repo folders and run git add + git commit + git push on them
find "$mygit" -name ".git" -type d -exec bash -c "echo '{}' && cd '{}'/.. && $(addcompush)" \;

Я также пробовал разные версии этого, как описано выше:

find "$mygit" -name ".git" -type d -exec bash -c "echo '{}' && cd '{}'/.. && git add . && git commit -a -m "uploaded by script" && git push" \;

Это делает git добавление и принятие но это не pu sh их, я подозреваю, что это из-за &&. Но я полностью потерян, как это исправить.

Нужно ли мне реструктурировать весь мой подход к этому или я могу сделать эту работу такой, как есть?

1 Ответ

0 голосов
/ 14 февраля 2020

Размещение собственного решения здесь, не самое элегантное решение, но оно работает. То, как я вижу это, команда find ломается, если в 1 папке нечего зафиксировать.

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

# Location of the git folder collection
mygitfolder=$HOME/github/myrepos

# Loop through all folders and place the names in an array
git_folders=()
while IFS= read -r line; do
    git_folders+=( "$line" )
  done< <(ls ~/github/myrepos/)

# Loop through the array and run the commands needed to automaticly push a repo to github,
# git add, commit, push(IF commit executed sucsessfully meaning it was something to commit in that folder) 
for folder in "${git_folders[@]}"
do
   cd "$mygitfolder/$folder"; printf "\n\nChecking the $folder repo "
   git add .
   git commit -a -m "Uploaded by script, no commit msg added"
   if [[ $? -eq 0 ]]; then
     git push
   fi
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...