集中式版本管理:
集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟
分布式版本管理
分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了
在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已
分布式版本控制系统除了Git以及促使Git诞生的BitKeeper外,还有类似Git的Mercurial和Bazaar等。这些分布式版本控制系统各有特点,但最快、最简单也最流行的依然是Git
1、Git 安装
Git可以在Linux、Unix、Mac和Windows这几大平台上正常运行
用git的第一步是安装GIt,linux系统上,你可以试着输入git,看看系统有没有安装Git
Ubuntu Linux,通过一条sudo apt-get install git就可以直接完成Git的安装
在Windows上使用Git,可以从Git官网直接下载安装程序,(网速慢的同学请移步国内镜像),然后按默认选项安装即可。
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功
安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址
2、版本库
版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”
1)创建文件夹
$ mkdir learngit
$ cd learngit
2)通过git init命令把这个目录变成Git可以管理的仓库:
$ git init
仓库就建好了,当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的。
说明:所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,像图片、视频、word这些二进制文件是没法跟踪的,只能看到不同版本文件大小的变化。
3)把文件添加到仓库
$ git add readme.txt
4)用命令git commit告诉Git,把文件提交到仓库:
$ git commit -m “简单写一下提交说明"
为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
5)版本退回
回到上一个版本
$ git reset --hard HEAD^
上上一个版本就是HEAD^^
上100个版本写成HEAD~100
回到某个版本:
$ git reset --hard (commitid)回到某个版本,前提是知道commitid,如果忘记,可以使用git reflog命令来找出commit id
6)撤销操作
a)工作区撤销
命令git checkout – readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,就是让这个文件回到最近一次git commit或git add时的状态
b)暂存区撤销
用命令git reset HEAD 可以把暂存区的修改撤销掉(unstage),重新放回工作区
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区
7)删除文件
a)删除工作区文件
直接删除(rm test.txt)
b)删除版本库的文件
git rm test.txt
c)工作区误删想恢复
git checkout – test.txt
3、仓库状态/文件修改状态
git status命令可以让我们时刻掌握仓库当前的状态,一般是提交前运行
git diff顾名思义就是查看difference 可以看到具体修改了哪些内容
git log查看所有的提交日志
git log --pretty=oneline 可以以commid id+修改日志来显示
4、工作区与暂存区
工作区(Working Directory)
就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区
版本库(Repository)
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改
可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改
git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支
第一次修改 -> git add -> 第二次修改 -> git commit
这样只会提交第一次的修改到版本库,因为第二次的修改没有被放到暂存区
5、远程仓库
GitHub这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库
本地Git仓库和GitHub仓库之间的传输是通过SSH加密的
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容
点“Add Key”,你就应该看到已经添加的Key
git branch 分支名 创建分支
git branch -a 查看已有分支
git checkout xx 切换分支
git checkout master ;git merge B 将分支代码合并到master
git branch -D 分支名 删除分支
git branch -m 当前分支名 新的分支名 重命名分支
git status 列出当前没有管理或修改后没有提交的文件
git log -n 查看最近n次的提交记录