从代码托管平台获取项目时,Download ZIP 与 git clone 都能取得当前文件,但得到的对象不同:ZIP 是某一时刻的文件快照;克隆得到工作树以及 .git/ 中的版本数据库和远程仓库信息。
能力差异
| 获取方式 | 当前文件 | 提交历史 | 分支与标签 | 跟踪本地改动 | 获取上游更新 |
|---|---|---|---|---|---|
| Download ZIP | 有 | 无 | 无 | 无 | 需要重新下载或自行比较 |
git clone |
有 | 有 | 有 | 有 | 可通过 fetch/pull 等 Git 流程更新 |
因此,临时查看少量源码时 ZIP 足够;要长期学习、修改、对照版本或跟踪上游时,应使用 git clone。
克隆后可以回答的问题
.git/ 使本地目录成为 Git 仓库,因此可以查询:
- 当前分支:
git branch --show-current - 当前版本或最近提交:
git log -1 --oneline - 上游地址:
git remote -v - 本地修改:
git status、git diff - 分支和标签:
git branch -a、git tag
分支通常承载并行开发或不同兼容路线;标签通常标记值得复现的发布版本。二者都比“下载日期”更适合作为可复现实验的版本依据。
学习上游项目的安全做法
研究开源项目时,先记录仓库地址、分支和 commit,再开始修改。git diff 可以持续显示自己相对基线改了什么,也能帮助判断故障来自上游代码还是本地实验。
直接在官方克隆中实验虽可追踪,但容易让后续更新和教学改动混在一起。较长期的改造可使用自己的分支、fork,或单独建立学习工程,并只借鉴架构与必要资源。使用代码和资源时仍需遵守项目许可证;“GitHub 上可见”不等于可以声称为自己的原创。
恢复文件或切换版本会改变工作树,执行前应先用 git status 和 git diff 确认目标,避免覆盖未提交修改。
与工程目录的区别
Git 仓库只是版本管理边界,不等于语言或框架的工程边界。一个 Git 仓库可以包含多个 ROS 2 package,也可以位于某个 ROS 2 workspace 的 src/ 中。参见 ROS 2 工作空间、仓库与软件包边界。
本地与远程的基本语义
commit为已选变更创建本地版本记录,不等于已上传。push将本地分支的新提交发送到远程。pull通常获取远程更新并整合到当前分支;执行前应检查未提交修改。- 功能分支可隔离实验性改动,成熟后再审查、合并到稳定分支。
公开与私有是访问权限选择,不是项目质量等级。含隐私、保密内容或受第三方授权限制的材料应保持私有,或只公开获授权的摘要。密钥和令牌即使后续从历史删除也可能已泄露,应在提交前用 .gitignore、环境变量和秘密管理机制排除。