Отображение кириллических имён файлов в git status

https://ru.stackoverflow.com/questions/1184169/Отображение-кириллических-имён-файлов-в-git-status

Используйте опцию core.quotePath:

Commands that output paths (e.g. ls-files, diff), will quote “unusual” characters in the pathname by enclosing the pathname in double-quotes and escaping those characters with backslashes in the same way C escapes control characters (e.g. \t for TAB, \n for LF, \ for backslash) or bytes with values larger than 0x80 (e.g. octal \302\265 for “micro” in UTF-8). If this variable is set to false, bytes higher than 0x80 are not considered “unusual” any more. Double-quotes, backslash and control characters are always escaped regardless of the setting of this variable. A simple space character is not considered “unusual”. Many commands can output pathnames completely verbatim using the -z option. The default value is true.

Соответственно, эту опцию надо установить в false:

$ git config --global core.quotePath false

Вариант для локального сохранения опции:

$ git config core.quotePath false

Или внести в общий файл настроек .gitconfig:

[core]
	quotePath = false

Автодобавление сообщения при git commit / Generate git commit message from git-status

https://gist.github.com/erikw/654386d35ecfdb0354cd2b71763f19ae

An alias that will generate a git commit message staged changes as shown in git-status. Put this alias (section below) in your .gitconfig.

[alias]
	# commit-status: generate a commit with message from git-status (staged changes).
	# Source: https://gist.github.com/erikw/654386d35ecfdb0354cd2b71763f19ae
	# Explanation:
	# - Get only staged changes
	# - Ignore changes in working area (2nd letter, the Y in XY as explained in $(git help status))
	# - + split label and file path to separate lines so we can process the labels separately
	# - Keep only the first label using awk
	# - Add newline before each label section so we later can truncate \n to put everything on one line
	# - Make labels human readable e.g. M -> Modified
	# - Put everything on one line and trim leading & trailing whitespaces
	commit-status = !" \
	        TMPFILE=$(mktemp /tmp/git-commit-status-message.XXX); \
		git status --porcelain \
		  | grep '^[MARCDT]' \
		  | sort \
		  | sed -re 's/^([[:upper:]])[[:upper:]]?[[:space:]]+/\\1:\\n/' \
		  | awk '!x[$0]++' \
		  | sed -re 's/^([[:upper:]]:)$/\\n\\1/' \
		  | sed -re 's/^M:$/Modified: /' \
		  | sed -re 's/^A:$/Added: /' \
		  | sed -re 's/^R:$/Renamed: /' \
		  | sed -re 's/^C:$/Copied: /' \
		  | sed -re 's/^D:$/Deleted: /' \
		  | sed -re 's/^T:$/File Type Changed: /' \
		  | tr '\n' ' ' | xargs \
		  > $TMPFILE; \
		git commit -F $TMPFILE; \
		rm -f $TMPFILE \
		"




	# If you want to have a [Yn] prompt showing the commit message before making the commit,
	# then simply inject the following lines below in to the alias above just before the
	# "git commit -F $TMPFILE; \" line:
		cat $TMPFILE; \
	        commit=''; \
	        while :; do \
			echo '> Commit with this message? [Yn]: '; \
			read commit; \
			([ -z \"$commit\" ] || [ \"$commit\" = y ] || [ \"$commit\" = Y ] || [ \"$commit\" = n ]) && break; \
	        done; \
		test \"$commit\" != n || exit; \

Мой итоговый вариант (добавлено git add .; \ (в начале выполнения) и git push, переведено на русский, запускается командой git cup):

[alias]
	# commit-status: generate a commit with message from git-status (staged changes).
	# Source: https://gist.github.com/erikw/654386d35ecfdb0354cd2b71763f19ae
	# Explanation:
	# - Get only staged changes
	# - Ignore changes in working area (2nd letter, the Y in XY as explained in $(git help status))
	# - + split label and file path to separate lines so we can process the labels separately
	# - Keep only the first label using awk
	# - Add newline before each label section so we later can truncate \n to put everything on one line
	# - Make labels human readable e.g. M -> Modified
	# - Put everything on one line and trim leading & trailing whitespaces
	cup = !" \
			git add .; \
	        TMPFILE=$(mktemp /tmp/git-commit-status-message.XXX); \
		git status --porcelain \
		  | grep '^[MARCDT]' \
		  | sort \
		  | sed -re 's/^([[:upper:]])[[:upper:]]?[[:space:]]+/\\1:\\n/' \
		  | awk '!x[$0]++' \
		  | sed -re 's/^([[:upper:]]:)$/\\n\\1/' \
		  | sed -re 's/^M:$/Изменено: /' \
		  | sed -re 's/^A:$/Добавлено: /' \
		  | sed -re 's/^R:$/Переименовано: /' \
		  | sed -re 's/^C:$/Скопировано: /' \
		  | sed -re 's/^D:$/Удалено: /' \
		  | sed -re 's/^T:$/Тип файла изменён: /' \
		  | tr '\n' ' ' | xargs \
		  > $TMPFILE; \
		cat $TMPFILE; \
	        commit=''; \
	        while :; do \
			echo '> Commit with this message? [y/n]: '; \
			read commit; \
			([ -z \"$commit\" ] || [ \"$commit\" = y ] || [ \"$commit\" = Y ] || [ \"$commit\" = n ]) && break; \
	        done; \
		test \"$commit\" != n || exit; \
		git commit -F $TMPFILE; \
		git push; \
		rm -f $TMPFILE \
		"

Где хранится файл с настройками?

https://git-scm.herokuapp.com/book/ru/v2/Введение-Первоначальная-настройка-Git

В состав Git входит утилита git config, которая позволяет просматривать и настраивать параметры, контролирующие все аспекты работы Git, а также его внешний вид. Эти параметры могут быть сохранены в трёх местах:

Файл [path]/etc/gitconfig содержит значения, общие для всех пользователей системы и для всех их репозиториев. Если при запуске git config указать параметр —system, то параметры будут читаться и сохраняться именно в этот файл. Так как этот файл является системным, то вам потребуются права суперпользователя для внесения изменений в него.

Файл ~/.gitconfig или ~/.config/git/config хранит настройки конкретного пользователя. Этот файл используется при указании параметра —global и применяется ко всем репозиториям, с которыми вы работаете в текущей системе.

Файл config в каталоге Git (т. е. .git/config) репозитория, который вы используете в данный момент, хранит настройки конкретного репозитория. Вы можете заставить Git читать и писать в этот файл с помощью параметра —local, но на самом деле это значение по умолчанию. Неудивительно, что вам нужно находиться где-то в репозитории Git, чтобы эта опция работала правильно.

Настройки на каждом следующем уровне подменяют настройки из предыдущих уровней, то есть значения в .git/config перекрывают соответствующие значения в [path]/etc/gitconfig.