Git的使用
-
Git的历史:Linux 开源社区(特别是 Linux的缔造者 Linus Torvalds )需要使用一种进行版本控制的软件而进行开发的Git
-
Git 和 Svn的使用区别:
- Svn:是一种集中式的版本控制系统,版本库是集中放置在中央服务器的,在需要使用的时候需要先进行版本的更新(Update)这样集中式的控制系统需要在联网的环境下进行工作,这样的方式使用的是局域网的形式或者是网络的带宽比较高的时候,比较方便,但是网速较慢的情况下就非常的郁闷。另一点缺点就是,集中式的版本控制工具存在着服务器单点故障和容错性查的缺点。
- GIt:GIt是一种分布式的版本控制系统,这样的话就是没有中央的服务器的,每个使用Git的电脑就是一个完整的版本库,这样的话就不需要使用联网的环境,而进行多人协作的形式,只需要将各自的文件推送给对方,进行修改就行;或者使用远程仓库进行统一的管理。
-
GIt使用的流程:
- 使用的步骤:
- 从远程仓库中克隆 Git 资源作为本地仓库。(clone)
- 从本地仓库中checkout代码然后进行代码修改(checkout)
- 在提交前先将代码提交到暂存区。(add)
- 提交修改。提交到本地仓库。本地仓库中保存修改的各个历史版本(commit)
- 在修改完成后,需要和团队成员共享代码时,可以将代码push到远程仓库(push)
- 使用的步骤:
-
GIt的安装:
-
使用git进行文件版本的管理:
- 创建版本库:就像是Maven的本地仓库一样。
- 什么是版本库:版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。由于git是分布式版本管理工具,所以git在不需要联网的情况下也具有完整的版本管理能力。
- 创建版本库的两种方式:
- 使用Git bash的形式:
- 首先是创建一个空的目录
- 打开创建好的目录,在当前目录下点击右键选择Git bash
- 使用命令进行版本库创建:git init
- 使用TortoiseGit的形式:
- 只需要在新创建的目录上右键点击 :Git 在这里创建版本库 即可
- 需要注意的是:一般不勾选制作纯版本库
- 创建完成之后会在 此目录下创建一个.git的隐藏目录
- 使用Git bash的形式:
- 相关概念:
- 版本库:
.git
目录就是版本库,将来文件都需要保存到版本库中 - 工作目录:包含
.git
目录的目录,也就是.git
目录的上一级目录就是工作目录。只有工作目录中的文件才能保存到版本库中(手动创建的哪一个目录)
- 版本库:
- 添加文件:
- 添加文件的过程:首先是add到暂存区中 在使用commit到版本库中 git 和svn不同的就是有暂存区的概念
- 添加文件的方式:使用的是TortoiseGit的形式,在工作目录下创建一个文件,选中右键点击TortoiseGit进行添加操作。然后进行提交,将文件保存到版本库中。
- 执行的过程:
- git add 实际上就是将文件修改添加到暂存区中
- 使用git commit 实际上就是将暂存区中的文件全都提交到当前分支 需要注意的是:在进行Git的版本库的创建的时候 会自动的创建唯一的一个分支master git commit就是在向master中进行提交更改
- 修改文件:修改文件的方式和进行文件的添加时相同的步骤:先进行文件的修改修改完毕之后进行文件的提交
- 显示日志:进行代码的修改历史,就是在文件右键点击选择显示日志 来进行文件的日志的查看
- 文件删除:就是使用git的删除功能直接进行删除 选中要删除的文件 点击删除 进行删除 但是这样 版本库中还是没有进行删除 需要在进行提交才能在版本库中进行删除。
- 创建版本库:就像是Maven的本地仓库一样。
-
Git忽略文件.gitignore
- 在工程中,并不是所有文件都需要保存到版本库中的,例如“target”目录及目录下的文件就可以忽略。在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件或目录。
在工程中,并不是所有文件都需要保存到版本库中的,例如“target”目录及目录下的文件就可以忽略。在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件或目录。
- 在工程中,并不是所有文件都需要保存到版本库中的,例如“target”目录及目录下的文件就可以忽略。在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件或目录。
-
Git 忽略规则优先级
在 .gitingore 文件中,每一行指定一个忽略规则,Git 检查忽略规则的时候有多个来源,它的优先级如下(由高到低):
从命令行中读取可用的忽略规则 当前目录定义的规则 父级目录定义的规则,依次递推 $GIT_DIR/info/exclude 文件中定义的规则 core.excludesfile中定义的全局规则
-
Git 忽略规则匹配语法 在 .gitignore 文件中,每一行的忽略规则的语法如下:
- 空格不匹配任意文件,可作为分隔符,可用反斜杠转义
- 开头的文件标识注释,可以使用反斜杠进行转义
- ! 开头的模式标识否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用 ! 也不会再被包含。可以使用反斜杠进行转义
- / 结束的模式只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件
- / 开始的模式匹配项目跟目录
- 如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不.gitignore 文件中,则相对于项目根目录
- ** 匹配多级目录,可在开始,中间,结束
- ? 通用匹配单个字符
- * 通用匹配零个或多个字符
- [] 通用匹配单个字符列表
-
.gitignore规则不生效
.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:
git rm -r --cached . git add . git commit -m 'update .gitignore'
你想添加一个文件到Git,但发现添加不了,原因是这个文件被.gitignore忽略了:
$ git add App.class The following paths are ignored by one of your .gitignore files: App.class Use -f if you really want to add them.
如果你确实想添加该文件,可以用-f强制添加到Git:
$ git add -f App.class
或者你发现,可能是.gitignore写得有问题,需要找出来到底哪个规则写错了,可以用git check-ignore命令检查:
$ git check-ignore -v App.class .gitignore:3:*.class App.class
Git会告诉我们,.gitignore的第3行规则忽略了该文件,于是我们就可以知道应该修订哪个规则。
-
Java项目中常用的.gitignore文件
# Compiled class file *.class # Eclipse .project .classpath .settings/ # Intellij *.ipr *.iml *.iws .idea/ # Maven target/ # Gradle build .gradle # Log file *.log log/ # out **/out/ # Mac .DS_Store # others *.jar *.war *.zip *.tar *.tar.gz *.pid *.orig temp/
-