Подтвердить что ты не робот

Как отключить помощник учетных данных git для одного репозитория?

Если у меня есть вспомогательный набор учетных данных в моем ~/.gitconfig, как я могу отключить/обойти его в конкретном репо и не использовать помощник учетных данных?

Я пробовал редактировать файл repo .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.

(Backstory/use case: Git настроен для использования помощника store, который хранит пароли, незашифрованные на диске. Хелпер cache недоступен в этой системе. У меня есть пара репозиций, для которых я скорее вводите пароль каждый раз, чем храните его на диске.)

4b9b3361

Ответ 1

С git 2.9 (июнь 2016 года) это (helper =) будет работать!

Смотрите commit 2432137 (26 февраля 2016 года) Джефф Кинг (peff).
(слияние Юнио С Хамано - gitster - в совершить 1b68962, 03 апреля 2016)

Конфигурационная переменная credential.helper является кумулятивной, и нет хорошего способа переопределить ее из командной строки.
В качестве специального случая , дающий пустую строку, поскольку ее значение теперь служит сигналом для очистки значений, указанных в разных файлах.

credential: пусть пустые спецификации учетных данных reset список помощников

Так как ключ credential.helper является многозначным списком конфигураций, нет способа "отменить" помощника после его установки. Поэтому, если ваша система /etc/gitconfig устанавливает один, вы никогда не сможете ее запустить, но только добавьте свои собственные помощники сверху.

Так как пустое значение для credential.helper бессмысленно (он просто попытается запустить "git-credential-" ), мы можем предположить, что его никто не использует. Пусть он определяет reset список помощников, позволяя вам переопределять экземпляры с более низким приоритетом, которые раньше.

Ответ 2

То, что я пробовал, и сработало хорошо:

$ git config --system --unset credential.helper

Но для этого хорошо, я должен был установить git - bash.exe с правами администратора.

К сожалению, я думаю, что это глобальная переменная. Вы должны проверить и посмотреть, работает ли он для отдельных хранилищ.

Удачи.

Ответ 3

Конфигурационная переменная, установленная в пустую строку, не совпадает с переменной unset. Невозможно отключить переменную в .git/config, если она уже установлена ​​в ~/.gitconfig.

Дополнительно credential.helper - одна из этих переменных, в которой используются несколько значений, и в таких случаях значения агрегируются из всех прочитанных конфигурационных файлов.

Таким образом, в основном ваши варианты выглядят следующим образом:

  • либо не использовать credential.helper в ~/.gitconfig; установите помощник хранилища только для репозиториев, где вы хотите, либо в их .git/config, либо в ~/.gitconfig, указав URL-адреса репо, например.

    [credential "https://specific.example.com/repo.git"]
    helper = store
    
  • или реализовать собственный помощник, который ничего не делает для набора сконфигурированных репозиториев и делегатов для git credential-store для остальных.

Ответ 4

В дополнение к 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" - это способ заполнения файл конфигурации для каждого репозитория нового репозитория, но он не работал, когда val - это пустая строка.
Это было исправлено.

См. commit db4eca1 (02 мая 2017 г.) Джонатан Нидер (artagnon).
(слияние Junio ​​C Hamano - 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.


Обратите внимание, что документация теперь понятна с помощью commit 515360f:

credential doc: сделать несколько помощников более заметными

Git система конфигурации работает, читая несколько файлов конфигурации по порядку, от общего к конкретному:

  • сначала конфигурация системы /etc/gitconfig
  • тогда пользовательская конфигурация (~/.gitconfig или ~/.config/git/config)
  • то конфигурация репозитория (.git/config)

Для объектов с однозначной конфигурацией выигрывает последнее значение.
Для многозначных элементов конфигурации значения накапливаются в этом порядке.

Например, это позволяет установить глобальный помощник по учетным записям в ~/.gitconfig, который Git будет пытаться использовать во всех репозиториях, независимо от того, дополнительно ли они предоставляют другой помощник.
Обычно это приятная вещь - например. Я могу установить помощников для использования моей ключевой цепи ОС и кэшировать учетные данные в течение короткого периода времени по всему миру.

Иногда люди хотят переопределить унаследованную настройку.
Для параметра credential.helper это делается установкой элемента конфигурации пустым, прежде чем присвоить ему новое значение.

Ответ 5

Я просто столкнулся с этой проблемой, так как первый настроенный мной credential.helper всегда выполнялся, когда я хотел протестировать новый. Это на macOS с использованием git, поставляемого с инструментами Apple dev.

Перечисление конфигов с помощью 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 не показывает никаких настроенных помощников.