Как отключить помощник по учетным данным в git для одного репозитория?
Если у меня есть помощник по учетным данным, установленный в моем ~/.gitconfig
Как я могу отключить / обойти его в конкретном репо и не использовать помощник учетных данных?
Я пытался редактировать репо .git/config
файл, чтобы убрать credential.helper
свойство как это:
[credential]
helper =
... но когда я делаю git push
Я получаю следующее сообщение об ошибке, и Git использует мой помощник по умолчанию из ~/.gitconfig
тем не мение:
git: 'credential-' is not a git command. See 'git --help'.
Did you mean this?
credential
Я использую GIT версии 1.7.12.
(Предыстория / случай использования: Git настроен на использование store
помощник, который хранит незашифрованные пароли на диске. cache
помощник недоступен в этой системе. У меня есть пара репозиториев, для которых я бы предпочел каждый раз вводить пароль, а не хранить его на диске.)
4 ответа
С git 2.9 (июнь 2016 г.), это (helper =
) будет реально работать!
Смотрите коммит 2432137 (26 февраля 2016 г.) Джеффа Кинга ( peff
)
(Объединено Юнио С Хамано - gitster
- в коммите 1b68962, 3 апреля 2016 г.)
credential.helper
Переменная конфигурации является накопительной, и нет хорошего способа переопределить ее из командной строки.
В качестве особого случая предоставление пустой строки в качестве значения теперь служит сигналом для очистки значений, указанных в различных файлах.
credential
: пусть пустые учетные данные сбрасывают список помощниковТак как
credential.helper
Ключ является многозначным списком конфигурации, нет способа "сбросить" помощника, как только он был установлен. Так что если ваша система/etc/gitconfig
устанавливает один, вы никогда не сможете избежать его запуска, а только добавите своих собственных помощников сверху.Поскольку пустое значение для
credential.helper
бессмысленно (он просто попытается запустить "git-credential-
"), мы можем предположить, что никто не использует его. Давайте определим его для сброса списка помощников, что позволит вам переопределить экземпляры с более низким приоритетом, которые были раньше.
То, что я пробовал и хорошо сработало, было:
$ git config --system --unset credential.helper
Но для того, чтобы это работало нормально, мне пришлось установить git-bash.exe с правами администратора.
К сожалению, я думаю, что это глобальная переменная. Вы должны проверить и посмотреть, работает ли он для отдельных репозиториев.
Удачи
В дополнение к ' git config credential.helper=
"Что я упоминал выше с Git 2.9, теперь вы (Git 2.13.x/Git 2.14, Q3 2017) можете отключить помощник по учетным данным только для одной команды (а не только для любой команды в данном репо)
Это означает git -c credential.helper= clone /url/remote/repo
в настоящее время работает.
" git clone --config var=val
msgstr "это способ заполнить файл конфигурации для каждого репозитория нового репозитория, но он не сработал, когда val - пустая строка.
Это было исправлено.
Смотрите коммит db4eca1 (02 мая 2017 г.) Джонатана Нидера ( artagnon
)
(Объединено Юнио С Хамано - gitster
- в коммите 883247c, 16 мая 2017 г.)
clone
: обрабатывать пустые значения конфигурации в-c
"
git clone --config
"использует следующее заклинание для добавления элемента в файл конфигурации вместо замены существующего значения:git_config_set_multivar_gently(key, value, "^$", 0)
Пока никакое существующее значение не соответствует регулярному выражению
^$
, который работает как задумано и добавляет в конфиг. Когда значение пустое, оно заменяет существующее.Заметил, пытаясь установить
credential.helper
во время клона использовать определенный помощник без наследования от~/.gitconfig
а также/etc/gitconfig
,
То есть я побежал:git clone -c credential.helper= \ -c credential.helper=myhelper \ https://example.com/repo
намереваясь произвести конфигурацию:
[credential] helper = helper = myhelper
Без этого патча
helper =
'строка не включена, и помощник по учетным данным из/etc/gitconfig
привыкает.
Обратите внимание, что документация теперь яснее с коммитом 515360f:
документ, подтверждающий личность: сделать поведение нескольких помощников более заметным
Система конфигурации Git работает, читая несколько файлов конфигурации по порядку, от общего к конкретному:
- во-первых, конфигурация системы
/etc/gitconfig
- тогда конфигурация пользователя (
~/.gitconfig
или же~/.config/git/config
) - тогда конфигурация репозитория (
.git/config
)
Для однозначных элементов конфигурации побеждает последнее значение.
Для многозначных элементов конфигурации значения накапливаются в этом порядке.Например, это позволяет глобально установить помощника по учетным данным в
~/.gitconfig
этот git будет пытаться использовать во всех репозиториях, независимо от того, предоставляют ли они дополнительно другого помощника.
Обычно это хорошая вещь - например, я могу установить помощников для использования моей цепочки ключей ОС и для кэширования учетных данных в течение короткого периода времени во всем мире.Иногда люди хотят иметь возможность переопределить унаследованные настройки.
Дляcredential.helper
установка, это делается путем установки элемента конфигурации пустым, прежде чем дать ему новое значение.
Переменная config, для которой задана пустая строка, отличается от неустановленной переменной. Невозможно заставить переменную быть сброшенной в .git/config
когда он уже установлен в ~/.gitconfig
,
Дополнительно credential.helper
является одной из этих переменных, где используются несколько значений, и в таких случаях значения агрегируются из всех прочитанных файлов конфигурации.
Так что в основном ваши варианты выглядят так:
либо не использовать
credential.helper
в~/.gitconfig
; установить помощник магазина только для тех хранилищ, где вы хотите, либо в их.git/config
или в~/.gitconfig
указав URL репо, например.[credential "https://specific.example.com/repo.git"] helper = store
или реализовать свой собственный помощник, который ничего не делает для набора настроенных репозиториев и делегатов
git credential-store
что касается прочего.
Я просто столкнулся с этой проблемой, так как первый настроенный мной credential.helper всегда выполнялся, когда я хотел протестировать новый. Это на macOS с использованием git, поставляемого с инструментами разработчика Apple.
Перечисление конфигов с git config --list
показал оба помощника.
Бег git config --global --edit
не показывал настройки для первого помощника. Немного странно, что --global при настройке помощника отличается от --global при редактировании конфигов.
Кроме того, так как я хотел включить другого помощника, простое отключение не решило бы это.
Наконец нашел настройки в двух местах:
/Library/Developer/CommandLineTools/usr/share/git-core/gitconfig
/Applications/Xcode.app/Contents/Developer/usr/share/git-core/gitconfig
Удален раздел учетных данных из первого, но оба параметра все еще были перечислены с помощью --list
, После перезагрузки и попытки каждого комбо unset, unset-all --system, --global, et, я нашел второй файл.
Удалил настройки из этого файла (снова был только один) и, наконец, --list
не показывает никаких настроенных помощников.