Git知识点汇总

版本控制

1 没有版本控制
单人维护:
 备份多个版本,费空间,费时间
 难于恢复至以前正确版本
多人协作:
 容易引发BUG
 解决代码冲突困难(多人协作最容易遇到的问题)

 代码管理混乱
 难于追溯问题代码的修改人和修改时间
 无法进行权限控制
 项目版本发布困难

2 版本控制
版本控制(Revision control)是维护工程蓝图的标准做法,能追踪工程蓝图从诞生一直到定案的过程。是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统。

3 版本控制工具
GIT SVN Perforce cvs
工具虽然多,但是本质都类似。

GIT
1 GIT简介
1.1 诞生
Linus 的第二个伟大作品。2005年由于BitKeeper软件公司对Linux社区停止了免费使用权。Linus迫不得己自己开发了一个分布式版本控制工具,从而Git诞生了。
据说Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!
1.2 现状
目前使用Git作为版本控制的开源软件:Linux kernel,Android, jQuery, Ruby on Rails,Debian…
eclipse上使用Git的项目数量也已经超过了使用SVN的仓库数。
1.3 Git特点
 分布式,强调个体
 公共服务器压力和数据量都不会太大
 速度快、灵活
 任意两个开发者之间可以很容易的解决冲突
 离线工作 (远程仓库 – 本地仓库)
 每日工作备份
 可以吃后悔药

1.4 GIT VS SVN以及其他的集中式的版本控制的区别
Git与SVN的最主要的区别就是,Git的代码仓库是分布式的,一``修改代码后先提交到本地仓库,然后再合并到远程仓库;而SVN的代码仓库是集中式的,一般就服务器上的一个,提交代码就是直接提交到服务器上的仓库去,这样如果网络不畅就无法提交了,那段时间就无法版本控制了。

1.5 GIT基本交互流程图

2 Git安装
2.1 Git安装
只装git的客户端。
https://gitforwindows.org/

安装步骤,见补充文档。
Git需要按装新版本,IDEA不能安装在中文目录下。

3 GIT基本命令

3.1 创建git资源库
3.1.1 方式1
git init --bare 库名称

示例:

ps:如果你使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。

新建成功后会多出一个文件夹myrepo ,就是git仓库所在目录。

3.1.2 方式2

注:或者在一个新建的目录下,如新建myrepo2文件夹,进入之后执行如下命令

也可以

3.2 Clone
在用户文件夹下把资源clone下来
git clone <仓库目录> <用户目录>
/g/software/repository/git/demoproject .
注意:clone时候用户目录必须为空

示例:把myrepo 克隆到 当前目录.

结果:

多出来一个.git隐藏文件夹(就是一个git 仓库的副本)。类似于.svn .

3.3 Add
userA的开发目录下进行一个hello.txt
并写上一段话。

使用命令 git status 查看当前库的状态

有一个untracked files hello.txt.

那么需要把该文件纳入到版本控制:

3.4 Commit
用命令git commit告诉Git,把文件提交到(本地)仓库:

其中参数 –m 表示message 这次提交的提交信息。

注意,第一次add第一次执行会出警告:
warning: LF will be replaced by CRLF in readme.txt.
The file will have its original line endings in your working directory.
警告处理:需要配置用户信息
git config --global user.name “zhangsan”
git config --global user.email zhangsan@gmail.com

用户目录下

小结:

初始化一个Git仓库,使用git init命令。

添加文件到Git仓库,分两步:

第一步,使用命令git add ,注意,可反复多次使用,添加多个文件;

第二步,使用命令git commit,完成提交。

小问题:
注意,这次提交,提交到哪里了?
是提交到远程服务器吗?
注意,这里跟svn不一样,commit仅仅提交到本地服务器!!

3.5 status
假设当前已经提交的hello.txt如下,

继续修改hello.txt文件,改成如下内容

然后使用Git status查看状态,发现如下提示:

git status·们,hello.txt被修改过了,但还没有准备提交的修改。

继续 git add hello.txt

然后 commit

