git-使用用户名和密码将参数传递给git

时间:2019-05-25 21:54:12

标签: bash git github gitlab git-bash

我需要使用以下用户名和密码将参数传递给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 个答案:

答案 0 :(得分:1)

您在这里有几个问题应该解决。

首先,您不能使用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在本地系统上不存在。它可能在远程服务器上,但不在本地计算机上。如果获取成功,并且远程服务器包含具有适当分支名称的服务器,则您的命令应该可以使用。