Git
版本控制
版本控制(Revision control):一种在开发过程中对项目文件、目录等内容的修改历史进行管理,以方便查看更改历史记录,备份以便恢复以前的版本的技术
主要功能:
- 实现跨区域多人协同开发
- 追踪和记载一个或多个文件的历史记录
- 组织、保护源代码与文档
- 统计工作量
- 追踪记录整个项目的开发过程
版本控制分类:
-
本地版本控制
记录文件每次的更新,对每个版本做一个快照或记录补丁文件,适合个人使用
代表产品:RCS
-
集中版本控制
所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改
用户本地只有自己以前所同步的版本,如果不连网,用户就看不到历史版本
一旦服务器故障,项目即存在较大风险
代表产品:SVN
-
分布式版本控制
所有版本信息可以同步到每一个用户的本地,本地可以查看到所有的版本历史
可以离线在本地提交,之后在连网时push到服务器或其他用户那里
由于每个用户那里保存的都是所有的版本数据,故只要有一个用户的设备没有问题就可以恢复所有的数据
代表产品:Git
Git与SVN
-
SVN是集中式版本控制系统,版本库是集中放在中央服务器的;而工作的时候,用的都是自己的电脑,所以首先先要从中央服务器得到最新的版本,工作完成后,则需要把文件推送到中央服务器。
-
Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库;工作的时候不一定需要连网
Git协同的方式是这样的:小明在电脑上改了文件A,小红也改了文件A,他们两之间把各自的修改推送给对方,就可以互相看到对方的修改了
思考:使用SVN,团队开发同时修改同一文件,先后提交,会发生什么?
会提交失败!解决办法:
1、对文件选择revert操作:文件恢复到最新的版本,放弃自己的更新内容
2、对文件选择update操作:update后会出现冲突,出现四个文件:旧版本的文件、别人更新的文件、我更新的文件、别人跟我共同修改后的文件。然后自己整理内容,和别人讨论到底留谁的,接着执行resolve解决冲突,最后执行revert恢复到最新版本。
Git工作原理
Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/lndex)、资源库/版本库(Git Directory/Repository)
Git有一个远程仓库(Remote Directory),文件在四个区域之间的转换关系如下:
- 工作区:平时存放项目代码的地方
- 暂存区:临时存放改动,是一个文件,保存的是即将提交的文件的修改信息
- 版本库:安全存放数据的地方,里面有提交到所有版本的数据,其中HEAD指向最新放入仓库的版本
- 远程仓库:托管代码的服务器
其中用户能看到的是工作区和远程仓库,而暂存区和版本库是放在隐藏文件.git中的
Git工作流程:
- 在工作目录中添加、修改文件
- 将需要进行版本管理的文件放入暂存区
- 将暂存区的文件提交到远程仓库
因此,Git管理的文件有三种状态:已修改(modified)、已暂存(staged)、已提交(committed)
Git的使用
windows版的Git安装完后,会出现三个exe
- Git Bash:Unix与Linux风格的命令行
- Git CMD:Windows风格的命令行
- Git GUI:图形界面版的Git
在桌面右键,会出现Git Bash Here,点击进入Git客户端;安装时可以选择命令类型,若选择Linux风格的,此时就需要用Linux命令去操作
Git配置
Git安装目录下的etc\gitconfig文件,是Git系统配置文件
C:\Users\Administrator\.gitconfig,为用户配置文件
- Git客户端执行
git config -l
:查看全部配置清单 git config --system --list
:查看系统配置git config --global --list
:查看用户配置git config --global user.name "xxx"
:设置用户名git config --global user.email xxx
:设置邮箱
Git项目搭建
-
本地搭建仓库
创建本地仓库的方法有两种:本地创建全新的仓库;克隆远程仓库
1、本地创建全新的仓库,需要在项目的根目录启动Git客户端,并执行以下命令:
git init
2、克隆远程仓库,需要先创建一个用于存放项目的空目录,再在该目录执行如下命令:
git clone [url]
Git文件操作
版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,Git管理的文件有以下4种状态:
- Untracked:未跟踪,此文件在文件夹中,但并没有加入到版本库,不参与版本控制,通过
git add
命令,可以将其状态改为Staged - Unmodify:文件已入库,未修改,即版本库中的文件快照的内容与文件夹中的一致;如果它被修改,状态会变为Modified;如果使用
git rm
命令将其移出版本库,状态则变为Untracked - Modified:文件已修改,通过
git add
命令,可使其进入staged状态,使用git checkout
命令,从版本库中取出文件,覆盖当前修改,返回到Unmodify状态 - Staged:暂存状态,执行
git commit
,可以将修改的文件同步到库中,这时库中的文件和本地文件变为一致,文件变为Unmodify状态,执行git reset HEAD [filename]
取消暂存,文件状态变为Modified
查看文件状态的命令:
-
查看指定文件状态
git status [filename]
-
查看所有文件状态
git status
文件管理相关命令:
-
添加所有文件到暂存区
git add .
-
提交暂存区内容到本地版本库,
-m "xxx"
表示提交信息git commit -m "xxx"
-
将本地版本库的分支推送到远程服务器上对应的分支
git push <远程主机名> <本地分支名>:<远程分支名>
eg:
git push origin master:origin/master
将本地的master分支推送到远程主机origin上的对应master分支, origin 是远程主机名
git push
:如果当前分支只有一个远程分支,那么主机名都可以省略 -
从远程获取代码并合并本地的版本
git pull <远程主机名> <远程分支名>:<本地分支名>
忽略文件
有时我们不想把某些文件纳入版本控制中,比如数据库文件、临时文件等
可以在主目录下建立.gitignore
文件,达到这一目的,在Git客户端输入命令touch .gitignore
,可以在当前目录建立一个 .gitignore
文件
此文件有如下规则:
-
文件中的空行或以
#
号开始的行,会被视为注释(此行无效果) -
可以使用Linux通配符,如:
*
代表任意多个字符,?
代表一个字符,[xxx]
代表可选字符串范围,{str1,str2}
代表可选的字符串 -
!
放在文件名前,表示例外规则 -
/
放在路径前,如/a
,表示只忽略当前目录下的a文件和目录,子目录的a不在忽略范围内 -
/
放在路径后,表示要忽略的是当前目录下该路径后的所有内容eg:
target //忽略这个target目录 angular.json //忽略这个angular.json文件 log/* //忽略log下的所有文件 css/*.css //忽略css目录下的.css文件 ,但不包括css/a/xx.css *.txt //忽略所有 .txt结尾的文件 !lib.txt //lib.txt除外,即使前面设置了对*.txt的忽略 /temp //忽略当前目录下的temp文件,子目录中的temp不被忽略 build/ //忽略所有build目录下的文件,但如果是名为build的文件则不忽略
Git分支
分支一般用于区分项目的版本,分支之间的关系就像是平行宇宙,不同的分支之间互不干扰
常用分支命令
#列出所有本地分支
git branch
#列出所有远程分支
git branch -r
#新建一个分支,但依然停留在当前分支
git branch [branch-name]
#切换分支
git checkout [branch-name]
#新建一个分支,并切换到该分支
git checkout -b [branch-name]
#合并指定分支到当前分支
git merge [branch-name]
#删除分支
git branch -d [branch-name]
#删除远程分支
git push origin --delete [branch-name]
git branch -dr [remote/branch]
#拉取远程仓库的全部更新
git fetch
#查看分支所有节点(版本)
git log --graph --all
优秀博客参考:https://www.cnblogs.com/videring/articles/6962005.html
远程仓库
码云、GitHub或公司自己搭建的仓库
- 本机设置绑定SSH公钥,实现免密码登陆远程仓库
- 进入本机的
C:\Users\Administrator\.ssh
目录 - 开启Git客户端,输入
ssh-keygen
命令,生成公钥;ssh-keygen -t rsa -b 4096 -C "你的邮箱"
公钥使用rsa加密算法加密,同时配置邮箱 - 命令执行完,会生成两个文件:id_rsa和id_rsa.pub
- 把id_rsa.pub里的内容添加到远程仓库
- 进入本机的
- 在远程仓库新建或寻找一个仓库,复制它的克隆地址,在本地进行clone
优秀博客参考:https://blog.csdn.net/qq_38085855/article/details/82684167
IntelliJ IDEA集成Git
- 把远程仓库的
.git
文件复制到IDEA项目中(可以把之前从目标仓库克隆下来的文件拷贝过去);或者File->new->porject from version control,新建工程 - 项目有了
.git
文件,idea上方工具栏就会有git相关工具;在idea目录中,文件的颜色表示文件不同的状态 - 可以使用idea上方工具栏中的update工具,更新当前的项目
- 可以在idea下方的terminal中执行
git add .
,以add项目的文件,也可以在idea左方文件目录右键,点击add,进行add操作 - terminal中执行
git commit
,以commit项目的文件;也可以使用Commit工具,选择需要commit的文件,之后点击commit按钮,即可自动完成commit操作 - terminal中执行
git push
,进行远程仓库同步