**版本控制工具_Git*

Git概述

1. Git的目标:
	* 速度
	* 简单的设计
	* 对非线性开发模式的强力支持(允许上千个并行开发的分支)
	* 完全分布式
	* 有能力高效管理似Linux 内核一样的超大规模项目(速度和数据量)
2. SVN的缺陷:
	1. 集中式版本控制系统,需要从服务器得到最新版本才能工作
	2. 需要联网才能工作,在区域网可以,但是在互联网下必须有足够的网速;
	3. 服务器单点故障  [鸡蛋里挑骨头,问题不大]
	4. 容错性差。		[鸡蛋里挑骨头,问题不大]
	5.  ---->    【优点:在一定程度上可以看到其他开发人员在干什么,管理员也可以很轻松掌握每个人的开发权限】

3. 工作中会使用SVN,Git,以及一些其他的管理工具,甚至公司自己写的,但是基本的操作流程是一致的。
4. Git的"黑历史"?
	* Git的意思是"饭桶"。
	* 悄悄破解BitKeeper,被发现了之后迫使自己开发出一套版本控制系统,最开初是运行在Linux环境上的,后来在各个系统上均有使用。

5. Git与SVN的区别:
	1. Git是分布式,SVN是集中式,Git没有中央服务器,SVN有;
	2. Git有一个本地仓库,SVN只有远程仓库;

6. GIt的工作流程:
	1. 工作区->暂存区[add]->本地仓库[commit]->工作区[Checkout]
	2. 本地仓库[push]->远程仓库[clone]  		[本地仓库] 
	3. 远程仓库->工作区[Pull]			

7. clone与pull的区别?
	* 举例:一个新人才入职,用clone
	* 老员工用Pull,更新与本地版本不一致,修改过后的文件;如果开发中,要更新别人刚提交的功能到我的本地用pull;

Git的安装准备

1. 安装:
	* 下载地址:https://git-scm.com/download  [选择windows版本,因为工作中基本是以windows为虚拟机的]
	* 选择Git-2.13.0-64-bit.exe安装
2. 命令行[Git Bash Here]:
	* get --version   获取当前get的版本
	* 图形界面是:Git Gui Here

3. Git的图形化界面很不好看,可以安装小乌龟进行操作:TortoiseGit Setup
	* 如果英文版不好用,可以下载汉化版,汉化版安装完成后可在setting里面修改语言;
	* 小乌龟里面安装过程中会要求提供邮箱姓名,是为了工作中的出现错误能方便联系到人;
4. 本地版本库:
	1. ".get"是一个隐藏文件,如果没有可以在电脑中设置显示隐藏文件;
		* ".get"目录就是版本库,将来文件都需要保存到版本库中。
		* 工作目录:包含".git"目录的目录,也就是.git目录的上一级目录就是工作目录。只有工作目录中的文件才能保存到版本库中。
	2. 创建本地版本库:
		1. 图新界面直接新建本地版本库
		2. 命令行初始化:get init
		3. 乌龟创建:创建版本库[不要选制作纯版本库]
	3. 如果想向本地版本库中添加文件,那么必须在repositorys/repo1中放置		[repo1是一个工作目录]
5. 工作区和暂存区:
	* 工作区就是你在电脑里能看到的目录,比如我的reporstory文件夹就是一个工作区。repository目录是工作区,这个目录里面呢的".git"的隐藏文件才是版本库。

Git的实战操作

1. 添加:
	* 步骤:TortoiseGit->添加->提交   [此时文件保存在暂存区中]
			* Git提交->master->选中文件->提交  [此时文件保存在分支中,点击推送可保存在远程仓库里,如Linux服务器,GitHub等]
	* 解析:我们把文件往Git版本库力添加的时候,是分两步执行的。
		* 第一步是用git add 把文件添加进去,实际上就是把文件修改添加到暂存区
		* 第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支;
	* 注意:
		* 因为我们在创建Git版本库的时候,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
		* 简单来讲:提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
2. 修改:
	* 步骤:需要修改的文件点击右键:Git提交->master->提交		[补全日志信息,选中变更文件]  如果点击推送,则会将修改提交到远程服务器;

