本文介绍版本控制git的使用。git的使用,网络上有很多资料,笔者使用git多年,因此本文列出简单操作命令,顺便说一说使用经验。
一、Windows篇
由于嵌入式Linux使用的uboot、kernel、busybox等源码,可能会因为文件大小写,或特殊文件名称,导致在windows系统上的文件被覆盖或无法正常打开,因此,强烈建议使用linux系统来存储这些源码文件,并在linux下使用git进行版本管理。
但是,对于一些性的版本管理,如应用层程序代码、文档,强烈建议使用Windows下的git工具,git工具比较多,首推TortoiseGit,它是git命令行的封装,操作习惯类似TortoiseSVN。所有操作基于鼠标右键菜单。Windows详细教程参考文后附录。
二、Linux篇
本节介绍Linux系统下git命令的使用,以及平时遇到的问题的解决方案。
1、创建仓库
创建空仓库:
1 | git init --bare |
在已有目录中创建仓库:
1 | git init |
说明:建议使用git init
来创建,创建后的仓库,即为本地仓库,如果需要提交到远程git服务,如自建服务,第三方服务gitlab、github,则在这些服务上创建空仓库,再将本地仓库提交,之后,远程git服务上的版本内容跟本地无异,即会保留本地之前的版本内容。在不确定未来是否一定提交远程仓库的情况下,可试用本方法。
2、添加、删除、查看状态、提交
添加文件/目录命令:
1 | git add foo(文件或目录)(在命令行下,每次提交都要进行add操作,不管是新加的还是修改的) |
添加所有更新:
1 | git add -u |
提交前使用:
1 | git status |
查看状态,确保所有要提交的文件出现在:“Changes to be committed:”下面,然后提交本地仓库:
1 | git commit -m "xxxxx" |
然后提交远程仓库:
1 | git push origin master // 提交默认的master分支 |
删除:
1 | git rm xxx.c |
3、将当前修改保存到暂存区
1 | git stash save # 保存到暂存区 |
注:在多人协同开发时,stash功能非常有用,一般的流程是,如果你知道远程仓库已有提交,如通过邮件告知(本站有相关文章,搜索“电子邮件”关键字),或通过口头告知,此时,你理应先更新代码(假定前提是以远程仓库为准,而不是以你本地为准),如果直接pull代码,可能会有冲突。此时stash功能就派上用场了,在本地进行stash save
,接着git pull
更新代码,接着stash pop
,这时,还是有可能存在冲突的,但至少,不会像直接更新代码那样麻烦。各位可以尝试一下两者的区别。
独自开发时,在不同的分支之间切换,而不同的分支双有修改时,也可以使用暂存功能。
一般建议只进行一次save和pop,即执行了save,下次就要执行pop,不建议多次save。
4、设置用户名信息
注:在命令行下要先设置用户名,否则无法提交,示例:
1 | $ git commit -m "first commit" |
注:可以用git config –global user.email “” 清除
5、打标签(tag)
1 | 查看tag:git tag |
6、为某一个commit打上tag
1 | 示例:git tag v1.1 dffa062104b1a27ebb0a3881f770baed7c033a0b -m "v1.1 release" |
7、推送到远程:
1 | git push origin [tagname] |
示例:
1 | git push origin alpha1.0 |
8、提交所有的tag到远程仓库:
1 | git push origin --tags |
origin为远程仓库的名称,如果有多个,可以指定其它的仓库
9、删除远程的tag
1 | git push github :refs/tags/v1.0 |
三、心得
对于git的使用,原则上哪种方式适合自己,就使用哪一种。如前所述,像Linux内核源码,有些头文件仅使用大小写字母来区分,这种情况就不适合在Windows系统使用TortoiseGit了,只能在Linux下创建仓库。但是,对于小型项目来说,TortoiseGit更适合,包括查阅代码修改,查阅log,等等。
对于提交日志的编写,建议达到“一定合适的程度”。不能过粗略,因为自己和他人无法从日志上了解信息。也不能过细,细节应该体现于代码中。如果有bug追踪管理系统(如github),可以在日志中提供fix bug xxx
。如果项目有多个模块,最好在日志上表明模块名称,如“tools:添加mkimage”、“fb模块:新加图片居中功能”。总之,尽量做到方便自己的同时方便他人(更多的是为日后将维护代码的你自己)。
附:
更多详细内容,请参阅视频教程:《git版本控制实战》。
李迟 2017.7.9 周日