集中式版本控制系统
CVS及SVN都是集中式的版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。集中式版本控制系统最大的毛病就是必须联网才能工作,若控制系统的中央服务器出了问题,所有人就都没法干活了。
分布式版本控制系统
Git是分布式版本控制系统,分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
分布式版本控制系统的安全性更高,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了,从其他人那里复制一个就可以了。在实际使用分布式版本控制系统的时候,很少在两人之间的电脑上推送版本库的修改,通常有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
文本文件v.s.图片视频
所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。
有关Git命令介绍,参考https://git-scm.com/docs。下面介绍在本地工作区创建一个Git版本库的基本操作。
git config命令,配置机器id信息,global参数
Git是分布式版本控制系统,每个机器都必须登记自己的相关id信息。git config命令用了global参数,表示所配置机器上所有的Git仓库都使用相同的配置,当然也可以对某个仓库指定不同的用户名和Email地址。
YYwhdeMacBook-Pro:~ yywh$ ls
Desktop Music anaconda3
Documents Pictures eclipse
Downloads Public eclipse-workspace
IdeaProjects PycharmProjects workspace
Library SELF_USE_LEARN
YYwhdeMacBook-Pro:~ yywh$ git config --global user.name "Yu Yg"
YYwhdeMacBook-Pro:~ yywh$ git config --global user.email "898486@qq.com"
git init命令,把“创建的版本库/仓库目录”变成“Git可管理的仓库”
YYwhdeMacBook-Pro:~ yywh$ mkdir GITWORKSPACE
YYwhdeMacBook-Pro:~ yywh$ cd GITWORKSPACE/
YYwhdeMacBook-Pro:GITWORKSPACE yywh$ git init #
Initialized empty Git repository in /Users/yywh/GITWORKSPACE/.git/
YYwhdeMacBook-Pro:GITWORKSPACE yywh$ ls -ah
. .. .git
从远处仓库clone下来的一个项目就是一个版本库;本地工作区文件夹 地位 等同于 远程仓库主机origin;本地工作区文件夹(远程仓库主机origin)里 都可以包含 多个项目(就是多个版本库);每个版本库 里面 都至少有一个master分支 和 stage分支(也就是暂存区),可以进入项目目录文件夹下,建立你自己的分支;在本地clone项目时,pwd目录可以只是一个普通文件夹,没必要是一个git init的版本库!