У вас есть пара вопросов, которые необходимо решить.
Во-первых, вы не можете использовать 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
не существует в локальной системе. Возможно, это на удаленном сервере, но не на локальной машине. Если ваша выборка прошла успешно, а на удаленном сервере есть сервер с соответствующим именем ветви, ваша команда должна работать.