问题描述
这个问题出现的情况是,子模块的url使用http方式获取的情况下,在clone项目的时候,使用–recursive参数初始化子模块或者git submodule update的时候会直接出现以下报错:
bash: /dev/tty: No such device or address
出现原因
百度了很久,没有看到类似的问题,最后在github上找到了一个issue让我了解了这个问题出现的原因,是因为没有输入用户名和密码,可是奇怪的是,下载子模块的代码的时候并没有直接弹出输入用户名和密码的地方,而是直接报错,看issue中的回答,似乎是因为系统认为没有console可以输入密码(待考证,待研究是否可以跳出输入密码框)
解决方法
我的解决方法是在本地永久缓存使用http方式获取代码的用户名和密码。
-
找到%home%路径
一般是路径是C:\Users\windows的用户名,我是直接定位到.gitconfig文件所在的目录了。 -
建立.git-credentials
在window下不能直接建立以.
开头的文件,所以我使用git bash窗口,直接touch .git-credentials,如果没有权限的话,可以设置权限,或者去其它盘建好文件再拷贝过来。
文件内容:
http://你的用户名:你的密码@github.com
代表的意思是通过设置好的用户名和密码去http://github.com获取代码。 -
运行git config --global credential helper store
“store” 模式会将凭证用明文的形式存放在磁盘中,并且永不过期。 -
查看.gitconfig文件
多出一段
[credential]
helper = store
- 重新git clone代码(https链接)
git bash重新clone代码,发现不需要输入密码了。