Как ввести команду с паролем для git pull?

Я хочу сделать эту команду в одной строке: git pull && [my passphrase]

Как это сделать?

11 ответов

Решение

Это не совсем то, что вы просили, но для http(s):

  • Вы можете поместить пароль в файл.netrc (_netrc в Windows). Оттуда это будет взято автоматически. Он пошел бы в вашу домашнюю папку с 600 разрешениями.
  • Вы также можете просто клонировать репо с https://user:pass@domain/repo но это не очень рекомендуется, так как это покажет ваш пользователь / пароль во многих местах...
  • новая опция - использовать помощник по учетным данным. Обратите внимание, что учетные данные будут храниться в виде открытого текста в вашей локальной конфигурации с использованием стандартного помощника учетных данных. Учетные данные помощника с Wincred также могут быть использованы на окнах.

Примеры использования для помощника учетных данных

  • git config credential.helper store - хранит учетные данные неопределенно долго.
  • git config credential.helper 'cache --timeout=3600'- магазины на 60 минут

Для доступа по ssh вы должны использовать ssh-агент, который при необходимости предоставит ключ ssh. Это потребует генерации ключей на вашем компьютере, хранения открытого ключа на удаленном сервере и добавления закрытого ключа в соответствующее хранилище ключей.

Я нашел один способ предоставить учетные данные для соединения https в командной строке. Вам просто нужно указать полный URL для git pull и включить туда учетные данные:

git pull https://username:password@mygithost.com/my/repository

Вам не нужно, чтобы хранилище было клонировано с учетными данными, это означает, что ваши учетные данные не заканчиваются в .git/config, (Но убедитесь, что ваша оболочка не предаст вас и сохранит командную строку в файле истории.)

Непосредственно не отвечает на вопрос, но я нашел этот вопрос, когда искал способ, по сути, не вводить пароль повторно каждый раз, когда я подключаюсь к удаленному серверу.

Что ж, git позволяет кэшировать ваши учетные данные в течение ограниченного периода времени. Это настраивается в git config и эта страница объясняет это очень хорошо:

https://help.github.com/articles/caching-your-github-password-in-git/

В терминале запустите:

$ git config --global credential.helper cache
# Set git to use the credential memory cache

Чтобы настроить время ожидания кэша, вы можете сделать:

$ git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after 1 hour (setting is in seconds)

Ваши учетные данные будут храниться в памяти в течение запрошенного периода времени.

Используя учетные данные Helper командной строки варианта:

git -c credential.helper='!f() { echo "password=mysecretpassword"; }; f' fetch origin

Ниже cmd будет работать, если у нас нет @ в пароле:git pull https://username:pass@word@mygithost.com/my/repositoryЕсли у вас есть @ в пароле, замените его на%40, как показано ниже:git pull https://username:pass%40word@mygithost.com/my/repository

Я только что прошел через это, поэтому предоставил свой ответ, поскольку в конечном итоге я использовал токены доступа Gitlab, хотя некоторым могут потребоваться токены доступа Github

Я бы предпочел использовать SSH, но этому мешает ошибка gitlab. Ввод моего пароля в .netrc или URL-адрес не идеален. Диспетчер учетных данных необходимо перезапустить при перезагрузке сервера, что не идеально.

Поэтому я выбрал токен доступа, который можно использовать так: git clone https://<username>:<accessToken>@gitlab.com/ownerName/projectName.git

Маркер доступа хранится с URL-адресом, поэтому это небезопасно, но более безопасно, чем использование имени пользователя: пароля, поскольку маркер доступа может быть ограничен для определенных операций и может быть легко отозван.

После клонирования (или обновления URL-адреса вручную) все ваши запросы git будут использовать токен доступа, поскольку он хранится в URL-адресе.

Эти команды могут быть полезны, если вы хотите обновить уже клонированное репо:

      git remote show origin

git remote remove origin

git remote add origin https://<username>:<accessToken>@gitlab.com/ownerName/projectName.git

Вы можете просто использовать имя пользователя без необходимости использовать пароль, так как пароль будет предложен в git bash.

git pull https://username@github.com/username/myrepo

Я не нашел ответа на свой вопрос после поиска в Google и stackoverflow в течение некоторого времени, поэтому я хотел бы поделиться своим решением здесь.

      git config --global credential.helper "/bin/bash /git_creds.sh"
echo '#!/bin/bash' > /git_creds.sh
echo "sleep 1" >> /git_creds.sh
echo "echo username=$SERVICE_USER" >> /git_creds.sh
echo "echo password=$SERVICE_PASS" >> /git_creds.sh

# to test it
git clone https://my-scm-provider.com/project.git

Я сделал это и для Windows. Полный ответ здесь

Если вы хотите сделать это в сценарии CI/CD на Gitlab (gitlab-ci.yml). Вы могли бы использовать

git pull $CI_REPOSITORY_URL

что будет примерно так:

git pull https://gitlab-ci-token:[MASKED]@gitlab.com/gitlab-examples/ci-debug-trace.gi

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

Обратите внимание, что способ, которым git credential helper "store" будет хранить незашифрованные пароли, изменяется в Git 2.5+ (2 квартал 2014 года).
Смотрите коммит 17c7f4d от Junio ​​C Hamano ( gitster )

credential-xdg

Настроить образец " store msgstr "бэкэнд помощника по учетным данным для определения местоположения файла конфигурации XDG, если он указан.

Док сейчас скажет:

Если не указано:

  • учетные данные будут искать из ~/.git-credentials а также $XDG_CONFIG_HOME/git/credentials, а также
  • учетные данные будут написаны ~/.git-credentials если он существует, или $XDG_CONFIG_HOME/git/credentials если он существует, а первый нет.

Вы можете просто сделать это:

      eval $(ssh-agent -s)

echo "password" | ssh-add ~/.ssh/id_rsa

git pull origin master
Другие вопросы по тегам