嵌入式Linux入门4:版本控制git的使用

本文介绍版本控制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 周日