Рекурсивно проверять обновления каталога git - PullRequest
5 голосов
/ 12 января 2012

Хотелось бы узнать, есть ли способ определить, какие подпапки в указанном каталоге являются проектами git. После этого проверьте, какие из этих git-проектов нуждаются в обновлении, с помощью 'git fetch' или другим способом.

Например, у меня есть папка с названием development в моей домашней папке, которая содержит различные проекты, из которых около 10% используют git. Вместо индивидуальной проверки обновлений проекта я хотел бы иметь возможность запустить команду, которая проверяет наличие обновлений для всех папок git в каталоге разработки.

Было бы также неплохо, если бы он мог обновлять не конфликтующие проекты.

Ответы [ 4 ]

4 голосов
/ 12 января 2012

Один из способов получить список всех репозиториев Git в вашем текущем каталоге - следующая команда:

find . -name '.git' | xargs -n 1 dirname

Затем вы можете передать это в сценарий оболочки, который запускает выбранную вами команду в каждом репозитории, либо переходя в каталог, либо используя --git-dir и --work-tree аргументы Git.

3 голосов
/ 12 января 2012

Вот (хаки) однострочник для этого:

back=`pwd`; for d in `find . -type d -name .git` ; do cd "$d/.."; git pull ; cd $back ; done
1 голос
/ 23 сентября 2015

Короче говоря:

find . -name .git -execdir git pull -v ';'

Вы также можете создать следующий скрипт (например, update_src.sh):

#!/bin/sh
# Script to pull all git repositories to the recent version.
ROOT=$(git rev-parse --show-toplevel 2> /dev/null)
find "$ROOT" -name .git -type d -execdir git pull -v ';'

или создайте следующий псевдоним в оболочке:

alias git-pull-all='find $(git rev-parse --show-toplevel 2> /dev/null) -name .git -type d -execdir git pull -v ";"'

или в вашем ~/.gitconfig.

1 голос
/ 12 января 2012

Взгляните на Android РЕПО . Я думаю, что в нем нет ничего специфического для Android, и вы сможете адаптировать его под свои нужды.

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