Git-Config: статус.*

Как настроить представление текущего состояния репозитория

Команда git status дает наиболее удобный ответ на часто задаваемый вопрос: «Что, черт возьми, происходит в этом репозитории прямо сейчас?»

Это настолько важная команда Git 101, что вы можете удивиться, узнав, что git status вообще можно настроить. Но это возможно, и этот пост поможет вам настроить вывод git status в соответствии с вашими предпочтениями.

В соответствии с этой продолжающейся серией сообщений о конфигурации Git, мы, конечно же, рассмотрим использование git config. Но я думаю, вы обнаружите, что git status предлагает вам тщательно обдумать различные способы изменения поведения Git по умолчанию: когда использовать git config, когда написать псевдоним, а когда просто передать Git старый добрый вариант. команда.

Вывод короткого статуса в стиле Subversion

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

$ git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

Когда есть новые и измененные файлы, вывод еще болтливее:

$ git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:  README.md

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

no changes added to commit (use "git add" and/or "git commit -a")

Если вы когда-нибудь работали с Subversion (SVN), вы, возможно, знаете, что эквивалентная ей команда svn status намного компактнее и серьезнее (и непрозрачна, особенно для непосвященных).

В Git можно выводить сообщения о состоянии в стиле SVN с помощью переключателей --short или -s:

$ git status --short
 M README.md
?? HELLO.md

Документы для git-status включают список двухсимвольных кратких кодов состояния. В этом случае M указывает, что README.md было изменено в рабочем дереве, а HELLO.md не отслеживается, будучи неизвестным ни индексу, ни рабочему дереву: ??

Если вы все время предпочитаете этот стиль вывода из git status, вы должны запустить git config --global status.short "true". Если ваша установка Git настроена на краткий статус в стиле SVN, вам нужно будет передать переключатель --long или --no-short, чтобы увидеть развернутый вывод по умолчанию.

Показать информацию о филиале

Одна полезная часть информации, отсутствующая в кратком выводе git status, — это информация о вашей локальной и любой удаленной ветке, которая у вас может быть. Установив git config --global status.branch "true", git status будет включать информацию о ветке даже в краткий вывод:

$ git status --short
## main...origin/main [ahead 1]
 M README.md
?? HELLO.md

Список отдельных отслеживаемых файлов

Один неотслеживаемый файл в корне, например HELLO.md, всегда отображается хорошо. Но по умолчанию git status показывает только путь к любому каталогу, содержащему один или несколько неотслеживаемых файлов. Вот, например, неотслеживаемый каталог изображений (предположительно):

$ git status
On branch main
Your branch is up to date with 'origin/main'.

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

nothing added to commit but untracked files present (use "git add" to track)

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

Если вы хотите, чтобы git status выводил полный путь и имя файла для всех ваших неотслеживаемых файлов, установите status.showUntrackedFiles на "all", что переопределяет настройку по умолчанию "normal".

$ git config --global status.showUntrackedFiles "all"

Запуск git status в том же каталоге, что и раньше, теперь предоставляет полный список каждого отдельного неотслеживаемого файла:

$ git status
On branch main
Your branch is up to date with 'origin/main'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    images/bat.png
    images/cat.png
    images/rat.png

nothing added to commit but untracked files present (use "git add" to track)

Эта опция "all" работает так же и в краткой форме вывода статуса:

$ git status -s
## main...origin/main
?? images/bat.png
?? images/cat.png
?? images/rat.png

Как предупреждает документация Git, установка status.showUntrackedFiles на "all" может привести к снижению производительности на некоторых системах, особенно для очень больших репозиториев. А поскольку в зрелых проектах реже добавляются целые каталоги с неотслеживаемыми файлами, может быть лучше вручную вызвать поведение status.showUntrackedFiles. Вы можете вызвать это поведение для каждой команды, передав переключатель -u в положение git status или создав для себя другой псевдоним, например git config --global alias.su "status -u"..

Повторно запустите команду git config и установите status.showUntrackedFiles в "normal", если вам когда-нибудь понадобится вернуться к поведению по умолчанию, отображающему только имя неотслеживаемого каталога:

$ git config --global status.showUntrackedFiles "normal"

В качестве альтернативы, как и в случае с любым значением конфигурации Git, которое вы хотите полностью удалить, запустите git config вместе с параметром --unset:

$ git config --global --unset status.showUntrackedFiles

Вывод счетчика тайника

Есть еще одна информация, которую вы можете включить в подробный вывод на git status: количество любых тайников Git, которые у вас могут быть. Вы можете либо передать ключ --show-stash, либо настроить Git так, чтобы он всегда показывал количество тайников:

$ git config --global status.showStash "true"

Количество тайников будет отображаться в самом конце только длинной формы git status:

$ git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean
Your stash currently has 3 entries

Мы более подробно рассмотрим тайники и настройку поведения Git в отношении них в следующем посте.

В этом посте вы узнали, как настроить Git так, чтобы он отображал краткую форму для git status и отображал дополнительную информацию о ветке, в которой вы находитесь, о неотслеживаемых файлах, которые у вас есть, и даже о количестве тайников, которые вы могли спрятать.

В то время как git status выводит информацию о текущем состоянии репозитория, git log выводит информацию о его прошлом. В следующем посте мы рассмотрим настройку git log для точной настройки его вывода.



Книгу Карла Программирование WebRTC: создание приложений потоковой передачи в реальном времени для Интернета можно найти на The Pragmatic Bookshelf:



Вы можете участвовать в обсуждениях книги и найти код скидки на странице форума книги.