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

Bash git-使用用户和密码将参数传递给git,bash,git,github,gitlab,git-bash,Bash,Git,Github,Gitlab,Git Bash,我需要使用用户和密码将参数传递给git,如下所示 注意:例如,Wa不能使用git config--global credential.helper'cache--timeout=1800'。 注二:必须将分支机构[分支机构名称]设置为跟踪来自原点的远程分支机构[分支机构名称] #!/bin/bash USR_CREDENTIALS="https://[USER_NAME]:[PASSWORD]@[GIT_URL]/PROJECT.git" BRANCH_NAME="[BRANCH_NAME]"

我需要使用用户和密码将参数传递给git,如下所示

注意:例如,Wa不能使用
git config--global credential.helper'cache--timeout=1800'

注二:必须将分支机构
[分支机构名称]
设置为跟踪来自
原点的远程分支机构
[分支机构名称]

#!/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

我在上面的代码中做错了什么?一些解决方法?

这里有几个问题需要解决

首先,您不能使用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
它也不会获取
原点的远程跟踪分支

#!/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
其次,你不能像现在这样混合选项和非选项参数。在某些情况下,它可能会起作用,但您会发现,在某些情况下,它会断裂。除非传递配置选项(即,
git-c
),否则所有选项(即以
--
-
开头的选项)都需要位于任何非选项参数之前和子命令之后


第三,您看到的git checkout的问题意味着
origin/$BRANCH\u NAME
在本地系统上不存在。它可能在远程服务器上,但不在本地计算机上。如果提取成功,并且远程服务器包含具有适当分支名称的服务器,则命令应能正常工作。

在使用提取命令之前,您能否演示如何克隆repo?将整个repo URL传递给
git fetch
对我来说似乎很奇怪,它更像是一个
git clone
参数。只需省略
——所有的
都应该可以工作(正如错误消息所示)。我实际上不需要传递任何URL。我这样做只是因为git“强迫”我能够传递用户和密码。如果有一种方法,只有通过用户和密码,对我来说,这将是完美的!谢谢=D@bk2204I更新了更多选项。一般来说,使用凭证管理器是处理此问题的正确方法,因为它不会向系统中的每个人公开您的凭证。然而,如果你不在乎的话,还有一个选择。你的回答是互联网上唯一满足我需要的。我会更好地测试,然后给你回报。实际上,这将产生一个bash脚本,我将使用许可证在github中发布它。谢谢=D