Mgitstatus

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

Можно написать небольшой однострочник на баше, который перебирает директории проектов и показывает статус каждого из них:

1
2
3
4
for project in development/projects/*;
do
    sh -c "cd $project; git status"
done

Это не совсем однострочник, но только для читаемости. Этот код можно оформить в виде функции или скрипта. Вот пример его исполнения:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        public/

nothing added to commit but untracked files present (use "git add" to track)
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean
fatal: not a git repository (or any of the parent directories): .git

Лично мне сложно это воспринимать — слишком много лишней информации, не хватает цветов, и самое главное — не видно, о каком проекте идёт речь.

Этот код можно значительно улучшить. Или воспользоваться готовым решением, коих несколько, например: mgitstatus, этот скрипт или gr (который, в действительности, имеет гораздо больше возможностей, чем простое отображение статуса). Сейчас я пользуюсь первым. Вот пример его работы:

Выглядит гораздо лучше, не так ли?