注意: 几乎每个刚接触企业级 Git 项目(尤其是 Gerrit)的新手,都会经历这样一个困惑时刻: '我明明下载了 100 多兆,为什么文件夹是空的?是不是网络出问题了?是不是权限不够?'
场景重现
你执行了这行命令:
git clone "http://[email protected]:8089/a/XbhSystemUI"
本文解析了执行 git clone 后本地目录显示为空的原因。在企业级 Gerrit 或 Android 项目中,默认分支(如 master)通常为空或仅含文档,实际代码位于特定开发分支(如 develop-xxx)。解决方案包括使用 git branch -a 查看所有分支,并通过 git checkout 切换至有效分支,或在克隆时指定 -b 参数。文章还介绍了隐藏文件 .git 的查看方法及 Gerrit 钩子脚本的作用,帮助开发者理解分支模型与协作流程。
注意: 几乎每个刚接触企业级 Git 项目(尤其是 Gerrit)的新手,都会经历这样一个困惑时刻: '我明明下载了 100 多兆,为什么文件夹是空的?是不是网络出问题了?是不是权限不够?'
你执行了这行命令:
git clone "http://[email protected]:8089/a/XbhSystemUI"
终端显示下载完成:
Receiving objects: 100% (59686/59686), 158.29 MiB | 661.00 KiB/s, done.
然后输入:
cd XbhSystemUI ls
结果……空空如也,连个 .git 文件夹都看不见(其实它在,只是 ls 默认不显示隐藏文件)。
别担心——问题不在你,而在 Git 的'默认行为'和项目的'特殊结构'。
想象一下,公司有一个巨大的保险柜,里面存着所有版本的项目代码。这个保险柜有很多抽屉,每个抽屉代表一个分支:
master(默认抽屉)develop-5.0develop-6.1当你执行 git clone,相当于复制了整个保险柜到你本地,但只自动打开了'默认抽屉'(通常是 master)给你看。
而问题就出在这里——你们公司的'默认抽屉'(master)是空的!或者只放了一张纸条:'请去 develop-5.0 抽屉拿代码'。所以你看到的是空的,但其实其他抽屉里塞满了代码!
非常正常!尤其是在使用 Gerrit 的 Android 或嵌入式项目中。
master 上进行;比如你看到的这些:
develop-5.0 → 给 Android 5.0 设备用的develop-a311d2h-nearhub → 给某款会议平板定制的develop-gen-common → 通用功能模块这些才是工程师每天写代码的地方!
Gerrit 是 Google 开源的代码审查系统,要求每个功能/客户/平台都有独立分支,提交必须经过审核才能合入,主干保持干净稳定。
所以,'clone 后看不到代码'不是 bug,而是这类项目的标准操作流程。
进入项目目录后,运行:
git branch -a
你会看到类似这样的输出:
* master
remotes/origin/HEAD -> origin/master
remotes/origin/develop-5.0
remotes/origin/develop-6.1
remotes/origin/master ...
remotes/origin/ 的是远程分支(服务器上的抽屉);* 的是当前你打开的抽屉(现在是空的 master)。假设你想看 develop-5.0 的代码,执行:
git checkout -b develop-5.0 origin/develop-5.0
这条命令的意思是:请基于远程的 develop-5.0 抽屉,在我本地创建一个同名抽屉,并立刻打开它!
执行完再 ls:
ls
奇迹发生了!app/、build.gradle、gradle/、lib_base/……所有文件都出现了!
如果你早就知道要用 develop-5.0,可以一步到位:
git clone -b develop-5.0 http://[email protected]:8089/a/XbhSystemUI
这样克隆完成后,直接就在 develop-5.0 分支上,不需要额外切换,文件一出来就能看到。
A:.git 是隐藏文件夹。用 ls -la 就能看到。它存储了整个仓库的历史数据,即使工作目录是空的,.git 里也装着 158MB 的内容!
A:不建议!因为 master 可能受保护,且你的修改不会影响真正的开发分支。务必切换到正确的 develop-xxx 分支。
A:当然在!Git 支持随时切换:
git checkout master # 回到空的 master
git checkout develop-5.0 # 再回到有代码的分支
A:这是 Gerrit 的要求。每次提交必须带一个特殊的 ID(Change-Id),钩子脚本会自动生成它。否则你的代码无法被 Gerrit 接受。
| 步骤 | 命令 | 目的 |
|---|---|---|
| 1️⃣ 克隆仓库 | git clone <URL> | 下载整个项目(包括所有分支) |
| 2️⃣ 查看分支 | git branch -a | 找到有代码的分支(如 develop-5.0) |
| 3️⃣ 切换分支 | git checkout -b xxx origin/xxx | 让代码现身到工作目录 |
记住这句话:Git clone 下的是整个图书馆,但默认只给你打开一本空白书。你要自己去找那本写满代码的书。
你现在知道为什么 ls 是空的,为什么切换分支后代码就出现了,以及如何避免下次再踩这个坑。这不仅是 Git 的一个小技巧,更是理解分支模型和协作流程的关键一步。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online