show git branch в `ls -l`

Возможно ли настроить команду ls так, чтобы при использовании ls -l она добавляет имя ветки git после имени каталога, если каталог представляет собой репозиторий git?

Это Кстати, я могу быстро найти git-репозитории в текущем каталоге, а также их рабочий статус.

Что-то вроде этого:

-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/

Примечание: я не хочу показывать git branch для текущего каталога или как часть командной строки, которую я уже знаю как

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

6 ответов

OK ... Увидев, что нет встроенного способа сделать это, я пошел вперед и написал свою собственную программу Python. Вы можете получить его с помощью pip:

pip3 install mklsgit

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

Ссылка GitHub

1
ответ дан 22 May 2018 в 19:02

OK ... Увидев, что нет встроенного способа сделать это, я пошел вперед и написал свою собственную программу Python. Вы можете получить его с помощью pip:

pip3 install mklsgit

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

Ссылка GitHub

1
ответ дан 18 July 2018 в 07:53

OK ... Увидев, что нет встроенного способа сделать это, я пошел вперед и написал свою собственную программу Python. Вы можете получить его с помощью pip:

pip3 install mklsgit

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

Ссылка GitHub

1
ответ дан 24 July 2018 в 18:54

Я написал небольшую функцию Bash, используя в основном awk для обработки вывода ls и добавления имен ветвей git в каталоги, если они являются частью репозиториев.

Установка:

Чтобы установить эту функцию, просто скопируйте приведенную ниже строку и добавьте ее в конец вашего ~/.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 ] [3]

Пример использования:

Вот пример вывода, а не названия ветвей в фигурных скобках позади 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. Вы можете, например, run lg -h, lg ~/projects, lg .. и т. д.

Обновления:

Исправлена ​​проблема с именами файлов, содержащими пробелы или начинающимися с #.

Известные ошибки и недостатки:

Исправлена ​​проблема с именами файлов, содержащими пробелы, или начиная с #. Он не может обрабатывать имена файлов с символами новой строки в них , Они будут отображаться, но информация о филиале не отображается. Выход ls всегда будет правильным и отображает информацию о пути, который вы указываете как аргумент (если есть, в противном случае текущий каталог по умолчанию). Однако информация о филиале для записей ./ и ../ всегда относится к текущему рабочему каталогу, а не к указанному каталогу. Если вы запустите это внутри репозитория, каждый подкаталог также получит добавление ветки. Функция не различает корневые каталоги репозитория и любые подкаталоги репозитория.

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

4
ответ дан 22 May 2018 в 19:02
  • 1
    Имена файлов с символами новой строки в них, хотя и технически обоснованные, следует считать «недействительными», я считаю. Они, как правило, ломают много вещей: P – Thomas Ward♦ 26 August 2017 в 19:32
  • 2
    Спасибо за ваш ответ. Однако, поскольку нет встроенного способа сделать это, я сам планирую писать программу Python, так как она может быть более гибкой, чем awk – Michael Kim 27 August 2017 в 03:39

Я написал небольшую функцию Bash, используя в основном awk для обработки вывода ls и добавления имен ветвей git в каталоги, если они являются частью репозиториев.

Установка:

Чтобы установить эту функцию, просто скопируйте приведенную ниже строку и добавьте ее в конец вашего ~/.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 ] [3]

Пример использования:

Вот пример вывода, а не названия ветвей в фигурных скобках позади 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. Вы можете, например, run lg -h, lg ~/projects, lg .. и т. д.

Обновления:

Исправлена ​​проблема с именами файлов, содержащими пробелы или начинающимися с #.

Известные ошибки и недостатки:

Исправлена ​​проблема с именами файлов, содержащими пробелы, или начиная с #. Он не может обрабатывать имена файлов с символами новой строки в них , Они будут отображаться, но информация о филиале не отображается. Выход ls всегда будет правильным и отображает информацию о пути, который вы указываете как аргумент (если есть, в противном случае текущий каталог по умолчанию). Однако информация о филиале для записей ./ и ../ всегда относится к текущему рабочему каталогу, а не к указанному каталогу. Если вы запустите это внутри репозитория, каждый подкаталог также получит добавление ветки. Функция не различает корневые каталоги репозитория и любые подкаталоги репозитория.

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

4
ответ дан 18 July 2018 в 07:53

Я написал небольшую функцию Bash, используя в основном awk для обработки вывода ls и добавления имен ветвей git в каталоги, если они являются частью репозиториев.

Установка:

Чтобы установить эту функцию, просто скопируйте приведенную ниже строку и добавьте ее в конец вашего ~/.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 ] [3]

Пример использования:

Вот пример вывода, а не названия ветвей в фигурных скобках позади 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. Вы можете, например, run lg -h, lg ~/projects, lg .. и т. д.

Обновления:

Исправлена ​​проблема с именами файлов, содержащими пробелы или начинающимися с #.

Известные ошибки и недостатки:

Исправлена ​​проблема с именами файлов, содержащими пробелы, или начиная с #. Он не может обрабатывать имена файлов с символами новой строки в них , Они будут отображаться, но информация о филиале не отображается. Выход ls всегда будет правильным и отображает информацию о пути, который вы указываете как аргумент (если есть, в противном случае текущий каталог по умолчанию). Однако информация о филиале для записей ./ и ../ всегда относится к текущему рабочему каталогу, а не к указанному каталогу. Если вы запустите это внутри репозитория, каждый подкаталог также получит добавление ветки. Функция не различает корневые каталоги репозитория и любые подкаталоги репозитория.

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

4
ответ дан 24 July 2018 в 18:54
  • 1
    Имена файлов с символами новой строки в них, хотя и технически обоснованные, следует считать «недействительными», я считаю. Они, как правило, ломают много вещей: P – Thomas Ward♦ 26 August 2017 в 19:32
  • 2
    Спасибо за ваш ответ. Однако, поскольку нет встроенного способа сделать это, я сам планирую писать программу Python, так как она может быть более гибкой, чем awk – Michael Kim 27 August 2017 в 03:39

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

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