如果给所有软件列出一个排行榜的话,那么Git定会名列前茅。Git对于代码项目的管理是具有划时代意义的,向Linus致敬,不但写出了可以与Windows争锋的Linux系统,还设计实现了如此强大的版本管理工具。
当我了解Git后,真后悔没有早一点学习它,那样写论文就不用反反复复的修修改改了,能省去多少无用功呀。
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
Git is easy to learn and has a tiny footprint with lightning fast performance. It outclasses SCM tools like Subversion, CVS, Perforce, and ClearCase with features like cheap local branching, convenient staging areas, and multiple workflows.
Git 和SVN
Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。
Git 与 SVN 区别点:
- Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
- Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
- Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
- Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
git 初始化
任意选择一个文件夹,本文选择新建一个文件夹。使用 git init创建一个空的 Git 仓库或重新初始化一个已存在的仓库。
Git本地操作
Git最基本的操作
图中的index指的稍后所说的暂存区,Objects值得稍后所说的对象区。
新建文件dota.txt。输入内容:dota中最强的英雄是影魔。
- git status查看状态。此时文件在工作区。
- git add 通过这个命令将文件放入暂存区。
- git commit 通过这个命令将文件放入对象区。
- git push 通过这个命令将文件push到远端的服务器,比如github。
- 在远端的服务器查看提交的文件。
Git进阶操作-rebase
官方解释的比较繁琐,这里只说比较通用的用法。以某一个commit作为基准进行rebase。下面看具体的例子。
继续上文中的例子,加入我又玩了一段时间dota,发现影魔不是最厉害的,于是修改文件为:dota中最强的英雄是电魂。通过上面的操作将修改的文件放入对象区。
又玩了一段时间,发现电魂不是最厉害的,于是修改文件为:dota中最强的英雄是卡尔。类似操作,放入对象区。
继续dota,发现电魂很菜,不想要这个commit了,这个时候就可以rebase了。这里只是演示,实际工作中可能在不知道的情况下,忽然又插入了一个commit,这个时候又需要以新的commit作为基准,那么rebase就是不得不做的事情了。
- git log-3 查看最近的3个commit。
- git rebase-i0d3023a 使用第一个commit作为基准。
- 因为要删除电魂的commit,所以将pick修改位d,如果其他需求根据需要修改。
- wq 保存,有冲突。
- 修改冲突文件。修改后的内容是:dota中最强的英雄是卡尔
- git add.
- git rebase--continue
- git log查看修改结果,发现电魂的commit已经被成功移除了。