Так как Git 1.7.9 (выпущен в конце января 2012 года), в Git есть аккуратный механизм, чтобы избежать необходимости постоянно вводить пароль для HTTP/HTTPS, называемый помощники учетных данных. (Благодаря dazonic для указания этой новой функции в комментариях ниже.)
С помощью Git 1.7.9 или более поздней версии вы можете просто использовать один из следующих помощников учетных данных:
git config --global credential.helper cache
..., который сообщает Git сохранить ваш пароль в кеше в памяти (по умолчанию) 15 минут. Вы можете установить более длительный тайм-аут с помощью:
git config --global credential.helper "cache --timeout=3600"
(Этот пример был предложен на странице справки GitHub для Linux.) Вы также можете сохранить свои учетные данные навсегда, если это необходимо, см. другой ответы ниже.
GitHub help также предлагает, что если вы находитесь в Mac OS X и используете Homebrew для установки Git, вы можете использовать собственное хранилище Mac OS X с:
git config --global credential.helper osxkeychain
Для Windows есть помощник Git Диспетчер учетных данных для Windows или wincred in msysgit.
git config --global credential.helper wincred # obsolete
С Git для Windows 2.7.3+ (март 2016 года):
git config --global credential.helper manager
Для Linux вы можете использовать gnome-keyring
(или другую реализацию таких ключей, как KWallet).
В версиях Git до версии 1.7.9 этот более безопасный параметр недоступен, и вам нужно будет изменить URL-адрес, используемый вашим пустом origin
для включения пароля таким образом:
https://you:[email protected]/you/example.git
... другими словами, с :password
после имени пользователя и перед @
.
Вы можете установить новый URL-адрес своего пульта origin
с помощью:
git config remote.origin.url https://you:[email protected]/you/example.git
Убедитесь, что вы используете https
, и вам следует знать, что если вы это сделаете, ваш пароль GitHub будет храниться в текстовом редакторе в каталоге .git
, что явно нежелательно.
Альтернативный подход заключается в том, чтобы поместить свое имя пользователя и пароль в ваш файл ~/.netrc
, хотя, как и при сохранении пароля в удаленном URL-адресе, это означает, что ваш пароль будет сохранен на диске простым текстом и, следовательно, будет меньше безопасно и не рекомендуется. Однако, если вы хотите применить этот подход, добавьте следующую строку в ~/.netrc
:
machine <hostname> login <username> password <password>
... заменив <hostname>
на имя хоста сервера и <username>
и <password>
на ваше имя пользователя и пароль. Также не забудьте установить ограничения на файловые системы в этом файле:
chmod 600 ~/.netrc
Обратите внимание, что в Windows этот файл должен быть вызван _netrc
, и вам может потребоваться определить переменную среды% HOME% - для получения дополнительной информации см.
git config --global credential.helper osxkeychain
в OS X. Для других ОС см. help.github.com/articles/set-up-git
У вас также может быть Git хранить ваши учетные данные на постоянной основе, используя следующее:
git config credential.helper store
Примечание. Хотя это удобно, Git будет хранить ваши учетные данные в виде открытого текста в локальный файл (.git-credentials) в вашем каталоге проектов (см. ниже для "домашнего" каталога). Если вам это не нравится, удалите этот файл и переключитесь на использование кеш.
Если вы хотите, чтобы Git возобновлялось, чтобы запрашивать у вас учетные данные каждый раз, когда это необходимо подключитесь к удаленному репозиторию, вы можете запустить эту команду:
git config --unset credential.helper
Чтобы сохранить пароли в .git-credentials
в каталоге %HOME%
в отличие от каталога проекта: используйте флаг --global
git config --global credential.helper store
git config --global credential.helper store
Сохранение пароля для URL-адреса репозитория Git HTTPS возможно с помощью ~/.netrc
(Unix) или %HOME%/_netrc
(обратите внимание на _
) в Windows.
Но: этот файл будет хранить ваш пароль в виде обычного текста.
Решение. Зашифруйте этот файл с помощью GPG (Защита конфиденциальности GNU) и сделайте Git расшифровать его каждый (для push
/pull
/fetch
/clone
).
В Windows:
(Git имеет gpg.exe
в своем дистрибутиве, но с использованием полной установки GPG включает gpg-agent.exe
, который запоминает вашу кодовую фразу, связанную с вашим ключом GPG.)
Установите gpg4Win Lite
, минимальный интерфейс командной строки gnupg (возьмите самый последний gpg4win-vanilla-2.X.Y-betaZZ.exe
) и заполните PATH каталогом установки GPG:
set PATH=%PATH%:C:\path\to\gpg
copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe
(Обратите внимание, что команда "copy
": Git потребуется Bash script для выполнения команды 'gpg
'. Поскольку gpg4win-vanilla-2
поставляется с gpg2.exe
, вам необходимо его дублировать.)
Создайте или импортируйте ключ GPG и доверьтесь ему:
gpgp --import aKey
# or
gpg --gen-key
(Не забудьте поставить кодовую фразу на этот ключ.)
Установите помощник учетных данных script в каталог в вашем %PATH%
:
cd c:\a\fodler\in\your\path
curl -o c:\prgs\bin\git-credential-netrc https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc
(Да, это Bash script, но он будет работать в Windows, так как он будет вызван Git.)
Сделать файл _netrc в ясном тексте
machine a_server.corp.com
login a_login
password a_password
protocol https
machine a_server2.corp.com
login a_login2
password a_password2
protocol https
(Не забудьте часть 'protocol
': 'http
' или 'https
' в зависимости от URL-адреса, который вы будете использовать.
Зашифровать этот файл:
gpg -e -r a_recipient _netrc
(Теперь вы можете удалить файл _netrc
, сохраняя только _netrc.gpg
зашифрованный файл.)
Используйте этот зашифрованный файл:
git config --local credential.helper "netrc -f C:/path/to/_netrc.gpg -v"
(Обратите внимание, что '/
': C:\path\to...
не будет работать вообще.) (Сначала вы можете использовать -v -d
, чтобы узнать, что происходит.)
С этого момента любая команда Git, использующая URL-адрес HTTP (S), требующий аутентификации, расшифровывает этот файл _netrc.gpg
и использует логин/пароль, связанные с сервером, с которым вы связываетесь.
В первый раз GPG попросит вас ввести ключевую фразу вашего ключа GPG, чтобы расшифровать файл.
В других случаях gpg-agent , автоматически запускаемый при первом вызове GPG, предоставит вам эту фразу.
Таким образом, вы можете запоминать несколько URL-адресов/логинов/паролей в одном файле и хранить их на своем диске в зашифрованном виде.
Я считаю, что это более удобно, чем "помощник кеша", где вам нужно запомнить и ввести (один раз за сеанс) другой пароль для каждой из ваших удаленных служб, поскольку указанный пароль будет кэшироваться в памяти.
curl -oc:\prgs\bin\git-credential-netrc https://raw.github.com/git/git/master/contrib/credential/netrc/git-credential-netrc
: вам нужно скопировать git-credential-netrc
любое место вашего пути ( $PATH
), чтобы git мог вызывать ' credential-netrc
'.
Там простой, старомодный способ хранения учетных данных пользователя в URL-адресе HTTPS:
https://user:[email protected]/...
Вы можете изменить URL с помощью git remote set-url <remote-repo> <URL>
Очевидным недостатком этого подхода является то, что вы должны хранить пароль в виде обычного текста. Вы все равно можете просто ввести имя пользователя (https://[email protected]/...
), которое, по крайней мере, избавит вас от хлопот.
Вы можете переключиться на SSH или использовать клиентское программное обеспечение GitHub.
Использовать хранилище учетных данных.
Для git 2.11+ в OSX и Linux, используйте git встроенный хранилище учетных данных
git config --global credential.helper libsecret
Для msysgit 1.7.9+ на Windows:
git config --global credential.helper wincred
Для git 1.7.9+ на OS X используйте:
git config --global credential.helper osxkeychain
git: 'credential-gnome-keyring' is not a git command. See 'git --help'.
2.11
а затем, используя git config --global credential.helper libsecret
похоже, что gnome-keyring устарела stackoverflow.com/questions/13385690/…
Вы можете просто использовать
git config credential.helper store
Когда вы вводите пароль в следующий раз с нажатием или нажатием, он будет сохранен в .git-credentials как обычный текст (немного небезопасный, но просто помещаем его в защищенную папку)
И это, как указано на этой странице:
git config credential.helper manager
Вероятно, я немного медленный, но мне не сразу стало ясно, что мне нужно сначала скачать помощника! Я нашел учетную запись credential.helper в Atlassian На постоянной аутентификации с репозиториями Git, надеюсь, что это поможет.
Цитата:
Выполните следующие действия, если вы хотите использовать Git с кэшированием учетных данных в OSX:
Загрузите двоичный git -credential-osxkeychain.
Выполните приведенную ниже команду, чтобы убедиться, что исполняемый файл двоичный:
chmod a+x git-credential-osxkeychain
Поместите его в каталог /usr/local/bin.
Выполните следующую команду:
git config --global credential.helper osxkeychain
Просто укажите учетные данные для входа в URL-адрес:
git remote rm origin
git remote add origin https://username:[email protected]/path/to/repo.git
В настройках GNU/Linux, ~/.netrc работает также хорошо:
$ cat ~/.netrc
machine github.com login lot105 password howsyafather
Это может зависеть от того, какие сетевые библиотеки Git используется для транспорта HTTPS.
chmod 0600 ~/.netrc
.
В Windows вы можете использовать плагин Git Credential Manager (GCM). В настоящее время он поддерживается Microsoft. Самое приятное, что он сохраняет пароль в хранилище учетных данных Windows, а не как обычный текст.
На странице появляется программа установки > проекта. Это также установит официальную версию git -for-windows с помощью встроенного администратора учетных данных. Он позволяет двухфакторную аутентификацию для github (и других серверов). И имеет графический интерфейс для первоначального входа в систему.
Для пользователей cygwin (или пользователей, уже использующих официальные git -for-windows), вы можете предпочесть ручную установку. Загрузите пакет zip с релизы. Извлеките пакет, затем запустите install.cmd
. Это будет установлено в вашу папку ~/bin
. (Убедитесь, что ваш каталог ~/bin
находится в вашем PATH.) Затем вы настраиваете его с помощью этой команды:
git config --global credential.helper manager
Git будет запускать git-credential-manager.exe
при аутентификации на любой сервер.
printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get
( подробнее здесь ). Вы должны всегда использовать личный токен доступа и, конечно, использовать 2FA в своей учетной записи GitHub.
Если вы не хотите хранить свой пароль в виде открытого текста, например, как сказал Марк, вы можете использовать другой URL-адрес github для извлечения, чем для pushing. В вашем файле конфигурации под [remote "origin"]
:
url = git://github.com/you/projectName.git
pushurl = [email protected]:you/projectName.git
Он все равно будет запрашивать пароль при нажатии, но не при извлечении, по крайней мере, для проектов с открытым исходным кодом.
Вы можете использовать помощники учетных данных.
git config --global credential.helper 'cache --timeout=x'
где x
- количество секунд.
store
, cache
и другие общие вещи перечислены и объяснены?
После клонирования repo
вы можете отредактировать repo/.git/config
и добавить некоторую конфигурацию, как показано ниже:
[user]
name = you_name
password = you_password
[credential]
helper = store
Затем вас больше не будут запрашивать username
и password
.
helper = manager
(но меня просят имя пользователя + репо для первого нажатия).
Вы можете создать свой собственный персональный токен API (OAuth) и используйте его так же, как и обычные учетные данные (at: /settings/tokens
). Например:
git remote add fork https://[email protected]/foo/bar
git push fork
.netrc
Другим способом является использование вашего пользователя/пароля в ~/.netrc
(_netrc
в Windows), например
machine github.com
login USERNAME
password PASSWORD
Для https:
machine github.com
login USERNAME
password PASSWORD
protocol https
В кешируйте свой пароль GitHub в Git при использовании HTTPS, вы можете использовать помощник учетных данных, чтобы сообщить Git, чтобы запомнить ваш Имя пользователя и пароль GitHub каждый раз, когда он разговаривает с GitHub.
git config --global credential.helper osxkeychain
(osxkeychain helper
требуется),git config --global credential.helper wincred
git config --global credential.helper cache
по теме:
Вместо пароля учетной записи следует использовать токен аутентификации. Перейдите в настройки/приложения GitHub, а затем создайте токен доступа. Маркер может использоваться так же, как и пароль.
Маркер предназначен для того, чтобы пользователи не могли использовать пароль учетной записи для работы над проектом. Используйте только пароль при выполнении администрирования, например, создание новых токенов или отмену старых токенов.
Вместо маркера или пароля, который предоставляет пользователю полный доступ к учетной записи GitHub, для предоставления доступа к одному репозиторию проекта может использоваться специальный ключ развертывания проекта. Проект Git может быть настроен для использования этого другого ключа в следующих шагах, когда вы по-прежнему можете обращаться к другим учетным записям или проектам Git с вашими нормальными учетными данными:
Host
, IdentityFile
для ключа развертывания, возможно, UserKnownHostsFile
и, возможно, User
(хотя я думаю, что вам это не нужно).ssh -F /path/to/your/config $*
GIT_SSH=/path/to/your/wrapper
перед вашей обычной командой Git. Здесь git remote
(origin) должен использовать формат [email protected]:user/project.git
.Все немного отличается, если вы используете двухфакторную аутентификацию, как и я. Поскольку я не нашел хорошего ответа в другом месте, я буду придерживаться его здесь, чтобы, возможно, я смогу найти его позже.
Если вы используете двухфакторную аутентификацию, то указание имени пользователя и пароля даже не будет работать - вы получите отказ в доступе. Но вы можете использовать токен доступа к приложениям и использовать Git помощник учетных данных для кэширования для вас. Вот ссылки:
И я не помню, где я это видел, но когда вас попросят указать ваше имя пользователя - там, где вы прикрепляете токен доступа к приложениям. Затем оставьте пароль пустым. Он работал на моем Mac.
Я знаю, что это не безопасное решение, но иногда вам нужно простое решение - без установки чего-либо еще. И поскольку helper = store не работал у меня, я создал вспомогательный помощник:
Создайте script a и поместите его в свою папку bin пользователя, здесь с именем credfake, этот script предоставит ваше имя пользователя и пароль:
#!/bin/bash
while read line
do
echo "$line"
done < "/dev/stdin"
echo username=mahuser
echo password=MahSecret12345
сделать его выполнимым:
chmod u+x /home/mahuser/bin/credfake
затем настройте его в git:
git config --global credential.helper /home/mahuser/bin/credfake
(или использовать его без -global только для одного репо)
и - voilá - git будет использовать этот пользователь + пароль.
Лучше использовать учетные данные для безопасности, но вы можете сохранить его в течение некоторого времени с помощью кеша
git config --global credential.helper cache
git config credential.helper 'cache --timeout=3600'
Ваши учетные данные будут сохранены на 3600 секунд.
Это работает для меня. Я использую Windows 10
git config --global credential.helper wincred
Получил ответ от gitcredentials (7) Страница руководства. В моем случае у меня нет кеша учетных данных в моей установке Windows; Я использую хранилище учетных данных.
После использования хранилища учетных данных имя пользователя/пароль хранятся в файле [user folder]/. git-credentials. Чтобы удалить имя пользователя/пароль, просто удалите содержимое файла.
git config --global credential.helper wincred
сохранения этого хранилища пароля.
Обычно у вас есть удаленный url что-то вроде этого,
git remote -v
origin https://gitlab.com/username/Repo.git (fetch)
origin https://gitlab.com/username/Repo.git (push)
если вы хотите пропустить имя пользователя и пароль при использовании git push, попробуйте
git remote set-url origin https://username:[email protected]/username/Repo.git
Я только что добавил тот же url (с информацией о пользователе, включая пароль) в начало.
ПРИМЕЧАНИЕ. Это не работает, если имя пользователя является идентификатором электронной почты.
git remote -v
origin https://username:[email protected]/username/Repo.git (fetch)
origin https://username:[email protected]/username/Repo.git (push)
Вы также редактируете файл bashrc и добавляете в него script. Это будет запрашивать пароль при запуске git один раз, а затем запомнить его до выключения.
SSH_ENV=$HOME/.ssh/environment
# start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# spawn ssh-agent
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/null
/usr/bin/ssh-add
}
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
Документация композитора упоминает, что вы можете помешать ей использовать API GitHub, чтобы он действовал как git clone
:
Если вы установите ключ
no-api
вtrue
в репозитории GitHub, он будет клонировать репозиторий, как и в любом другом репозитории Git, вместо использования API GitHub. Но в отличие от использования драйвераgit
, композитор все равно попытается использовать zip файлы GitHub.
Итак, раздел будет выглядеть так:
"repositories": [
{
"type": "vcs",
"no-api": true,
"url": "https://github.com/your/repo"
}
],
Имейте в виду, что API существует по какой-то причине. Таким образом, это должно быть методом последней инстанции относительно увеличения нагрузки на github.com.
Если у вас уже есть проекты:
your/project/path/.git/config
. Открой это. И измените URL-адреса, как url = https://[email protected]/project.git
, чтобы: url = https://username:[email protected]/project.git
git remote rm origin
git remote add origin https://username:[email protected]/project.git
Если вы клонируете новый проект: git clone https://username:[email protected]/project.git
git remote add origin https://username:[email protected]/project.git
_netrc
содержащего ваши учетные данные. Смотрите мой ответ ниже . Я обнаружил, что безопаснее, чемgit-credential-winstore.exe
(кэш памяти), который немного глючит в Windows.