repo同步trusty代码后.git为符号链接、git log为空的原因
问题相关现象
克隆Trusty代码的常规操作步骤:
mkdir trusty; cd trusty repo init -u https://android.googlesource.com/trusty/manifest -b master repo sync -c
操作完成后执行git log返回空结果,排查发现仓库下每个Git项目的.git文件夹不是实体目录,而是指向.repo目录下对应项目路径的符号链接,示例如下:
cd $(Repo_root)/external/linux ls # 输出包含如下软链接条目:.git -> ../../.repo/projects/external/linux.git/
原因说明
.git为符号链接是Repo工具的默认正常设计,不属于故障
- Repo是安卓生态(含Trusty项目)通用的多Git仓库管理工具,v1.13及之后版本默认开启工作树存储优化模式:所有子项目的Git对象库、引用记录、配置等核心元数据,全部统一存放在仓库根目录的
.repo/projects/路径下集中管理,避免多工作树、多分支场景下重复存储相同Git对象,可大幅降低同步后的磁盘占用。工作区每个子项目路径下仅存放实际源码文件,.git通过软链接指向.repo下对应的真实仓库路径,配合Git的工作树配置,即可在子项目路径下正常执行各类Git命令。 - 执行
git log返回空结果通常有两类原因:- 在Repo根目录直接执行
git log:Repo根目录本身不属于任何Git工作树,没有对应的Git仓库上下文,无法正常读取提交记录。需要先进入具体子项目目录再执行Git命令,或通过repo forall批量对所有子项目执行Git操作。 - 进入子项目目录后执行
git log仍为空:repo sync附加的-c是--current-branch参数缩写,同步时仅拉取manifest指定分支的提交,不会拉取其他分支内容,部分版本默认配置下仅拉取最新提交快照、不携带全量历史。可去掉-c参数重新同步,或在对应子项目下执行git fetch --unshallow拉取全量提交历史后,即可正常查看日志。
- 在Repo根目录直接执行
内容的提问来源于stack exchange,提问作者Padmanabha V
相关产品推荐
相关产品推荐