3.6 log
查看历史版本
我们做了几次提交之后,如果想看看我们提交的历史版本记录信息,可以使用

此时文件内容是:

需要注意
Git的版本号类似3628164…882e1e0,和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示。为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。

3.7 版本回退
要回到上一个版本怎么做呢?
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交2f61…. ,在Git中,上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。

现在,我们要把当前版本“add shenzhen”回退到上一个版本“add java”,就可以使用git reset命令:

此时,去看文件。
确实回退了!

再次查看历史记录

只有两个版本了。
那么有另一个问题。
之前我们svn回退的时候,相当于是增加了一个版本。那么git回退呢?

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向回退的前一个版本而已!

示意图如下:

`

回退之后注意,第一次add第一次执行会出警告(之前增加过的就不会有):
warning: LF will be replaced by CRLF in readme.txt.
The file will have its original line endings in your working directory.
警告处理:需要配置用户信息
git config --global user.name “zhangsan”
git config --global user.email “zhangsan@gmail.com”

然后同时把hello.txt这个文件也更新了!

3.8 工作区和暂存区
3.8.1 基本概念
所谓工作区,就是我们电脑里的工作目录。如下图:

版本库
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。本地仓库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master(主分支),以及指向master的一个指针叫HEAD。

前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。Commit

3.8.2 实例:
往工作区的hello.txt 增加一句话。同时新增一个文件。

此时先用git status查看一下状态:

Git非常清楚地告诉我们,readme.txt被修改了,而LICENSE还从来没有被添加过,所以它的状态是Untracked。

现在,使用两次命令git add,把readme.txt和LICENSE都添加后,用git status再查看一下

现在,暂存区的状态就变成这样了:
Hello.txt和 hihi.txt分别被放入的stage 暂存区。

所以,git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。

此时,再去查看状态

3.9 Push
Push命令用于把本地仓库推送到远程共享版本库中
git push origin master

注意

3.10 Pull
如何确认远程库 有东西呢?
新建一个文件夹 作为一个新用户的工作区,

然后 clone到本地

查看

3.11 冲突解决
首先用户b做一些修改

然后push到远程仓库。

用户查看

如果a和b同时修改一个文件发生冲突怎么办?

首先用户A修改

提交到本地,并push到远程仓库

然后 UserB 修改,提交到本地

然后往远程仓库提交,此时后发生冲突

那么执行git pull命令

发现冲突

查看文件:

手动解决冲突:

修改完毕之后提交:

提交到远程库

使用用户a查看

文件

4 IDEA的使用

4.1 自带GIT插件
4.2 基本使用
4.2.1 Clone

Test测试成功之后,就clone

提示是否需要把导入的代码生成一个项目。

下一步

下一步

最后finish

4.2.2 Add commit log push pull

Add

Commit

History
单个文件的

整个模块的

Push

4.2.3 冲突解决

在弹出的冲突解决对话框内去合并冲突代码

Push

Check历史记录

5 GitHub

5.1 Github简介
5.2 申请github账号
自行申请。
5.3 使用IDEA把github上的远程仓库clone到本地

第一次需要输入github的用户名和密码
然后从github的仓库页面复制仓库地址

5.4 本地项目放到github上

创建完git 仓库之后 会弹出一个第一次初试提交的页面

5.5 基本使用
5.5.1 新建远程仓库

创建仓库:

远程仓库的一些情况

目前,在GitHub上的这个learngit仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出你的本地仓库然后,把本地仓库的内容推送到GitHub仓库。

5.6 多用户协作
5.6.1 Github repository增加协作
现在,如果要多个同学都去操作这个远程仓库呢?

由于github是开源软件中心,所以你只要有github账号,这里面的public的代码库你都可以直接clone下来。然后在你本地,你自己开发。

那么如果你需要协作开发,也即是需要push你本地修改到github 远程代码库呢?
那需要github上仓库的创建者 增加你为Collaborators。

如下图

增加完毕之后

对方会收到一个邀请:

同意即可。
5.6.2 多用户协作冲突

同上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值