目录
1.关于Git
1.1 简介
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
1.2 git 与 svn 的区别
-
GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
-
GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,cvs等的文件夹里。
-
GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。
-
GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
-
GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
1.3 分布式与集中式的区别
1.3.1 分布式版本控制系统:
代表:git
分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。只要提供一台电脑作为版本集中存的服务器放就够了,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它也一样干活,只是交换修改不方便而已。而每一台电脑有各自独立的开发环境,不需要联网,本地直接运行,相对集中式安全系数高很多。
1.3.2 集中式版本控制系统:
代表:svn,cvs
版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
1.3.3 集中式相比分布式缺点:
1. 如果网络出现异常或者很卡,直接影响工作效率。如果是中央服务器挂了,那就集体喝茶去了。
2. 还有一种情况,各自电脑中操作的所有软件工具,都存放在一个中央服务器上(现在流行叫云服务器),只需要用各自电脑登陆连接到云服务器上,(一般服务器都是用linux),比如用ps工具,大家其实用的是云服务器中的同一个ps 软件,在使用率高的情况下,ps会出现异常,当用ps筛选颜色的时候,已经混乱,无法正常选择颜色,这个情况是我在开发中遇到的。以前我们是每个人用各自安装的ps,但是在这样的环境下用的是同一个ps软件的时候就会有bug。
3. 安全度不高,重要的东西都放在一个中央服务器中,如果被黑,那损失就大了。
2. Git安装配置
2.1 linux安装
实验环境:Centos 7
1. yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
2. wget https://github.com/git/git/archive/master.zip
3. unzip git-master.zip
4. cd git-master
5. make prefix=/usr/local/git all
6. make prefix=/usr/local/git install
7. rm -rf /usr/bin/git
8. ln -s /usr/local/git/bin/git /usr/bin/git
9. git --version
2.2 windows安装
安装包下载地址:https://gitforwindows.org/
注:安装完成即可使用,提供命令行和图形界面的Git项目管理工具。也可使用IDEA等工具。
2.3 git配置
Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。
这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:
- /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用
git config
时用--system
选项,读写的就是这个文件,该文件默认不存在。 ~/.gitconfig
文件:用户目录下的配置文件只适用于该用户。若使用git config
时用--global
选项,读写的就是这个文件,该文件默认不存在。- 当前项目的 Git 目录中的配置文件(也就是工作目录中的
.git/config
文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以.git/config
里的配置会覆盖/etc/gitconfig
中的同名变量。
在 Windows 系统上,Git 会找寻用户主目录下的 .gitconfig 文件。主目录即 $HOME 变量指定的目录,一般都是 C:\Documents and Settings\$USER。
此外,Git 还会尝试找寻 /etc/gitconfig 文件,只不过看当初 Git 装在什么目录,就以此作为根目录来定位。
3.Git详解
3.1 git生态
Git 分布式版本管理系统
Gitlab git 私库解决方案
Github git 公有库解决方案
3.2 git工作流程
一般工作流程如下:
- 克隆 Git 资源作为工作目录。
- 在克隆的资源上添加或修改文件。
- 如果其他人修改了,你可以更新资源。
- 在提交前查看修改。
- 提交修改。
- 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
图示:
3.3 git基本操作
3.3.1 基本概念
工作区(workspace): 就是你在电脑里能看到的目录。
暂存区(stage/index):工作区文件修改后,add加入暂存区。
本地仓库(local repository): 暂存区 commit 到本地仓库。
远程仓库( remote repository ):本地仓库push到远程仓库。
3.3.2 创建仓库
git init /path/dir
# dir 目录即为新创建的 git 仓库
3.3.3 检出仓库
git clone git://github.com/gitrepos/test.git
# 在当前目录创建 test 仓库
git clone git://github.com/gitrepos/test.git mytest
#自定义仓库名
3.3.4 添加和提交
git add <filename>
git add *
#将修改好的文件添加入暂存区
git commit -m "代码提交信息"
#将暂存区的文件上传到本地仓库
3.3.5 推送改动
git push origin master
#将本地仓库提交到远程仓库,可以将 master 换成你想要推送的任何分支。
git remote add origin <server>
#如果你还没有克隆现有仓库,并欲将你的仓库连接到某个远程服务器,你可以使用如上命令添加。如此你就能够将你的改动推送到所添加的服务器上去了。
3.3.6 分支管理
分支是用来将特性开发绝缘开来的。在你创建仓库的时候,master 是“默认的”分支。在其他分支上进行开发,完成后再将它们合并到主分支上。
git branch
#列出分支基本信息
git branch dev
#创建一个dev分支
git checkout -b dev
#创建一个dev分支并切换过去
git checkout master
#切换到 master 分支
git branch -d dev
#删除分支
注:除非你将分支推送到远端仓库,不然该分支就是 不为他人所见的。
3.3.7 更新与合并
git pull
#将本地仓库更新为最新改动
git merge <branch>
#将其他分支合并到当前分支,如将开发分支合并到 master 分支
注:在这两种情况下,git 都会尝试去自动合并改动。遗憾的是,这可能并非每次都成功,并可能出现冲突(conflicts)。 这时候就需要你修改这些文件来手动合并这些冲突(conflicts)。
合并冲突参考:https://www.cnblogs.com/wangmingshun/p/5425150.html
3.3.8 标签
git tag v1.0 1b2e1d63ff
#为软件发布创建标签是推荐的。这个概念早已存在,在 SVN 中也有。你可以执行如上命令创建一个叫做 v1.0 的标签,1b2e1d63ff 你想要标记的提交 ID 的前 10 位字符。如下命令和查看ID:
git log
git log --oneline --graph
3.3.9 撤销与回退
git checkout -- readme.txt
#
把readme.txt
文件在工作区的修改全部撤销,这里有两种情况:1.
readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态。2. 是
readme.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
git reset [option] id 可回退到前后版本
option:
--hard 三个区全部撤除
--mixed 缓冲区和本地仓库撤除
--soft 只撤除本地仓库,缓冲区和工作目录不改变
git reset --hard HEAD~1 #HEAD表示当前版本 HEAD~100 前一百个版本
更多回退方法:https://blog.csdn.net/fuchaosz/article/details/52170105
详细参考文档:
http://www.runoob.com/git/git-tutorial.html
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
更多详细命令: