windows下repo sync error: cannot initialize work tree

1. 问题描述

下载Android源代码时,出现这个错误

 


2. 问题分析

2.1 查看哪里出了问题

从log来看,.repo/repo/project.py是要关注的地方,可以定位到脚本:
raise GitError("cannot initialize work tree")
其所在的函数为_InitWorkTree

_InitWorkTree完整的代码如下:


 

但是此处并不能给我们什么有效信息,所以我们要进一步继续分析

2.2 repo --trace sync

用 repo --trace sync -cdf 将repo的所有动作详细输出(这个过程可能会很长,需要我们耐心等待),会发现在这里出错导致:

 

至此,我们就定位到了问题。

2.3添加打印信息

当然,在不熟悉repo命令的时候,我们也可以添加log来了解当前卡在了哪里。为了找到当前出错时,git正在处理哪个目录,我在_InitWorkTree
函数中加了2句log信息:

 

 

打印出来的log如下:

 

可以看出当前是在处理E:\LocalProject\Oreo\external\kmod时出了问题。但是由于log有限,我们其实并不能真正的了解到当前发生了什么。


3.解决方案

前面的log是说file无法创建。原因是是要创建的文件名字叫usb:btusb,这种命名是明显违反Windows命名规则的。所以其实是无解的。
所以我打算先绕过这个问题,先把源码的其他部分下载下来,对于这个问题,以后再解决。既然这个项目有问题,那我就先不下载了,不能因小失大嘛。
打开.repo/manifest/default.xml

 

在网上搜了一圈,好像很多网友在windows下下载代码都遇到了"cannot initialize work tree"的问题。连Microsoft提供的win10下linux子系统的repo都有问题(最后参考链接里边有该问题的解决方案)。也是路径名称的问题。有兴趣的网友可以自己爬楼研究下。
Microsoft:https://github.com/Microsoft/...

我这次下载中还遇到了两次"cannot initialize work tree"这样的问题

下载“platform/libcore”出错

 

“test?.properties”这个也是违反了Windows文件命名问题

下载“external/libunwind”出错

 

这个是文件夹命名为“aux”出错,“aux”是Windows设备名文件夹。DOS上使用AUX,是auxiliary device的缩写,辅助设备,在DOS系统手册有声明这是系统标识符的。AUX默认是异步端口的流名字,通常与Console连在一起,属于标准命名设备,所以不允许你创建使用了系统保留名字的文件,因为文件也属于流设备。

如果大家想体验下这个问题,可以单独下载这三个项目试试 git clone url
下载单个项目的方法 https://segmentfault.com/a/11...

 

 

 


5. 备注

我下载的是android_8.1.0_r17版本的代码:
repo init -u https://aosp.tuna.tsinghua.ed... -b android_8.1.0_r1

repo的trace选项的作用
You can trace what really happens with repo

系统
Windows7

参考链接

repo和Git的关系 https://blog.csdn.net/qugenam...
WSL https://github.com/Microsoft/...
FixDownloadAnrdoid https://github.com/NyaSik/Fix...
repo sync error: cannot initialize work tree https://blog.csdn.net/ly89070...
出现error: unable to create file tests/P_str_escape/str\escape.rs的解决办法 https://blog.csdn.net/u013553...
不能在 win7 下建立命为 aux 的文件夹? http://bbs.bccn.net/m.thread....

作者: RESSRC

个人资源站

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据