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

嵌入式Linux入门4:版本控制git的使用相关推荐

  1. 嵌入式Linux入门经典笔记

    史上最牛的Linux内核学习方法论     点击下载 我的arm_linux移植笔记     点击下载 S3C2440完全开发流程     点击下载 Linux系统命令及其使用详解完整版     点击 ...

  2. 分享:嵌入式Linux入门学习指导

    很多嵌入式linux初学者对嵌入式linux学习十分迷茫,不知道该怎么一步步学习,嵌入式linux学习方法,学习的流程步骤以及学习过程中需要看哪些好的书籍.下面凌阳教育嵌入式培训网就为大家整理的嵌入式 ...

  3. 嵌入式Linux入门13:应用层调试

    本文主要介绍应用程序的调试方法. 很多网友问我怎么调试内核,怎么查找代码bug.其实我的方法不多.一是靠经验,掉入的坑多了,做笔记回顾,自然就有了经验.二是靠printf/printk大法跟踪.三是利 ...

  4. 嵌入式 Linux 入门 环境篇(二、安装虚拟机 — 体验 Ubuntu 22.04)

    嵌入式 Linux入门 环境篇第二课,正好换了新电脑,更新 Ubuntu 虚拟机的安装, 体验一下 Ubuntu 22.04 ...... by 矜辰所致 前言 因为以前的电脑虚拟机环境我都配置好了, ...

  5. 嵌入式linux入门学习规划

    嵌入式linux入门学习规划 如何理解嵌入式系统 ◆嵌入式系统是面向用户.面向产品.面向应用的,它必须与具体应用相结合才会具有生命力.才更具有优势.因此可以这样理解上述三个面向的含义,即嵌入式系统是与 ...

  6. 嵌入式linux怎么入门,嵌入式linux入门六步走

    学习嵌入式linux怎样才能快速入门?这是很多出来华清远见参加嵌入式培训学员爱问的问题,这里做一个总结供大家参考,嵌入式linux入门可以概括为六步走: 第一步:学习基本的裸机编程 对于学硬件的人而言 ...

  7. 嵌入式linux入门3-3-套接字

    个人博客对应地址:嵌入式linux入门3-3-套接字 socket主要函数 创建套接字 socket,我们一般翻译为套接字,其是一种通讯接口,允许位于不同计算机之间的线程通过网络进行通讯,我们可以使用 ...

  8. 嵌入式 Linux 入门 环境篇(三、开发板和 PC 的网络互通)

    嵌入式 Linux入门 环境篇第三课,开发板与PC的网络配置, 我们要实现 windows.ubuntu 和开发板三者的互通. ...... by 矜辰所致 前言 在环境篇前面的文章我们通过终端工具使 ...

  9. 嵌入式 Linux 入门(十、Linux 下的 C 编程)

    嵌入式 Linux 入门第十课,聊聊 linux 下的 C 编程...... 矜辰所致 插一句,问题讨论群在文末的推广,以后大家提问可以在群中,即便我不在也能看到历史记录. 目录 前言 一.C 语言编 ...

  10. 嵌入式 Linux 入门(二、Linux 文件系统、文件类型及权限管理)

    嵌入式 Linux入 门第二课, linux 文件系统.文件类型及权限管理. ...... 矜辰所致 目录 前言 一.Linux 文件属性 1.1 Linux 文件类型 1.2 Linux 文件权限及 ...

最新文章

  1. 模拟简单计算器及比较大小
  2. 笔记-计算机网络基础-计算机网络分类
  3. Windows在当前目录快速打开cmd的方法
  4. OpenCV使用dnn重新着色灰度图像的实例(附完整代码)
  5. 导入win32_为什么DLL在导入项没有成功解析时会加载失败?
  6. UIView 动画进阶
  7. 武汉科技大学计算机转专业吗,武汉科技大学普通本科生专业选择与转专业管理办法...
  8. Android Studio-------添加按钮
  9. 计算机科学竞赛加拿大,滑铁卢大学计算机科学与数学竞赛最新考试时间!
  10. 全面理解Unity加载和内存管理
  11. 【漏洞复现】PHPmyadmin 4.8.1后台Getshell新姿势
  12. MyBatis3整合Spring3、SpringMVC3
  13. 极客大学产品经理训练营:需求评审 第13课总结
  14. C#键盘钩子之局部钩子和全局钩子
  15. Bootstrap框架----标签Tag输入用法--Bootstrap-tagsinput
  16. windows机器硬盘不能超过2T详解及图文破解方法
  17. u 盘安装linux系统,CentOS 7 系统安装之 U 盘安装法
  18. 揭开全景相机的创业真相
  19. 如何将.md文件转换为pdf
  20. FTP如何用计算机名,ftp服务器使用虚拟主机名(怎么设置ftp服务器)

热门文章

  1. 多叉树的前序遍历_多叉树的创建和遍历(为Trie树做准备)
  2. 运算放大器基本公式_还在被三阶/四阶/运算放大器滤波器PLL这些概念困扰?这篇文章帮你搞懂它...
  3. vs 未能找到符号_意大利甲级赛事分析:尤文图斯vs卡利亚里
  4. 知网又火了!续订费近千万且连年上涨 中科院:不堪重负 停用
  5. 荣耀Magic4性能体验超苹果再次实锤!非官方游戏性能对比出炉
  6. 三星Galaxy S22系列发布会准确时间曝光:2月9日正式揭晓
  7. 源于零售业,如何赋能零售业?亚马逊云科技再发布四项新服务
  8. 特斯拉CEO马斯克:可能明年3月左右在中国推出Model S Plaid
  9. 2021北京民营企业百强榜单发布 美团、水滴等公司入选
  10. 苹果也“翻车”,服务器大面积宕机三小时