Действительно ли возможно настроить ls
управляйте так, чтобы, когда я буду использовать ls -l
, это добавляет имя ответвления мерзавца после имени каталога, если каталог является репозиторием мерзавца?
Таким образом, я могу быстро найти репозитории мерзавца под текущим каталогом, а также их рабочим состоянием.
Что-то вроде этого:
-rw-rw-r-- 1 michael michael 8 Aug 26 02:07 a-file
drwxrwxr-x 3 michael michael 4096 Aug 26 02:07 a-repo/ (master)
drwxrwxr-x 2 michael michael 4096 Aug 26 02:07 not-a-repo/
Примечание: Я не надеюсь показывать ответвление мерзавца для текущего каталога или как часть приглашения оболочки, которое я уже знаю как.
Хорошо... Видя, что нет никакого встроенного способа сделать это, я шел вперед и записал свою собственную программу Python. Можно получить его с зернышком:
pip3 install mklsgit
В настоящее время только поддержка Python3.
Я записал немного функции Bash, использующей главным образом awk
обработать вывод ls
и добавьте имена ответвления мерзавца к каталогам, если они - часть репозиториев.
Для установки функции просто скопируйте строку ниже и добавьте ее в конец Вашего ~/.bashrc
файл. Вы имеете к source .bashrc
после этого или перезапуск сессия оболочки для изменения для вступления в силу.
lg (){ ls -alF "$@"|awk '{match($0,/^(\S+\s+){8}(.+)$/,f);b="";c="git -C \""f[2]"\" branch 2>/dev/null";while((c|getline g)>0){if(match(g,/^\* (.+)$/,a)){b="("a[1]")"}};close(c);print$0,b}';}
После этого у Вас будет новая команда lg
доступный, который ведет себя как значение по умолчанию ll
псевдоним (на самом деле ls -alF
), но с добавленным текущим ответвлением мерзавца.
Вот некоторый вывод в качестве примера, не имена ответвления в фигурных скобках позади git1/
и git2/
:
$ lg
total 48
drwxrwxr-x 12 bytecommander bytecommander 4096 Aug 26 14:48 ./
drwxr-xr-x 74 bytecommander bytecommander 4096 Aug 26 15:30 ../
drwxrwxr-x 6 bytecommander bytecommander 4096 Aug 26 14:43 git1/ (master)
drwxrwxr-x 7 bytecommander bytecommander 4096 Aug 26 14:42 git2/ (develop)
drwxrwxr-x 4 bytecommander bytecommander 4096 Aug 26 14:45 no-git/
-rw-rw-r-- 1 bytecommander bytecommander 0 Aug 26 14:42 regular-file
lg
команда все еще принимает все виды аргументов, точно так же, как ls
делает. Вы можете, например, работать lg -h
, lg ~/projects
, lg ..
и т.д.
#
.ls
вывод (например, каталоги являются синими, исполняемые файлы зеленые, голубые символьные ссылки...).ls
вывод всегда будет корректен и отображать информацию о пути, который Вы указываете как аргумент (если таковые имеются, в других отношениях текущий каталог как значение по умолчанию). Однако информация об ответвлении для ./
и ../
записи всегда относительно текущего рабочего каталога, не указанного каталога.Если Вы встречаетесь с большим количеством проблем или, оказывается, знаете решение для одной из перечисленных проблем, не стесняйтесь оставлять комментарий.