代码之家  ›  专栏  ›  技术社区  ›  Eduardo Lucio

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

  •  0
  • Eduardo Lucio  · 技术社区  · 7 年前

    我需要使用用户和密码向Git传递参数,如下面的示例所示。

    注一: WA不能使用 git config --global credential.helper 'cache --timeout=1800' 例如。
    注二: 分支机构 [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 回复  |  直到 7 年前
        1
  •  1
  •   bk2204    7 年前

    这里有几个问题需要解决。

    首先,你不能使用 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"
    

    如果您只想获取一个遥控器,那么您可以执行与上面相同的操作,只需替换 ——所有 与URL对应的远程服务器的名称。

    注意, -C 这里的选项必须在 fetch 子命令。

    您也可以通过运行以下命令来完成此操作,但请注意,如果您执行此操作,系统上的任何人和访问repo的任何人都可以以纯文本形式看到您的密码:

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

    它也不会获取远程跟踪分支 origin .

    第二,不能像现在这样混合选项和非选项参数。在某些情况下,它可能会正常工作,但您会发现,在某些边缘情况下,它会被破坏。除非您正在传递配置选项(即, git -c ,所有选项(即,从 -- - )需要出现在任何非选项参数之前和子命令之后。

    第三,你看到的问题 git checkout 意思是说 origin/$BRANCH_NAME 本地系统上不存在。它可能在远程服务器上,但不在本地计算机上。如果获取成功,并且远程服务器包含具有适当分支名称的服务器,则命令应该可以工作。

    推荐文章