Git的特点:•速度
•简单的设计
•对非线性开发模式的强力支持(允许上千个并行开发的分支)
•完全分布式
•有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
Git与svn的对比:
svn属于集中式版本管理控制系统,系统中保存了所有文件的修订版本,而协同工作人员通过连接svn服务器,提取出最新的文件,获取提交更新
集中管理方式在一定程度上看到其他开发人员在干什么,而管理员也可以很轻松掌握每个人的开发权限。
但是相较于其优点而言,集中式版本控制工具缺点很明显:
1、 服务器单点故障
2、 容错性差
Git指关注文件的整体数据是否发生了改变,而其他系统只关注文件内容是否发生了改变(只关注文件中的内容差异)
为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一连接。
Git只对文件的整体内容进行一次对比,如果整体内容没有发生多大的变化,则不会把数据再次保存到快照中。
使用Git,不需要跑到外面的服务器上获取数据,只需要在本地数据库上把你需要的数据取出来即可。
在保存到 Git 之前,所有数据都要进行内容的校验和(checksum)计算,并将此结果作为数据的唯一标识和索引。换句话说,不可能在你修改了文件或目录之后,Git 一无所知。
时变得不完整,或者磁盘损坏导致文件数据缺失,Git 都能立即察觉。
Git 使用 SHA-1 算法计算数据的校验和,通过对文件的内容或目录的结构计算出一个SHA-1 哈希值,作为指纹字符串。
所有保存在Git中的数据都是利用哈希值来做索引的。
对于任何一个文件,在 Git 内都只有三种状态:
已提交(committed):已提交表示该文件已经被安全地保存在本地数据库中了;
已修改(modified):已修改表示修改了某个文件,但还没有提交保存;
已暂存(staged):已暂存表示把已修改的文件放在下次提交时要保存的清单中。
在此,将Git服务器搭建在Linux系统下
在Java虚拟机下安装一个linux系统,改下虚拟网络编辑器修改网段,同时安装Xshell进行与linux系统的连接
1、Git需要很多依赖环境:因此安装git需要先安装下列软件:
[root@itcast-01 ~]# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel gcc-c++
2、上传git安装包:
安装包:git-2.9.3.tar.gz
安装命令:(进入git解压目录)
[root@local git-2.9.3]# make prefix=/usr/local all
[root@local git-2.9.3]# make prefix=/usr/local instal
3、添加Linux的用户,用户名为git的用户:
[root@local ~]# useradd git
设置git用户的密码
[root@local ~]# passwd git
切换到git用户
[root@local ~]# su git
4、初始化仓库,仓库名为taotao.git:
[git@local root]$ cd
[git@local ~]$ git init --bare taotao.git
始化空的 Git 仓库于 /home/git/taotao.git/
使用git步骤:
1、下载安装
2、git config --global user.email/name
3、git init 对于一个文件夹目录进行git初始化操作,这个初始化是为了让git对这个文件夹中的文件进行版本管理,初始化完成之后,在当前目录下会有一个.git文件夹,这个文件夹就是版本库
可以利用.git文件夹下的文件进行一个版本的控制,就是可以对它进行一个版本的回退,回到当前。
4、在在工作区或者仓库中创建文件,然后对文件进行一系列修改操作
Git的要求是:你想要让git帮你进行的版本的控制,必须先有一个文件夹,这个文件夹要被Git进行初始化操作,这样才可进行一个git的版本管理。
常见的一些Git命令:
Master分支是主分支,也是git默认创建的分支
Master分支指向的是最新提交的commitid,利用指针的概念可以知道头指向的是我们的master分支(Git的强大支出并不是一个人开发,而是多人协作开发的概念)
在主分支上切出一个开发分支dev_first,利用 git checkout -b dev_first创建一个分支
如果你dev_first分支上,你就不能在自己的分支上删除自己,而必须是在其他分支上。
Git命令参考手册 |
|
git init |
初始化本地仓库 |
git config --global user.name “xxx” |
配置用户名 |
git config --global user.email “xxx@xxx.com” |
配置邮箱 |
git clone git+ssh://git@192.168.25.128/vt |
Clone远程仓库 |
git status |
查看当前版本的状态(是否修改) |
git add xyz |
添加xyz文件到index |
git add . |
增加当前子目录下所有更改过的文件 |
git commit -m ‘xxx’ |
提交 |
git commit --amend -m ‘xxx’ |
合并上一次提交(反复提交) |
git rm -r * |
递归删除 |
git rm xxx |
删除index中的文件 |
git log |
显示提交日志 |
git log -1 |
显示1行日志 |
git log -5 |
显示5行日志 |
git log --stat |
显示提交日志及相关变动的文件 |
git log -p -m |
|
git show HEAD |
显示HEAD的提交日志 |
git show HEAD^ |
显示HEAD的父(上一个版本)的提交日志 |
git tag |
现在已存在的tag |
git tag -a v2.0 -m ‘xxxx’ |
增加v2.0的tag |
git show v2.0 |
显示v2.0的日志及详细内容 |
git log v2.0 |
显示v2.0的日志 |
git diff |
显示所有未添加至index的变更 |
git diff --cached |
显示所有已添加index但还未commit的变更 |
git diff HEAD |
比较与上一个版本的差异 |
git diff HEAD -- ./lib |
比较与HEAD版本lib目录的差异 |
git diff origin/master..master |
比较远程分支master上本地分支master上没有的 |
git branch |
显示本地分支 |
git branch --contains 50089 |
显示包含提交50089的分支 |
git branch -a |
显示所有分支 |
git branch -r |
显示所有原创分支 |
git branch --merged |
显示所有已合并到当前分支的分支 |
git branch --no-merged |
显示所有未合并到当前分支的分支 |
git branch -m master master-copy |
本地分支改名 |
git checkout -b master master_copy |
从当前分支创建新分支 |
git checkout features/performance |
检查远程分支的features/performance分 |
git checkout v2.0 |
检出版本v2.0 |
git checkout --README |
检出head版本的readme文件 |
Git merge origin/master |
合并远程分支至当前分支 |
git push origin master |
将当前分支push到master分支上 |
git push --tags |
把所有tag推送到远程仓库 |
git fetch |
获取所有远程分支 |
git fetch --prune |
获取所有原创分支master并清除服务器上已删除的分支 |
git pull origin master |
获取远程分支master并merge到当前分支 |
git mv README README2 |
重命名文件README为README2 |
git reset --hard HEAD. |
将当前版本重置为HEAD |
git branch -d |
删除分支 |
git branch -D |
强制删除分支 |
git show-branch |
显示当前分支历史 |
git show-branch |
图示所有分支历史 |
git reflog |
显示所有提交 |
git show master@{yesterday} |
显示昨天分支的状态 |
git log --pretty=format:’%h %s’ --graph |
显示提交日志 |
git stash |
暂存当前修改,将所有至为HEAD状态 |
git stash list |
查看所有暂存 |
git stash apply stash@{0} |
应用第一次暂存 |
git grep |
文件中搜索文本“delete from” |