1.git简介
本教程只会让你成为Git用户,不会让你成为Git专家。很多Git命令只有那些专家才明白(事实上我也不明白,因为我不是Git专家),但我保证这些命令可能你一辈子都不会用到。
既然Git是一个工具,就没必要把时间浪费在那些“高级”但几乎永远不会用到的命令上。一旦你真的非用不可了,到时候再自行Google或者请教专家也未迟。
git简介
原始版本控制:
用Word写长篇大论:
1.当想删除一个段落,又怕将来想恢复找不回来怎么办?
办法:先把当前文件“另存为”一个新的Word文件,再接着改,改到一定程度,再“另存为”一个新文件……
缺点:想找回被删除的文字,但是已经记不清删除前保存在哪个文件里了,只好一个一个文件去找。
2.有些部分需要你的同事帮助填写,于是你把文件Copy给她,你继续修改Word文件。当同事再把Word文件传给你,你要考虑发给她之后到你收到她的文件期间,你作了哪些改动,得把你的改动和她的部分合并,真困难。
如果有一个软件,不但能自动帮我记录每次文件的改动,还可以让同事协作编辑,如果想查看某次改动,只需要在软件里瞄一眼就可以,岂不是很方便?
这个软件用起来就应该像这个样子,能记录每次文件的改动:
| 版本 | 文件名 | 用户 | 说明 | 日期 |
|---|---|---|---|---|
| 1 | service.doc | 张三 | 删除了软件服务条款5 | 7/12 10:38 |
| 2 | service.doc | 张三 | 增加了License人数限制 | 7/12 18:09 |
| 3 | service.doc | 李四 | 财务部门调整了合同金额 | 7/13 9:51 |
| 4 | service.doc | 张三 | 延长了免费升级周期 | 7/14 15:17 |
集中式vs分布式
集中式版本控制系统,版本库是集中存放在中央服务器的,要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。
集中式版本控制系统最大的毛病就是必须联网才能工作。
分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。
既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。
在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
SVN修正了CVS的一些稳定性问题,是目前用得最多的集中式版本库控制系统。
电脑网络中,一个网站的镜像是指对一个网站内容的拷贝。镜像通常用于为相同信息内容提供不同的源,特别是在下载量大的时候提供了一种可靠的网络连接。
镜像可算是为主站作的后备措施。有了镜像网站的好处是:如果不能对主站作正常访问(如某个服务器死掉或出了意外),但仍能通过其它服务器正常浏览。
最常见的当属镜象站点(Mirror Sites)。通过复制网站或网页的内容并分配以不同域名和服务器,以此欺骗搜索引擎对同一站点或同一页面进行多次索引。大多数搜索引擎都提供有能够检测镜象站点的适当的过滤系统,一旦发觉镜象站点,则源站点和镜象站点都会被从索引数据库中删除。
镜像站点是通过主服务器增加转移存储地址来实现信息的异地备份。通常一个镜像会定期访问主网站,以更新其内容。
创建版本库
什么是版本库(仓库,repository)呢?你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
1.选择合适位置,创建一个空目录 $ mkdir learngit $ cd learngit $ pwd /Users/michael/learngit 2.通过git init把这个目录变成Git可管理的仓库 $ git init Initialized empty Git repository in /Users/michael/learngit/.git/
#当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,不要手动修改这个目录里面的文件,容易把Git仓库给破坏了。
把文件添加到版本库
1.所有的版本控制系统(Git也不例外),其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。
2.图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统没法知道。
3.Microsoft的Word格式是二进制格式,git是没法跟踪Word文件的改动的,如果要真正使用版本控制系统,就要以纯文本方式编写文件。
4.因为文本是有编码的,比如中文有常用的GBK编码,但强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。
1.编写一个readme.txt文件,一定要放在learngit目录下(子目录也行)。
2.把一个文件放到Git仓库只需要两步。
$ git add readme.txt #用命令git add告诉Git,把文件添加到仓库
$ git commit -m "wrote a readme file" [master (root-commit) eaadf4e] wrote a readme file 1 file changed, 2 insertions(+) create mode 100644 readme.txt #用命令git commit告诉Git,把文件提交到仓库
#-m后面输入的是本次提交的说明,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
#git commit命令执行成功后会告诉你,1 file changed:1个文件被改动(我们新添加的readme.txt文件);2 insertions:插入了两行内容(readme.txt有两行内容)。
为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:
$ git add file1.txt $ git add file2.txt file3.txt $ git commit -m "add 3 files."
小结
现在总结一下今天学的两点内容:
初始化一个Git仓库,使用git init命令。
添加文件到Git仓库,分两步:
- 使用命令
git add <file>,注意,可反复多次使用,添加多个文件; - 使用命令
git commit -m <message>,完成。
浙公网安备 33010602011771号