3. 查看修改历史
	1. 作用:在开发过程中可能会经常查看代码的修改历史,或者叫做修改日志。来查看某个版本是谁修改的,什么时间修改的,修改了哪些内容。
	2. 步骤: 	右键点击文件->TortoiseGit->显示日志

4. 比较差异功能:
	* 当文件内容修改后,需要和修改之前对比一下修改了哪些内容此时可以使用"比较差异功能";

5. 还原修改:
	* 当文件修改后不想把修改的内容提交,还想还原到未修改之前的状态。此时可以使用"还原"功能;
	* 注意:此操作会撤销所有未提交的修改,所以当作还原操作需要慎重!

6. 将java工程提交版本库中:
	1. 将java工程复制到工作目录中;
	2. 将工程添加到暂存区
	3. 添加忽略:TortoiseGit->添加到忽略列表->递归忽略文件或目录->.gitignore放在文件/文件夹所在的目录 ,一般忽略idea配置,target编译的class文件路径,不要忽略.gitignore;
	4. 选择保留本地文件;
	5. 提交代码;

7. 忽略文件语法规范:
	1. 注释行将被忽略:空行或是以#开头的行   
	2. 避免递归:在前面添加正斜杠"/"来;
	3. 忽略文件夹:在后面添加正斜杠/来;    举例:build/  即忽略build文件夹
	4. 否定忽略: 比如前面用了"*.apk ",然后使用"!a.apk",则这个a.apk不会被忽略
	5. 通配符: 
		1. 用来匹配零个或多个字符:*.[oa]   忽略所有以".o" 或".a"结尾; 
		2. *~忽略所有以~结尾的文件; 	[这种文件通常被许多编辑器标记为临时文件]  
		3. [] 用来匹配括号内的任一字符;  也可以在括号内加连接符,如[0~9]匹配0~9的数;   
		4. ?用来匹配单个字符。

远程仓库的准备

1. 概述:
	1. 常用的远程仓库就是gitHub:    https://github.com/      
	2. 国内类似的:"码云"   :     https://gitee.com/
2. 创建远程仓库步骤:
	1. 在github上创建一个账号
	2. create new repository
	3. 设置:Repository name    public 权限 
	4. 点击创建

3. ssh和http:
	* Github支持两种同步方式:"http"和"ssh".如果使用https很简单基本不需要配置就可以使用,但是每次提交代码和下载代码时都需要输入用户名和密码。如果使用ssh方式就需要客户端先生成一个密钥对,即一个公钥一个私钥。然后还需要把公钥放到github的服务器上。

SSH的操作

1. 什么是ssh?
	* SSH为Secure Shell(安全外壳协议)的缩写,由IETF的网络小组所制定。
	* 可以说是目前最可靠的,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。

2. 基于密钥的安全验证
	* 使用ssh协议通信时,推荐使用基于密钥的验证方式。你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。

3. 密钥生成:
	1. windows下我们可以使用Git Bash.exe生成密钥;
		1. 客户端操作:
			* ssh-keygen -t rsa
			* 执行命令完毕后,在C:\Users\用户名\.ssh下面生成如下名称的公钥和私钥;
			* id_rsa  私钥
			* id_rsa.pub 公钥
		2. ssh 密钥设置
			1. 登录GitHub->Settings->SSH and GPG keys->new SSH key->Title[名字可以写为subl] ->Key[将公钥复制到这里]->Add SSH Key 
	
4. 同步到远程仓库
	1. 使用git bash:
		1. 在仓库所在目录点击Git Bash here 启动 git bash程序
		2. 在git bash中执行如下语句:
			* git remote add origin git@github.com:sublum/mytest.git       [orgin后面的地址可在github仓库中复制地址即可]
			* git push -u origin master

		3. 如果出现错误:[remote orgin already exists]
			* git remote rm origin 然后再重新执行上面的推送命令

