我试图在脚本中使用git命令,我希望git在任何情况下都能失败,这样我就可以判断用户在请求中提供的错误.

git的当前行为如下:

  • 该地址不是git回购,它失败了.
  • 用户空间不存在,它需要用户名/密码
  • 回购不存在或可能是私有的,它要求提供用户名/密码
  • 如果用户名/密码/令牌错误,它会要求输入用户名/密码.

但这不仅仅是一个简单的"询问凭据"函数,而是git生成了许多其他进程,所有进程都具有不同的进程ID,并且出于某种原因,在不通知我的生成程序脚本的情况下杀死了原始生成的进程.(Node.js的spawn)

起初,如果主生成进程没有向其stdout写入响应,我try 使用超时来杀死它,但由于不再有具有该ID的进程,我无法进一步判断错误.除非可以从公共api获取提供的地址,否则我不得不放弃克隆回购协议的try .

我所有的搜索结果都在硬币的另一面,"让它来询问密码".我想知道我是否没有为自己的目的想出正确的搜索词,或者只是因为没有这样的方法.

如果我错过了一面旗帜,或者其他什么方法,请告诉我.

PS:我犹豫了一下,但我添加了 node .js标记,但这在任何可能产生子进程的语言中都可能是一个问题.

推荐答案

如果您想避免Git提示输入凭据,可以设置GIT_TERMINAL_PROMPT=0.这将阻止Git本身使用凭证助手进行提示或发出任何其他终端请求,但不会阻止它生成的其他工具(如OpenSSH)进行提示.这是不可能的.

因此,如果您希望从大多数主要托管站点进行克隆,最好使用HTTPS URL,因为在这种情况下,不使用OpenSSH,所有身份验证提示都由Git处理.在这种情况下,如果需要身份验证,它将失败.

请注意,阻止终端提示并不会阻止其他凭据管理器打开窗口等.您需要通过调用Git(如git -c credential.helper= clone)来清除所有凭据助手,并确保GIT_ASKPASSSSH_ASKPASS环境变量都未设置.

Node.js相关问答推荐

未显示NPM版本

验证器功能在mongoose 中不起作用

使用 Google Drive API 按文件夹 ID 检索文件夹的内容

如何在nodejs中打印pdf

Node fetch 实现似乎与 Deno 和 Bun 不同,导致网站没有返回响应?

Indexeddb 获取所有不同于特定值的记录

如何使用 NodeJS 加密模块将 ECDH 密钥转换为 PEM 格式

在 nodejs 中使用 multer 上传文件返回未定义的 req.file 和空的 req.body

如何更新 MongoDB 中对象数组中的键?

如何从 github 编译第三方扩展?

Firestore promise 在退货前等待产品详细信息

如何使动态私有IP地址静态?

使用 WebSockets 有服务器成本吗?

判断一个数组中的每个元素是否都在第二个数组中

如何在 NodeJs 中下载和解压缩内存中的 zip 文件?

gyp WARN EACCES 用户root没有访问开发目录的权限

未在 Windows 8.1 上构建的 node 包 - 缺少 Microsoft.Cpp.Default.props

如何设置 useMongoClient (Mongoose 4.11.0)?

expressjs app.VERB 调用中的 next() 和 next('route') 有什么区别?

Firestore:多个条件 where 子句