Как посмотреть через терминал, в каких проектах нужно делать коммиты и пушить в репозиторий?
Бывает такое, что на работе за день приходится выполнять какие-то задачи в несколько проектах. А также я храню настройки для системы базу знаний на bitbucket. И когда много репозиторий на машине, легко можно забыть что-то запушить.
Я работаю в убунту и хотелось бы через терминал в конце рабочего дня запустить команду, которая бы проверила все проекты, если не остались среди них незапушенные.
К сожалению я не силен в баш скриптах. Может у кого уже имеется готовый скрипт. Буду признателен за помощь.
Ответы (2 шт):
что-нибудь вроде такого:
$ find ~ -type d -name .git | while read p; do (cd "$p"/..; git status --porcelain --branch | grep -q ahead && dirname "$p"); done
команда ищет в вашем домашнем каталоге репозитории, т.е. каталоги с именем .git, для каждого из найденных:
- делает текущим каталог на один уровень выше (там обычно и располагается «work tree» — рабочий каталог)
- проверяет наличие строки
aheadв выводеgit status --porcelain --branch - при её наличии выдаёт имя каталога в stdout
по поводу опций команды status.
пример вывода (если имеется неотправленный в общее хранилище коммит):
$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
эту информацию можно получить в более удобном для обработки виде:
$ git status --porcelain --branch
## master...origin/master [ahead 1]
вот наличие строки ahead как раз и стоит проверять.
доп. чтение: $ man git-status
обновление. каюсь, проглядел эти слова в заголовке: «в каких проектах нужно делать коммиты» и сосредоточился только на тексте вопроса, где речь только про невыполненную команду push.
проверить, нет ли модифицированных файлов, можно практически той же командой, только заменить
git status --porcelain --branch | grep -q ahead
на
git status --porcelain | grep -q .
на мой взгляд можно просто поставить тему, например powerlevel10k
или любую другую с поддержкой git и не писать лишние команды