2005年,Linus Torvalds(Linux内核之父)在非常短的时间内开发出了Git,Git是一个“分布式版本管理工具”,在git诞生之前,Linus Torvalds使用BitKeeper进行版本管理,BitKeeper是一个闭源的商业软件,这一年,一位Linux开发成员Andrew(Samba协议之父)写了一个可以连接BitKeeper仓库的外挂,因此BitMover公司(BitKeeper持有者)认为他反编译了BitKeeper于是决定中止Linux免费使用BitKeeper的授权,最终Linux团队与BitMover磋商无果,Linus Torvalds决定自己开发版本管理系统。
十天后,git诞生了
Linus Torvalds认为健壮的版本管理系统应当具有以下三个特性:
- 可靠性(reliable)
- 高效(high-performance)
- 分布式(distributed)
对于所有的数据都会被计算成一个十六进制散列值被用作相关对象的引用及日后恢复数据时所需的键值,由于通过散列值来访问数据所以速度非常的快,体现了其高效性,相同的文件内容只需存储一次即可,且版本也可以离线生成,可以满足在没有中心服务器的情况下对代码进行分布式管理,不用担心会因版本问题而产生冲突。
一些基本命令
命令 | 作用 | 说明 |
git init | 创建版本库 | git init命令会在所在目录中创建一个名为.git的隐藏目录,并在其中创建一个版本库,但在Windows资源管理器或Mac Finder中可能是不可见的 |
git add | 添加 | git add命令用来确定哪些文件在下次提交中被添加,利用git add . 可以将当前目录下所有的文件添加 |
git commit | 提交 | git commit命令将修改传送到版本库中,并赋予该提交一个散列值以便标识这次新提交 |
git status | 检查状态 | git status命令会显示版本库中已添加文件的跟踪状态 |
git diff | 检查不同 | git diff命令可以用来显示每个被修改的行 |
git log | 显示历史 | git log命令可用来显示项目的历史,所有提交会按照时间顺序降序罗列出来 |
git clone | 克隆版本库 | git clone命令可用来创建一个拥有所有原始信息与整个项目的历史信息的克隆体 |
git pull | 取回修改 | git pull命令从版本库中取回新的修改,并将它们与克隆体中的本地修改进行比对,并在工作区合并两边修改,合并过程中可能会带来冲突,一旦遇到这种情况,Git就不能进行版本化合并了,只能通过手动清理一些文件再确认要提交哪些修改,pull命令只能在克隆体中发生作用,因为克隆体中有默认的原版本库的链接 |
git push | 上载修改 | git push命令会向共享版本库传送提交后的结果,与pull一样需要指定目标版本库的路径及其分支 |
git branch | 显示分支 | git branch命令(不带选项)可以列出所有的分支,其中带(*)凸显出当前活跃分支 |
git checkout | 改变分支 | git checkout命令来改变活跃分支,另外用git checkout -b 来新建并切换分支 用git checkout -d来删除分支 |
一个对于可视化Git分支的热门项目
learnGitBranching
learnGitBranching是一个可视化交互式Git分支项目,有一些列关卡,这个项目已经创建了7年之久了,可以作为玩具加快理解Git
https://github.com/pcottle/learnGitBranching
另外在国内经常会发现git clone速度实在是感人,究其原因为github.global.ssl.fastly.net域名被限制了,只要找到这个域名对应的ip地址,然后在hosts文件中加上ip->域名的映射,刷新DNS缓存即可
查看域名对应的ip地址,并修改hosts文件,随即刷新DNS
#查看
nslookup github.global.ssl.fastly.Net
#Windows上的hosts文件路径在
#C:\Windows\System32\drivers\etc\hosts
#Linux的hosts文件在/etc/hosts中
#Mac也在/etc/hosts中
sudo vi /etc/hosts
#在hosts文件尾部添加两行
github.com 13.229.188.59
github.global.ssl.fastly.Net 151.101.229.194
#刷新DNS缓存
#Linux
sudo systemctl restart network
#Windows
ipconfig / flushdns
#Mac
sudo killall -HUP mDNSResponder