当找不到远程存储库时,阻止git pull从github请求用户名密码

时间:2015-03-17 16:33:07

标签: git github https http-status-code-404

我查看了有关为'git pull'配置用户名/密码的所有问题,但是当远程存储库为404时,没有解决问题。

我过去曾经gitub从github克隆了一个存储库。无论出于何种原因,存储库所有者已删除了repo,并且git pull失败。在它失败之前,git pull会询问用户名和密码。

这是因为我有一个克隆的github git repos目录,我正在尝试通过进入每个目录的shell脚本更新它们并执行'git pull'。

$ git pull
ksshaskpass: cannot connect to X server 
error: unable to read askpass response from '/usr/lib/ssh/ssh-askpass'
Username for 'https://github.com': 
ksshaskpass: cannot connect to X server 
error: unable to read askpass response from '/usr/lib/ssh/ssh-askpass'
Password for 'https://github.com': 
remote: Repository not found.
fatal: Authentication failed for 'https://github.com/[ ... ]

3 个答案:

答案 0 :(得分:0)

我创建此脚本以在执行拉取之前测试URL。 更新时,我不会再收到提示输入用户名/密码的信息。

#!/bin/bash

find . -type f | egrep '\.git/config' | while read fn ; do \
    dn=${fn%/.git/config} 
    url=$( git -C $dn remote show -n origin | awk '/Fetch URL: / { print $3 }' ) 
    wiki=${url%.wiki.git}
    if [ "$url" != "$wiki" ]; then
        url="${wiki}/wiki"
    fi
    url=$( echo $url | sed -e 's/git:/https:/' )
    wget -O /dev/null $url > /dev/null 2>&1  
    if [ 0 != $? ]; then 
        echo $dn $url 
    else 
        pushd $dn
        git pull
        popd
    fi
done

答案 1 :(得分:0)

我发现自己处于类似情况,我的解决方案是通过以下方式为Git设置虚假的凭据提供程序:

export GIT_ASKPASS="/bin/true"

这会导致pull / clone立即失败,而不是提示输入用户名和密码。这有点像黑客,但我找不到任何其他简单的方法来阻止提示。

答案 2 :(得分:0)

就我而言,我在git fetch期间遇到了针对GitHub上不存在的存储库的提示。

尽管输入和输出已通过管道传输,但这些提示仍然存在(很可能git在内部尝试/dev/tty

我通过将core.askPass配置为虚拟值来调整了命令(我选择了/bin/true,它会退出零并且不产生任何输出)

这是我最后得到的命令:

git -c core.askPass=/bin/true fetch origin ...