Git介绍和使用
一、Git仓库的基本概念
1、远程仓库(Remote):
也叫作资源库,是远程机器上的代码库,用于做不同版本库文件交换更新。如Gitlab,GitHub,gitee。
2、本地库(Repository):
是用户在本地创建的目录,拥有远程库的一个快照,由工作区和版本库构成。
Workspace:本地库的根目录中除.git目录以外的内容,存储内容的实际文件。
stage/Index:也叫做缓存区,暂存信息存放在.git目录"下的index文件(.git/index)中,用于临时保存内容的修改;
.git目录:是本地库的根目录中的一个隐藏目录.git,用于记录版本信息,Git进行版本控制所需要的文件,则都放在.git文件夹中;
3、分支(Branch):
本地库中默认创建一个主(master)分支,分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
本地库和远程库的关系
开发人员通过Git命令来管理代码,最常用的6个命令如下图所示:
二、git仓库的工作流程
从一般开发者的角度来看,使用Git的工作流程是:
- 克隆远程库:从远程库上克隆完整的Git仓库(包括代码和版本信息)到本地;
- 在本地库上修改代码:在本地库上根据不同的开发目的,创建分支,修改代码;
- 提交到分支:在本地分支上提交代码;
- 把修改合并到本地主分支:在本地库上提交更新,也就是说,把修改合并到本地主分支;
- 把远程库合并到本地主分支:把远程库上的最新代码fetch下来,跟本地主分支合并,如果存在冲突,那么解决冲突。
- 把本地主分支提交到远程库:生成补丁(patch),把补丁发送给远程库。
三、Git的命令
1、创建版本库
创建一个版本库也非常简单,如下我是D盘下 目录下新建一个testGit版本库。
右键通过命令行的方式打开窗口
通过命令 git init 把这个目录变成git可以管理的仓库
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
你当前testgit目录下会多了一个.git的目录,这个目录是Git来跟踪管理版本的,没事千万不要手动乱改这个目录里面的文件,否则,会把git仓库给破坏了。.git里面内容如下:
2、添加文件或修改文件
首先要明确下,所有的版本控制系统,只能跟踪文本文件的改动,比如txt文件,网页,所有程序的代码等,Git也不例外,版本控制系统可以告诉你每次的改动,但是图片,视频这些二进制文件,虽能也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是知道图片从1kb变成2kb,但是到底改了啥,版本控制也不知道。
01、创建文件test.txt, 此刻文件在工作区(WorkSpace)
通过git status可以查看文件追踪的情况
02、用命令 git add test.txt添加到暂存区里面去。
如果要提交多个文件
方式:
1、git add + 所有提交的文件名
2、git add .
3、git add -A
03、提交文件到主分支
git commit -m 'first commit'
注意:注释是必须要写的。
现在我们已经提交了一个test.txt文件了,下面可以通过命令git status来查看是否还有文件未提交
注:用户操作文件之后,文件处于工作区中,通过使用git add . 来把操作文件提交到暂存区,再通过git commit -m "注释"来将暂存区的文件提交到版本库。
04、修改文件,在文件中加入一行。查看git的状态
通过git add . 可以将修改后的文件提交到暂存区
3、版本回退
1、日志查看
可以通过git log 来查看历史记录
我们也可以使用命令 git log pretty=oneline 命令来使输出内容变得更有可读性,格式更美观
2、版本回退和撤销
版本回退
方式:
回退一次:git reset --hard HEAD^
回退两次:git reset --hard HEAD^^
最常用回退方式:git reset --hard sha1值(sha1值为前七位)
回退撤销
通过git reflog获取到每次操作的版本号
使用git reset --hard 版本号 来实现回退撤销
4、删除文件
使用git rm test.txt命令,删除的文件直接进入暂存区。(此刻需要注意,如果使用rm删除不在暂存区,需要git add才会进入暂存区。如果进入暂存区可以退回工作区,使用下面命令 git reset HEAD test.txt)
提交之后文件被删除
5、Git配置信息Config
1、config概述
在git中,我们使用git config 命令用来配置git的配置文件,git配置级别主要有以下3类:
1、仓库级别 local 【优先级最高】
2、用户级别 global【优先级次之】
3、系统级别 system【优先级最低】
git 仓库级别对应的配置文件是当前仓库下的.git/config
git 用户级别对应的配置文件是用户宿主目录下的~/.gitconfig
git系统级别对应的配置文件是git安装目录下的 /etc/gitconfig
我们可以在cmd命令提示符中输入以下查看配置信息
git config --local -l
git config --global -l
git config --system -l
三种config的优先级处理:
01、在同一台电脑上属于一个人的操作范围时:可以使用用户级别的config足矣。因为此电脑可以直接登录此人的账号来进行版本提交,而不会发生冲突
02、当一台电脑属于多人使用,并且多人负责此电脑上的多个项目时:只能使用仓库级别的config。因为每个人都在此电脑上进行提交,因此不能使用一个账号的用户级别config来进行提交。无法确定项目和个人的匹配问题。只能使用优先级最高的仓库级别config来针对每个仓库来提交代码内容。这种形式才能够实现每个config针对每个项目,而不会出现项目和提交者之间的错乱。
2、config修改
演示修改用户名和邮箱:
git config --global user.name "zhangsan"
git config --global user.email "zhangsan@126.com"
注意不要手动修改 每个级别的配置文件,要用命令。
配置文件的权重是仓库>全局>系统。Git会使用这一系列的配置文件来存储你定义的偏好,它首先会查找/etc/gitconfig文件(系统级),该文件含有对系统上所有用户及他们所拥有的仓库都生效的配置值。接下来Git会查找每个用户的~/.gitconfig文件(全局级)。最后Git会查找由用户定义的各个库中Git目录下的配置文件.git/config(仓库级),该文件中的值只对当前所属仓库有效。
6、.gitignore文件
在项目中,我们可能一起提交多个文件
· git add -A 提交所有变化
· git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
· git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
在使用git的过程中,一般我们总会有些文件无需纳入git的管理,也不希望它们总出现在未跟踪文件列表,这些文件通常是日志文件、临时文件、编译产生的中间文件、工具自动生成的文件等等。
此时我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式,Git会根据这些模式规则来判断是否将文件添加到版本控制中。
注意:在windows下可以创建文件名为.gitignore.,保存之后系统会自动重命名为 .gitignore
1、格式规范
· (1)所有空行或者以注释符号 # 开头的行都会被 Git 忽略
· (2)可以使用标准的 glob 模式匹配
· (3)匹配模式最后跟斜杠(/)说明要忽略的是目录
· (4)要忽略指定模式以外的文件或目录,可以在模式前加上感叹号(!)进行取反
2、案例使用
01、生成.gitignore文件
查看状态发现test.doc不在工作区
提交也不会进入暂存区
对于.gitignore文件的使用,比较方便的方法:直接创建一个模版内容进行使用。个人使用一台电脑进行Java开发只需要使用一个.gitignore文件来对所有的java项目进行管理。
一定要养成在项目开始就创建.gitignore文件的习惯。
3、java开发通用模板
#java *.class #package file *.war *.ear *.zip *.tar.gz *.rar #maven ignore target/ build/ #eclipse ignore .settings/ .project .classpatch #Intellij idea .idea/ /idea/ *.ipr *.iml *.iws # temp file *.log *.cache *.diff *.patch *.tmp # system ignore .DS_Store Thumbs.db |