本文介绍版本控制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
2
git add foo(文件或目录)(在命令行下,每次提交都要进行add操作,不管是新加的还是修改的)
git add .(新加文件或目录——当前目录所有的文件)
添加所有更新:
1
git add -u
提交前使用:
1
git status
查看状态,确保所有要提交的文件出现在:“Changes to be committed:”下面,然后提交本地仓库:
1
git commit -m "xxxxx"
然后提交远程仓库:
1
2
3
git push origin master // 提交默认的master分支
或
git push --all
删除:
1
git rm xxx.c
3、将当前修改保存到暂存区
1
2
3
git stash save # 保存到暂存区
git stash list # 查看暂存区列表
git stash pop # 弹出暂存区
注:在多人协同开发时,stash功能非常有用,一般的流程是,如果你知道远程仓库已有提交,如通过邮件告知(本站有相关文章,搜索“电子邮件”关键字),或通过口头告知,此时,你理应先更新代码(假定前提是以远程仓库为准,而不是以你本地为准),如果直接pull代码,可能会有冲突。此时stash功能就派上用场了,在本地进行
stash save
,接着
git pull
更新代码,接着
stash pop
,这时,还是有可能存在冲突的,但至少,不会像直接更新代码那样麻烦。各位可以尝试一下两者的区别。
独自开发时,在不同的分支之间切换,而不同的分支双有修改时,也可以使用暂存功能。
一般建议只进行一次save和pop,即执行了save,下次就要执行pop,不建议多次save。
4、设置用户名信息
注:在命令行下要先设置用户名,否则无法提交,示例:
1
2
3
4
5
6
7
8
9
10
11
$ git commit -m "first commit"
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
注:可以用git config --global user.email “” 清除
5、打标签(tag)
1
2
3
查看tag:git tag
添加tag:git tag -a alpha1.0 -m "XXX"
删除tag:git tag -d tag-name
6、为某一个commit打上tag
1
示例:git tag v1.1 dffa062104b1a27ebb0a3881f770baed7c033a0b -m "v1.1 release"
7、推送到远程:
1
git push origin [tagname]
示例:
1
2
3
git push origin alpha1.0
git push mygit master // mygit仓库
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 周日