5. 使用TortoiseGit同步
	1. 由于TortoiseGit 使用的ssh工具是"PuTTY"git Bash 使用的ssh工具是"openSSH",如果想让TortoiseGit也使用刚才生成的密钥可以生成如下配置:
		1. ssh客户端配置成git使用的客户端:
			* SSH客户端:xxx\Git\usr\bin\ssh.exe  		[xxx代表Git实际安装地址]

		2. 远端下设置:
			* Url:远程仓库的地址
			* 推送URL:也是相同的
			* Putty密钥:选择刚才生成的密钥中的私钥
	2. 同步。在本地仓库的文件夹中单击右键,选择"Git同步";
	3. 从远程仓库克隆:
		* 克隆远程仓库也就是从远程把仓库复制一份到本地,克隆后会创建一个新的本地仓库。选择一个任意部署仓库的目录,然后克隆远程仓库;
		* 步骤:
			1. 使用git bash:
				* $ git clone git@github.com:sublun/mytest.git   [里面的仓库名自己修改]
			2. 使用TortoiseGit:
				1. 在任意目录点击鼠标右键->Git克隆-按照提示克隆。
	4. 从远程仓库取代码:
		* Git中从远程的分支获取最新的版本到本地有这样2个命令:
			1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge(合并代码)
			2. get pull:相当于是从远程获取最新版本并merge到本地;

		* 注意:
			* 上述命令其实相当于git fetch 和git merge  
			* 在实际使用中,git fetch更安全一些
			* 因为在merge前,我们可以查看更新情况,然后再决定是否合并
			* 如果使用TortoiseGit的话可以从右键菜单中点击"拉取"(pull)或者"获取"(fetch)

服务器搭建

1. 远程仓库实际上和本地仓库没啥不同,纯粹是为了不间断开机且对代码保密,又不需要给gitHub钱,即可实现远端保存;
2. 将文件传入linux服务器中
	1. 解压服务器软件: tar zxf git-2.5.0.tar.
	2. 导入c++依赖:
		* yum -y install curl curl-devel zlib-devel openssl-devel perl cpio expat-devel gettext-devel gcc cc
	3. 解压缩:
		* cd git-2.5.0
		* autoconf
		* ./configure
		* make
		* makeinstall
	4. 添加用户:
		* adduser -r -c 'git version control' -d /home/git -m git
	5. 设置密码:
		* passwd git		[输入密码的时候会隐藏显示]
		* 输入两次密码
	6. 切换到git用户
		* su git
	7. 创建git仓库
		* git --bare init /home/git/first
		* 注意:如果不使用"--bare"参数,初始化仓库后,提交master分支时报错。这是由于git默认拒绝了push操作,需要.git/config添加如下代码:
		[receive]
		      denyCurrentBranch = ignore
		* 推荐使用:git --bare init  初始化仓库

3. URL:
	* ssh://git@192.168.10.6.156/home/git/repo1
	* 命名远端名字,以及其他的即可。

4. 其他与gitHub操作的步骤都一样。

分支管理:

1. 概述:我们的每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD指针严格来说不是指向提交,而是指向master,master才是指向提交的,所以HEAD指向的就是当前分支。
2. 原理:
	1. 一开始的时候,master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点。
	2. 每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长。
	3. 当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:
	4. Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!
	5. 不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变
	6. :假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并
	7. ;所以Git合并分支也很快!就改改指针,工作区内容也不变!
	8. 合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支;

在Intellij idea中使用git

1.安装:
	* Setting->Git->Path to Git executable[git的安装目录]
2. 创建本地仓库:
	* VCS->Import into Version Control->Create Git Repository
	* 选择工程所在上级目录,点击ok创建本地仓库;
3. 工具条:
	* upadate...	:更新
	* Commit:提交
	* Compare with... :作比较	
4. 推送到远程:
	1. 在gitHub上创建一个仓库然后将本地仓库推送到远程;
		1. 在工程上点击右键,选择git->Repository->push
		2. 或者在菜单中选择:vcs->git->push
	2. 点击"Define remote"链接,配置https形式的URL,git形式的无法通过。然后点击ok;
		* 点击"push"按钮就将本地仓库推送到远程,如果是第一次配置推送需要输入github的用户名和密码
5. 从远程仓库克隆:
	* 关闭工程后,在idea的欢迎页上有"Check out from version control"下拉框,选择git:
	* 此处仍然推荐使用http形式的url,点击"test"按钮后显示连接成功。
	* 点击ok按钮后根据提示将远程仓库克隆下来,然后倒入到idea中。
6. 从服务端拉取代码:
	* 如果需要从服务端同步代码可以使用工具条中的"update"按钮
7. 分支
	* VCS->Git-LovalBranches:下面谁有标签标注谁就是当前分支,checkout切换分支;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暗余

码字来之不易,您的鼓励我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值