源代码管理
源代码如何进行管理,是一个工程性的考量。通过互联网资料的查找,自始至今,也诞生了很多工具和方法。我个人比较喜欢纯依赖 Git 对项目源码进行管理。但工作当中,不免接触各种项目,了解其源代码的管理方式,可以让我们对项目更加游刃有余。
Repo
Repo 起源自 Android 项目,在 Android 这个开源项目中存在700个左右的 Git 仓库,当你下载 Android 源码时,如果手动同步这么多的 Git 仓库,必然很累又不可靠,所以即使没有 Repo,你也可能会想着通过一个脚本工具来同步 Android 的 Git 仓库,只不过现在 Google 帮你写了这个脚本,并且还加了很多其他的功能,你可以直接使用。
Repo 不是用于替代 Git,而是依赖于 Git 的工具,对仓库真正的操作还是通过 Git,只不过是通过 Repo 调用 Git 对每个仓库来进行操作。
Repo 的具体使用可以参考 Gitee 的 Repo 工具使用介绍 这篇文章。
SVN
拉取代码(将http://172.16.0.252/svn/DanKiV5/branches/B023_BJ_ALG拉取至B023_BJ_ALG 目录下):
svn checkout http://172.16.0.252/svn/DanKiV5/branches/B023_BJ_ALG B023_BJ_ALG
查看工作区状态
svn status
撤销工作区某个文件的修改
svn revert source/2.Software/src/netconfig/src/zNetStateThread.cpp
输出:
Reverted 'source/2.Software/src/netconfig/src/zNetStateThread.cpp'
查看某次提交修改的文件
svn diff --summarize -c r1015 # r1015 为某次提交号
输出:
M source/2.Software/tools/hi3516dv500/start-app.sh
M source/2.Software/config/DK-FSAN-HI3516DV500/conf.txt
回退本地代码至某次提交
用于在本地查看某次提交的代码。
svn update -r 1014 # 1015 为某次提交号
查看差异 vimdiff
创建 vimdiff.sh 文件:
#!/bin/sh
# 去掉前5个参数
shift 5
# 使用vimdiff比较
vimdiff "$@"
然后编辑 ~/.subversion/config 文件,在 [helpers] 找到 diff-cmd,取消注释并修改为:
[helpers]
# 这里需要使用绝对路径
diff-cmd = /home/amass/.subversion/vimdiff.sh
然后我们使用 svn diff 文件路径 就可以通过 vim 查看比对差异了。使用 :qall 退出vimdiff。
git svn
使用git-svn将源Subversion库转换为本地Git存储库,后续的本地操作就完全基于 git,只有在需要跟远程 svn 交互时,才需要使用 git svn xxx 命令。
安装:
sudo apt install git-svn
从 SVN 仓库拉取代码:
git svn clone http://172.16.0.252/svn/DanKiV5/branches/B023_BJ_ALG
从 SVN 上获取最新代码:
git svn rebase
这个其实类似于 git 里面的
git pull --rebase。所以如果有发生冲突,同等于在rebase的时候发生冲突要处理的方式一样。
把 git 的 commit 推上 svn:
git svn dcommit