Spec-Zone.ru › Git

gitcredentials

Имя

gitcredentials — предоставление Git имён пользователей и паролей

Краткое описание

git config credential.https://example.com.username myusername
git config credential.helper "$helper $options"

Описание

Иногда Git требуется получить от пользователя учётные данные для выполнения операций; например, ему может понадобиться запросить имя пользователя и пароль для доступа к удалённому репозиторию по HTTP. Некоторые удалённые репозитории принимают в качестве пароля персональный токен доступа или токен доступа OAuth. В этом руководстве описаны механизмы, которые Git использует для запроса этих учётных данных, а также некоторые возможности, позволяющие не вводить их многократно.

Запрос учётных данных

Если средства-помощники для учётных данных не заданы, Git будет использовать следующие способы запроса имён пользователей и паролей:

  1. Если задана переменная окружения GIT_ASKPASS, запускается указанная в ней программа. Подходящий запрос передаётся программе в командной строке, а ввод пользователя считывается из её стандартного вывода.

  2. В противном случае, если задана переменная конфигурации core.askPass, её значение используется описанным выше способом.

  3. В противном случае, если задана переменная окружения SSH_ASKPASS, её значение используется описанным выше способом.

  4. В противном случае запрос выводится пользователю в терминале.

Как избежать повторного ввода

Постоянно вводить одни и те же учётные данные может быть утомительно. Git предлагает два способа уменьшить это неудобство:

  1. Статическая настройка имён пользователей для заданного контекста аутентификации.

  2. Средства-помощники для учётных данных, позволяющие кэшировать или хранить пароли либо взаимодействовать с системным хранилищем паролей или связкой ключей.

Первый способ прост и подходит, если у вас нет защищённого хранилища для пароля. Обычно его настраивают, добавив в конфигурацию следующее:

[credential "https://example.com"]
        username = me

Средства-помощники для учётных данных, напротив, представляют собой внешние программы, у которых Git может запрашивать имена пользователей и пароли; обычно они взаимодействуют с защищёнными хранилищами, предоставляемыми операционной системой или другими программами. Кроме того, средство-помощник может создавать учётные данные для определённых серверов с помощью API.

Чтобы использовать средство-помощник, сначала необходимо выбрать его (список приведён ниже).

У вас также могут быть установлены сторонние средства-помощники; найдите credential-* в выводе команды git help -a и ознакомьтесь с документацией конкретных средств-помощников. Выбрав средство-помощник, укажите Git использовать его, добавив его имя в переменную credential.helper.

  1. Найдите средство-помощник.

    $ git help -a | grep credential-
    credential-foo
  2. Прочитайте его описание.

    $ git help credential-foo
  3. Укажите 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

Имя внешнего средства-помощника для учётных данных и связанные с ним параметры. Если имя средства-помощника не является абсолютным путём, к нему добавляется строка git credential-. Полученная строка выполняется оболочкой (так, например, если задать значение foo --option=bar, оболочка выполнит git credential-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 преобразует эту строку в команду, используя следующие правила:

  1. Если строка средства-помощника начинается с «!», она считается фрагментом сценария оболочки, а всё, что следует за «!», становится командой.

  2. В противном случае, если строка средства-помощника начинается с абсолютного пути, команда формируется непосредственно из этой строки без изменений.

  3. В противном случае к строке средства-помощника добавляется префикс «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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API