gitcredentials
Имя
gitcredentials — предоставление Git имён пользователей и паролей
Краткое описание
git config credential.https://example.com.username myusername git config credential.helper "$helper $options"
Описание
Иногда Git требуется получить от пользователя учётные данные для выполнения операций; например, ему может понадобиться запросить имя пользователя и пароль для доступа к удалённому репозиторию по HTTP. Некоторые удалённые репозитории принимают в качестве пароля персональный токен доступа или токен доступа OAuth. В этом руководстве описаны механизмы, которые Git использует для запроса этих учётных данных, а также некоторые возможности, позволяющие не вводить их многократно.
Запрос учётных данных
Если средства-помощники для учётных данных не заданы, Git будет использовать следующие способы запроса имён пользователей и паролей:
-
Если задана переменная окружения
GIT_ASKPASS, запускается указанная в ней программа. Подходящий запрос передаётся программе в командной строке, а ввод пользователя считывается из её стандартного вывода. -
В противном случае, если задана переменная конфигурации
core.askPass, её значение используется описанным выше способом. -
В противном случае, если задана переменная окружения
SSH_ASKPASS, её значение используется описанным выше способом. -
В противном случае запрос выводится пользователю в терминале.
Как избежать повторного ввода
Постоянно вводить одни и те же учётные данные может быть утомительно. Git предлагает два способа уменьшить это неудобство:
-
Статическая настройка имён пользователей для заданного контекста аутентификации.
-
Средства-помощники для учётных данных, позволяющие кэшировать или хранить пароли либо взаимодействовать с системным хранилищем паролей или связкой ключей.
Первый способ прост и подходит, если у вас нет защищённого хранилища для пароля. Обычно его настраивают, добавив в конфигурацию следующее:
[credential "https://example.com"]
username = me Средства-помощники для учётных данных, напротив, представляют собой внешние программы, у которых Git может запрашивать имена пользователей и пароли; обычно они взаимодействуют с защищёнными хранилищами, предоставляемыми операционной системой или другими программами. Кроме того, средство-помощник может создавать учётные данные для определённых серверов с помощью API.
Чтобы использовать средство-помощник, сначала необходимо выбрать его (список приведён ниже).
У вас также могут быть установлены сторонние средства-помощники; найдите credential-* в выводе команды git help -a и ознакомьтесь с документацией конкретных средств-помощников. Выбрав средство-помощник, укажите Git использовать его, добавив его имя в переменную credential.helper.
-
Найдите средство-помощник.
$ git help -a | grep credential- credential-foo
-
Прочитайте его описание.
$ git help credential-foo
-
Укажите Git использовать его.
$ git config --global credential.helper foo
Доступные средства-помощники
В настоящее время Git включает следующие средства-помощники:
- cache
-
Кэширует учётные данные в памяти на короткий период времени. Подробности см. в git-credential-cache[1].
- store
-
Бессрочно хранит учётные данные на диске. Подробности см. в git-credential-store[1].
Популярные средства-помощники с защищённым постоянным хранилищем:
-
git-credential-libsecret (Linux)
-
git-credential-osxkeychain (macOS)
-
git-credential-wincred (Windows)
-
Git Credential Manager (кроссплатформенное средство, входит в состав Git для Windows)
Сообщество поддерживает полный список средств-помощников для учётных данных Git по адресу https://git-scm.com/doc/credential-helpers.
OAuth
Вместо ввода паролей или персональных токенов доступа можно использовать средство-помощник для учётных данных OAuth. При первой аутентификации в браузере открывается окно с сайтом хоста. Последующие аутентификации выполняются в фоновом режиме. Многие популярные хосты Git поддерживают OAuth.
Популярные средства-помощники с поддержкой OAuth:
-
Git Credential Manager (кроссплатформенное средство, входит в состав Git для Windows)
-
git-credential-oauth (кроссплатформенное средство, входит во многие дистрибутивы Linux)
Контексты учётных данных
Git связывает каждую пару учётных данных с контекстом, определяемым URL-адресом. Этот контекст используется для поиска конфигурации, относящейся к нему, и передаётся средствам-помощникам, которые могут использовать его как индекс в защищённом хранилище.
Например, представим, что мы обращаемся к https://example.com/foo.git. При поиске в файле конфигурации подходящего раздела Git считает контекст соответствующим шаблону, если контекст является более конкретным подмножеством шаблона в файле конфигурации. Например, если в файле конфигурации указано следующее:
[credential "https://example.com"]
username = foo совпадение будет найдено: протоколы и хосты совпадают. Однако этот контекст не будет соответствовать следующему:
[credential "https://kernel.org"]
username = foo поскольку имена хостов различаются. Не будет соответствия и для foo.example.com: Git сравнивает имена хостов точно, не учитывая, принадлежат ли два хоста одному домену. Аналогично, запись конфигурации для http://example.com не подойдёт: Git сравнивает протоколы точно. Однако в имени домена можно использовать подстановочные символы и другие способы сопоставления шаблонов, как и в параметрах http.<URL>.*.
Если URL-адрес «шаблона» содержит компонент пути, путь контекста должен начинаться с этого пути: контекст https://example.com/bar будет соответствовать записи конфигурации для https://example.com/bar/baz.git, но не записи для https://example.com/other/repo.git или https://example.com/barry/repo.git (даже несмотря на то, что эта строка является префиксом).
Параметры конфигурации
Параметры контекста учётных данных можно настроить либо в credential.* (применяется ко всем учётным данным), либо в credential.<URL>.*, где <URL> соответствует контексту, как описано выше.
В обоих случаях доступны следующие параметры:
- helper
-
Имя внешнего средства-помощника для учётных данных и связанные с ним параметры. Если имя средства-помощника не является абсолютным путём, к нему добавляется строка
gitcredential-. Полученная строка выполняется оболочкой (так, например, если задать значениеfoo--option=bar, оболочка выполнитgitcredential-foo--option=bar. Примеры использования см. в руководстве по конкретному средству-помощнику.Если переменная конфигурации
credential.helperуказана несколько раз, средства-помощники будут вызываться по очереди, и каждое может предоставить имя пользователя, пароль или ничего. После того как Git получит имя пользователя и неистёкший пароль, остальные средства-помощники вызываться не будут.Если для
credential.helperзадана пустая строка, список средств-помощников очищается (так можно переопределить средство-помощник, заданное в конфигурационном файле с более низким приоритетом: сначала указать пустую строку, а затем нужный набор средств-помощников). - username
-
Имя пользователя по умолчанию, если оно не указано в URL-адресе.
- useHttpPath
-
По умолчанию Git не считает компонент «path» URL-адреса http значимым для сопоставления с помощью внешних средств-помощников. Это означает, что учётные данные, сохранённые для
https://example.com/foo.git, будут также использоваться дляhttps://example.com/bar.git. Чтобы различать эти случаи, задайте для этого параметра значениеtrue.
Пользовательские средства-помощники
Вы можете написать собственные средства-помощники для взаимодействия с любыми системами, в которых хранятся учётные данные.
Средства-помощники для учётных данных — это программы, которые Git запускает для получения или сохранения учётных данных в долговременном хранилище (под «долговременным» понимается хранение дольше, чем длится один процесс Git; например, учётные данные могут храниться в памяти несколько минут или бессрочно на диске).
Каждое средство-помощник задаётся одной строкой в переменной конфигурации credential.helper (а также в других переменных, см. git-config[1]). Git преобразует эту строку в команду, используя следующие правила:
-
Если строка средства-помощника начинается с «!», она считается фрагментом сценария оболочки, а всё, что следует за «!», становится командой.
-
В противном случае, если строка средства-помощника начинается с абсолютного пути, команда формируется непосредственно из этой строки без изменений.
-
В противном случае к строке средства-помощника добавляется префикс «git credential-», и результат становится командой.
Затем к полученной команде добавляется аргумент «операция» (подробности см. ниже), и она выполняется оболочкой.
Примеры таких спецификаций:
# run "git credential-foo"
[credential]
helper = foo
# same as above, but pass an argument to the helper
[credential]
helper = "foo --bar=baz"
# the arguments are parsed by the shell, so use shell
# quoting if necessary
[credential]
helper = "foo --bar='whitespace arg'"
# store helper (discouraged) with custom location for the db file;
# use `--file ~/.git-secret.txt`, rather than `--file=~/.git-secret.txt`,
# to allow the shell to expand tilde to the home directory.
[credential]
helper = "store --file ~/.git-secret.txt"
# you can also use an absolute path, which will not use the git wrapper
[credential]
helper = "/path/to/my/helper --with-arguments"
# or you can specify your own shell snippet
[credential "https://example.com"]
username = your_user
helper = "!f() { test \"$1\" = get && echo \"password=$(cat $HOME/.secret)\"; }; f" Как правило, пользователям проще всего указывать средство-помощник согласно правилу (3). Разработчикам средств-помощников следует упростить их использование: назвать программу «git-credential-$NAME» и при установке поместить её в $PATH или $GIT_EXEC_PATH. Тогда пользователь сможет включить её с помощью команды git config credential.helper $NAME.
При запуске к командной строке средства-помощника добавляется один аргумент «операция», который может принимать одно из следующих значений:
-
get -
Возвращает подходящие учётные данные, если они существуют.
-
store -
Сохраняет учётные данные, если это поддерживается средством-помощником.
-
erase -
Удаляет подходящие учётные данные из хранилища средства-помощника, если они там есть.
Подробные сведения об учётных данных передаются через стандартный входной поток средства-помощника. Точный формат совпадает с форматом ввода и вывода низкоуровневой команды git credential (подробная спецификация приведена в разделе INPUT/OUTPUT FORMAT руководства git-credential[1]).
При операции get средство-помощник должно выводить список атрибутов в стандартный выходной поток в том же формате (общие атрибуты описаны в git-credential[1]). Средство-помощник может вывести только часть атрибутов или не вывести ничего, если ему нечего предложить. Все предоставленные атрибуты заменяют те, о которых подсистеме учётных данных Git уже известно. Неизвестные атрибуты отбрасываются без уведомления.
Хотя можно переопределять любые атрибуты, правильно работающим средствам-помощникам следует делать это только для имени пользователя и пароля.
Если средство-помощник выводит атрибут quit со значением true или 1, остальные средства-помощники вызываться не будут, и запрос пользователю выводиться не будет (если учётные данные не предоставлены, операция завершится ошибкой).
Аналогично, остальные средства-помощники не вызываются после получения имени пользователя и пароля.
При операциях store или erase вывод средства-помощника игнорируется.
Если средство-помощник не может выполнить запрошенную операцию или ему нужно сообщить пользователю о возможной проблеме, оно может вывести сообщение в стандартный поток ошибок.
Если средство-помощник не поддерживает запрошенную операцию (например, это хранилище только для чтения или генератор), ему следует молча проигнорировать запрос.
Если средство-помощник получает любую другую операцию, ему следует молча проигнорировать запрос. Это оставляет возможность добавлять операции в будущем (старые средства-помощники просто будут игнорировать новые запросы).
gitcredentials
© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/gitcredentials