покажите ответвление мерзавца в 'ls-l'

Действительно ли возможно настроить 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/

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

4
задан 26 August 2017 в 15:30

2 ответа

Хорошо... Видя, что нет никакого встроенного способа сделать это, я шел вперед и записал свою собственную программу Python. Можно получить его с зернышком:

pip3 install mklsgit

В настоящее время только поддержка Python3.

ссылка GitHub

1
ответ дан 1 December 2019 в 09:32

Я записал немного функции 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 вывод всегда будет корректен и отображать информацию о пути, который Вы указываете как аргумент (если таковые имеются, в других отношениях текущий каталог как значение по умолчанию). Однако информация об ответвлении для ./ и ../ записи всегда относительно текущего рабочего каталога, не указанного каталога.
  • При выполнении этой внутренней части репозиторий каждый подкаталог также добавит ответвление. Функция не различает каталоги корневого каталога хранилища и любые подкаталоги репозитория.

Если Вы встречаетесь с большим количеством проблем или, оказывается, знаете решение для одной из перечисленных проблем, не стесняйтесь оставлять комментарий.

4
ответ дан 1 December 2019 в 09:32

Другие вопросы по тегам:

Похожие вопросы: