1.1 Git概述

Git 是一个免费的、开源的分布式版本控制系统

1.2 为什么需要版本控制

个人开发过渡到团队开发

1.3 版本控制工具

1.3.1 集中式版本控制工具

CVS、SVN、VSS…

特点:都有一个单一的集中管理的服务器,保存所有文件的修订版本

优点:每个人在一定程度上都开源看到项目中的其他人正在做什么。管理员可以掌握每个开发者的权限

缺点:中央服务器的单点故障问题 。例如服务器宕机一个小时,则在一个小时内,所有人都无法提交更新,也无法协同工作

1.3.2 分布式版本控制工具

Git、Mercurial、Bazaar、Darcs…

分布式版本控制工具解决了集中式版本控制工具的缺点

  1. 在服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
  2. 每个客户端保存的都是完整的项目(包含历史记录,更加安全)

1.5 Git 工作机制

1.6 Git 和代码托管中心

代码托管中心是基于网络服务器的远程代码仓库,一般称为远程库

  • 局域网
    • GitLab
  • 互联网
    • GitHub
    • Gitee码云

3. Git 常用命令

命令 说明
git config –global user.name 用户名 设置用户签名
git config –global user.email 邮箱 设置用户签名
git init 初始化本地库
git status 查看本地库状态
git add 文件名 添加到暂存区
git commit -m “日志信息” 文件名 提交到本地库
git reflog 查看历史记录
git reset –hard 版本号 版本穿梭

3.1 设置用户签名

使用命令 git config –global user.name 用户名 设置

可以在C:\用户\用户名\.gitconfig 文件查看这些信息

[filter "lfs"]
	clean = git-lfs clean -- %f
	smudge = git-lfs smudge -- %f
	process = git-lfs filter-process
	required = true
[user]
	name = xycz
	email = xycz.xyz

说明:

签名的作用只是区分不同使用者的身份,签名信息在每个版本提交信息中可以看到,确认本次提交是谁做的。Git 首次安装必须设置用户签名,否则无法提交代码

这里设置的用户签名和登录 GitHub 的账号没有任何关系

3.2 初始化本地库

语法:git ini

3.3 查看本地库状态

git status

首次查看

vim 一个文件后查看

红色表示未添加到暂存区(只存在于工作区中)

3.4 添加暂存区

添加到暂存区语法:git add 文件名.后缀

添加到暂存区后再次查看git 状态:git status

绿色表示已添加到暂存区

删除暂存区的文件:git rm --cached 文件名.后缀(注意:只是删除暂存区的文件,工作区的没有被删除)

3.5 提交本地库

3.5.1 将暂存区的文件提交到本地库

基本语法:git commit -m "日志信息" 文件名.后缀

其中

为版本号

3.5.2 查看状态(没有文件需要提交)

再次查看状态

3.6 查看版本信息

简易命令:git reflog

完整命令:git log

3.7 修改文件

修改文件内容后再查看状态git status

红色表示没有添加到暂存区

再次添加到暂存区git add hello.txt

提交到本地库git commit -m "日志信息" 文件名.后缀

git 中是以行来维护的。修改了一行内容,则会将该行删除,再添加修改后的一行。所以会提示新增一行,删除一行

再次查看版本信息

HEAD指针指向了 master ,master 指针指向了新的版本

3.8 历史版本

3.8.1 查看历史版本

查看版本信息git reflog

查看版本详细信息:git log

3.8.2 版本穿梭

语法:git reset --hard 简易版本号

HEAD指针指向了 master ,master 指针指向了最初的版本

4. Git分支

4.1 什么是分支

在版本控制中,同时进行多个任务,为每个任务创建单独的分支。使用分支就是可以将自己开发的代码从主线上分离出来,开发自己的分支时,不会影响主线分支的运行。可以简单理解为副本,一个分支就是一个单独的副本(分支底层还是指针的引用)

4.2 分支的好处

同时并行推进多个功能开发,提高开发效率

各个分支在开发过程中,若某个分支开发失败,不会对其他分支造成影响

4.3 分支的操作

命令 作用
git branch 分支名 创建分支
git branch -v 查看分支
git checkout 分支名 切换分支
git merge 分支名 将指定分支合并到当前分支上

4.3.1 查看分支

git branch -v

4.3.2 创建分支

git branch 分支名

其中,hot-fix 为刚刚创建的分支,并将主分支 master 的内容复制了一份

4.3.2 切换分支

git checkout 分支名

在 hot-fix 分支上修改 hello.txt 文件后添加到暂存区,再提交。再查看日志

4.3.2 合并分支

切换回master 分支后再查看 hello.txt

内容没有被修改

合并分支:将 hot-fix 分支中的 hello.txt 合并到 master 分支上的 hello.txt

git merge 分支名

4.3.6 产生冲突

合并分支时,在两个分支中都修改了文件内容,Git 无法决定使用哪个分支的文件作为最新版本,需要人为决定

同时在 master 分支和 hot-fix 分支中修改文件内容,分别在文件末尾加上 master test 和 hot-fix test。添加到暂存区再提交

切换回 master 分支将 hot-fix 分支合并当 master 分支中

自动合并失败

查看本地库状态

此时查看文件内容

hello,Git;
hello,Git;
hello,Git;
hello,Git;
hello,Git;
hello,Git;
hello,Git;
hello,Git;
hello,Git;
hello,Git;
hello,Git;
qqqq`hello,Git;
<<<<<<< HEAD                  <<<<<<分支名
master test					  以上分支的内容
=======						  分隔符
hot-fix test				  以下分支的内容
>>>>>>> hot-fix				  >>>>>>分支名

此时应该手动修改文件内容将需要保留的内容保留下来(将其中的分支名/分隔符等信息删除)

hello,Git;
hello,Git;
hello,Git;
hello,Git;
hello,Git;
hello,Git;
hello,Git;
hello,Git;
hello,Git;
hello,Git;
hello,Git;
qqqq`hello,Git;
master test
hot-fix test

添加暂存区

提交(此时不可以带有文件名)

错误:

正确:

注意:此时 master 分支中的文件合并成功,hot-fix 分支的文件的内容没有被合并

4.4 切换分支的说明

master、hot-fix 都是指向具体版本记录的指针。当前所在的分支是由 HEAD 指针决定的。所以创建分支就是多创建一个指针

切换分支本质上就是移动 HEAD 指针

在工作空间中隐藏的文件夹 .git 里面有一个 HEAD 文件用文本形式打开可以看到当前分支的路径

分支路径中,文件内容为最新完整版本号

5. Git 团队协作机制

5.1 团队内协作

5.2 跨团队协作

6. GitHub操作

6.1 创建远程仓库

6.2 远程仓库操作

命令 作用
git remote -v 查看当前所有远程地址别名
git remote add 别名 远程地址 起别名
git push 别名 分支 推送本地分支上的内容到远程仓库
git clone 远程地址 将远程仓库的内容克隆到本地
git pull 远程库地址别名 远程分支名 将远程仓库对于分支最新内容拉下来,与当前本地分支直接合并

6.2.1 创建远程仓库别名

git remote -v :查看当前所有远程地址别名

git remote add 别名 远程地址:起别名

6.2.2 推送本地分支到远程仓库

git push 别名/远程地址 分支名

若出现 fatal: unable to access 'https://github.com/.....': OpenSSL SSL_read: Connection was reset, errno 10054 错误

输入 git config --hlobal http.sslVerify false 即可

6.2.3 拉取远程库的代码到本地库

若其他人修改了远程库的代码,此时本地库的代码和远程库不一致,可以使用拉取命令。

git pull 别名/远程地址 分支名

6.2.4 克隆远程仓库到本地

git clone 远程仓库地址

clone 作用:1、拉取代码。2、初始化本地库。3、创建别名

创建远程仓库的别名:

拉取:(本身就有旧版本代码)只需要最新版本的代码

克隆:需要所有代码

6.2.5 邀请成员进入团队

在仓库地址中

添加成员后,会有一个邀请链接

将其复制发送给对方

对方打开链接:

同意后,该成员才有推送代码的权限

6.3 跨团队协作

首先将目标远程库插入(fork)到自己的远程库中,(也可在线修改)然后克隆到本地库进行修改,push 到自己的远程库,然后发起 Pull Request。团队再进行审核,进行合并操作

6.4 SSH 免密登录

C:/User/用户名/目录下右键打开 Git 窗口

生成密钥

ssh-keygen -t rsa -C 邮箱地址

连敲入3次回车就会生成一个.ssh 目录

进入后有私钥和公钥文件,查看公钥文件内容。

将其复制到如下位置

添加成功

使用实例:

远程库和本地库内容不一致

复制 SSH 链接

此时使用 SSH 链接拉取远程库代码到本地库

成功拉取

示例2:

本地库修改代码push到远程库中

接下来往远程库中 push 代码使用 SSH 连接就不需要登录了

7. IDEA 集成 Git

7.1 配置 Git 忽略文件

  1. IDEA 特定文件

这些文件与项目实际功能无关,忽略掉可以屏蔽 IDE 工具之间的差异

怎么忽略?

  1. 创建忽略规则文件 xxx.ignore(建议为:git.ignore)

    为了方便引用,建议存放在C:/Users/用户名/ 文件目录中

文件模板内容

# Compiled class file
*.class

# Log file
*.log

# BlueJ files
.*.ctx

# Mobile Tools for Java(J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar

# virtual machine crash logs,see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*

.classpath
.project
.settings
target
.idea
*.iml

还要在.gitconfig 文件下添加内容

7.2 定位 Git 程序

配置Git

配置完成之后

文件名字会变成红色(表示未添加到暂存区)

7.3 添加到暂存区

添加暂存区

7.4 提交到本地库

提交完成后

修改代码(文件名字会变成蓝色)

修改后再添加到暂存区提交本地库(可以直接提交到本地库 IDEA 会自动帮我们添加到暂存区)

会对比之前版本和现版本的不同

7.5 切换不同版本

HEAD 指针指向当前的版本,master 指针指向最新版本

切换版本

右键需要查看的版本,点击 Checkout Revision

切换完成后:HEAD 指针指向当前查看的版本(代码区也随之变化)

7.6 创建分支

7.7 切换分支

7.8 合并分支

切换到 hot-fix 分支中

添加代码后切换回 master 分支(此时 master 分支是还未添加代码)

选择要合并到 master 分支的分支选择 Merge into Current

合并后

7.9 合并分支(合并冲突)

分别添加不同代码到不同分支(并且提交到本地库)

此时,合并分支,会出现以下界面

选择 Merge

Apply后

8. IDEA 集成 GitHub

8.1 登录 GitHub

因为账号和密码很难登录成功,使用 Token 登录

Token 在 GitHub 设置页面中生成

8.2 创建远程库

创建成功后会自动将代码 push 上去

8.3 push 推送本地库到远程库

先提交到本地库

再push到远程库

默认为 HTTPS 进行(网络影响较大)

可以使用 SSH进行。点击别名,再定义别名

这里的 URL 为远程库的SSH链接

然后选择新创建的别名

push 代码

push 是将本地库的代码推送到远程库,若本地库版本比远程库版本低,则会 push 失败。想要 push 成功,一定要保证本地库版本比远程库高。因此,动手改本地库代码前,检查一下远程库跟本地库代码的区别,若本地库版本低,切记先 pull 一下远程库代码,再更新本地库代码,后再修改,提交,push

总结:push 之前先 pull 一下代码

8.4 pull 拉取代码到本地库

pull 是拉取远程库代码到本地库,若远程库和本地库代码不一致,会自动合并,若自动合并失败,则需要手动解决冲突

8.5 clone 克隆远程库到本地

9. 码云

9.1 在 IDEA 中使用码云

IDEA 默认不使用码云插件,需要手动安装

跟 github 步骤一致,建议使用 HTTPS

10. 自建代码托管平台GitLab

官网:Download and install GitLab

文章作者: 临川
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 临川羡鱼
Git Git
喜欢就支持一下吧