git - передает аргументы git с помощью имени пользователя и пароля - PullRequest
1 голос
/ 26 мая 2019

Мне нужно передать аргументы git с пользователем и паролем, как показано ниже.

ПРИМЕЧАНИЕ I: Wa не может использовать git config --global credential.helper 'cache --timeout=1800', например.
ПРИМЕЧАНИЕ II: Ветвь [BRANCH_NAME] должна быть настроена на отслеживание удаленной ветки [BRANCH_NAME] от origin.

#!/bin/bash

USR_CREDENTIALS="https://[USER_NAME]:[PASSWORD]@[GIT_URL]/PROJECT.git"
BRANCH_NAME="[BRANCH_NAME]"
git fetch $USR_CREDENTIALS --all --prune

# ERROR: fatal: fetch --all does not take a repository argument

git checkout -b $BRANCH_NAME origin/$BRANCH_NAME

# ERROR: fatal: 'origin/[BRANCH_NAME]' is not a commit and a branch '[BRANCH_NAME]' cannot be created from it

Что я делаю неправильно в приведенном выше коде?Какой-то обходной путь?

1 Ответ

1 голос
/ 26 мая 2019

У вас есть пара вопросов, которые необходимо решить.

Во-первых, вы не можете использовать git fetch --all и указать пульт. --all означает выборку всех известных пультов, что не имеет смысла, когда вы указываете только один пульт в командной строке. Если вам нужно передать учетные данные в Git для существующего удаленного устройства, запишите свой URL-адрес во временный файл, а затем используйте параметр -c для передачи помощника по учетным данным в командной строке, например:

DIR=$(mktemp -d -t "$TMP/tmp.XXXXXX")
echo "$USR_CREDENTIALS" >$DIR/creds
git -c credential.helper="store --file=$DIR/creds" fetch --all --prune
rm -fr "$DIR"

Если вы хотите выбрать только один пульт, вы можете сделать то же самое, что и выше, просто заменив --all на имя пульта, соответствующее URL.

Обратите внимание, что опция -c здесь должна предшествовать подкоманде fetch.

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

git fetch "$USR_CREDENTIALS" "$BRANCH_NAME"
git checkout -b "$BRANCH_NAME" FETCH_HEAD

Также не будут извлекаться ветви удаленного отслеживания для origin.

Во-вторых, вы не можете смешивать параметры и аргументы, не являющиеся параметрами, как вы делаете. В некоторых случаях это может сработать, но вы обнаружите, что есть крайние случаи, когда он сломан. Если вы не передаете параметры конфигурации (т. Е. git -c), все параметры (т. Е. Те вещи, которые начинаются с -- и -) должны находиться перед любыми необязательными аргументами и после подкоманды.

В-третьих, проблема, с которой вы сталкиваетесь git checkout, означает, что origin/$BRANCH_NAME не существует в локальной системе. Возможно, это на удаленном сервере, но не на локальной машине. Если ваша выборка прошла успешно, а на удаленном сервере есть сервер с соответствующим именем ветви, ваша команда должна работать.

...