第二章 初识Git
1.Git的历史
Linux系统之前的存代码方式都是志愿者以diff方式传给linux手工合并代码,后来觉得麻烦,但又觉得集中式版本控制系统cvs、svn太垃圾就不用。后期代码库太大无法维护,就用BitKeeper的免费版本,到了05年,有人试图破坏免费协议,然后BitKeeper就一怒之下收回使用权。
后来没办法,Linus花了两周时间,自己用C编写了一个分布式版本控制系统,即Git。在之后,linux上的源码全都在Git管理了。
2. 集中式vs分布式
集中式:版本库集中放在中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
毛病在于集中式必须联网,网速要够快,带宽要打。
分布式:每个人的电脑都是一个完整的版本库,那如何多人协作?比如你在你的电脑修改文件A,他在他的电脑修改了文件A,你俩只需要把自己修改的内容发给对方即可看到对方的修改了。这样做安全性提高了许多。
但是在实际使用分布式的时候,很少两人之间推送文件修改。往往是分布式控制系统通常也有一台充当“中央服务器”的电脑,这个电脑的作用仅仅是让大家来交换自己的改动。
3. 安装Git
3.1windows上安装git
下载完安装程序后,然后按默认选项安装即可。安装完成后,在开始菜单里找到
“Git”->“Git Bash”。安装完成后,需要在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
因为git是分布式版本控制系统。所以每个机器都需要输入用户名和email地址。如果被冒充怎么查?
注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email
3.2linux上安装git
3.3mac上安装git
4.创建版本库
版本库repository,可以理解为一个目录。这个目录里所有的文件都可以被Git管理。每个文件的增删改查,Git都能跟踪,一边任何时刻可以追踪历史,或者在将来某个时刻可以“还原”、“回滚”
1.创建一个版本库非常简单,首先,选择一个合适的地方创建一个空目录:
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
Pwd是用来显示当前目录
Windows的话,确保路径不含中文
2.通过git init命令把这个目录变成Git可以管理的仓库:
$ git initInitialized empty Git repository in /Users/michael/learngit/.git/
接着会提示你已经创建了一个空的版本库。文件夹中会出现一个.Git的目录,这个目录是来跟踪管理版本库的,不要手动修改这个目录里的文件,如果没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令即可查看。
3.把文件添加到版本库中
首先说明一点,所有的版本控制系统,其实只能跟踪文本文件的改动,比如txt、网页、程序源码等。版本控制系统只可以告诉每次的改动,无法跟踪二进制文件的变化。所以图片、视频、word格式的文件的变化都没办法跟踪。如果真正要使用版本控制系统,就要以纯文本方式编写文件。强烈建议,文本文件使用标准的UTF-8编码,可以被所有平台支持。
对于windows用户,不要使用微软自带记事本。尽量下载notepad++代替记事本。默认编码格式选择UTF-8 without BOM
好了,现在写一个readme.txt放入git文件夹中。输入命令git add,将文件添加到仓库。
$ git add readme.txt
接着用git commit命令告诉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
“”中包括的内容可以输入任意内容,但最好有意义,因为这样就可以在历史记录里方便的找到改动记录。这输入的是本次提交的说明。
如果执行成功,命令行显示
1 file changed, 2 insertions(+)
一个文件已经改动,其中添加了两行内容。
为什么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 add git commit -m“”