Git
一.Git的简介和安装
1.1Git简介
Linux 之父 Linus 在 1991 年创建开源的 Linux 操作系统之后,多年来依靠全世界广大热心志愿者的共同建设,经过长足发展,现已成为世界上最大的服务器系统。系统创建之初,代码贡献者将源码文件发送给 Linus,由其手动合并。这种方式维持多年后,代码量已经庞大到人工合并难以为继,于是深恶集中式版本控制系统的 Linus 选择了一个分布式商业版本控制系统 BitKeeper,不过 Linux 社区的建设者们可以免费使用它。BitKeeper 改变了 Linus 对版本控制的认识,同时 Linus 发现 BitKeeper 有一些不足,而且有个关键性的问题使之不能被广泛使用,就是不开源。
在 2005 年,BitKeeper 所在公司发现 Linux 社区有人企图破解它,BitKeeper 决定收回 Linux 社区的免费使用权。Linus 对此事调解数周无果,找遍了当时已知的各种版本控制系统,没有一个看上眼的,一怒之下决定自己搞一个。Linus 花了十天时间用 C 语言写好了一个开源的版本控制系统,就是著名的 Git。
2007 年旧金山三个年轻人觉得 Git 是个好东西,就搞了一个公司名字叫 GitHub,第二年上线了使用 Ruby 编写的同名网站 GitHub,这是一个基于 Git 的免费代码托管网站(有付费服务)。十年间,该网站迅速蹿红,击败了实力雄厚的 Google Code,成为全世界最受欢迎的代码托管网站。2018 年 6 月,GitHub 被财大气粗的 Microsoft 收购。2019 年 1 月 GitHub 宣布用户可以免费创建私有仓库。根据 2018 年 10 月的 GitHub 年度报告显示,目前有 3100 万开发者创建了 9600 万个项目仓库,有 210 万企业入驻。
一句话来说Git是目前世界上最先进的分布式版本控制系统。
1.2集中式版本控制系统

优点:
SVN版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器
缺点:
必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就郁闷了
1、版本管理的服务器一旦崩溃,硬盘损坏,代码如何恢复?
2、程序员上传到服务器的代码要求是完整版本,但是程序员开发过程中想做小版本的管理,怎么破?
3、系统正在上线运行,时不时还要修改bug,要增加好几个功能要几个月,如何管理几个版本?
4、如何管理一个分布在世界各地、互不相识的大型开发团队?
1.3分布式版本控制系统

Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
1.4Git工作机制

注意,所有 Git 命令都以 git
开头。
1.5Git安装
下载地址:https://git-scm.com/download

1.5.1浏览协议,下一步

1.5.2选择安装位置,下一步

1.5.3Git Bash需要选择,其余下一步就好

1.5.4默认下一步

1.5.5默认编辑器,下一步

1.5.6默认下一步

1.5.7选择git命令执行环境
这里推荐选择第一个,就是单独用户Git自己的命令行窗口。

1.5.8 HTTPS传输协议:使用SSL传输协议


1.5.9Configuring the line ending conversions
选第一个

1.5.10terminal emulator
第一个选项:使用专用的Git窗口(推荐)
第二个选项:使用windows的cmd命令行窗口。


1.5.11 其余都默认即可安装完成


安装完成后,在任意的文件目录下,右键都可以开打Git的命令行窗口。

Git是分布式版本控制系统,所以需要填写用户名和邮箱作为一个标识。
--global 表示全局属性,所有的git项目都会共用属性
git config --global user.name "用户名"
git config --global user.email "用户邮箱"

C:\Users\Administrator路径下的.gitconfig文件里面可以看到,如果不用命令,也可以直接在文件中进行设置。

二.Git的实操
2.1创建本地库
创建目录(用作本地版本库):C:\GITRepository\git-demo
C:\GITRepository\git-demo目录打开Git Bash窗口,初始化仓库:git init

Git Bash窗口里面可以使用Linux命令
2.2查看状态

2.3创建编辑文件

2.4将文件添加到暂存区
git add hello.txt

2.5将文件提交到本地库
-m 接注释内容
git commit -m "第一次提交" hello.txt

查看版本信息
$ git log
2.6修改文件
修改hello.txt 文件,随便添加一些内容

修改后查看状态 hello文件又爆红了,表示修改后的文件还没有被添加到暂存区
添加暂存区,并提交修改
git add hello.txt
git commit -m "第二次提交" hello.txt
2.7历史版本
2.7.1查看历史版本
git reflog 查看版本信息
git log 查看版本详细信息

2.7.2版本选择
git reset --hard 版本号
三.git分支
系统上线后,又要修改bug,又要开发新的功能,由于新功能没有开发完,所以需要建立分支,一边修改bug,一边开发新功能,最终合并.

3.1查看分支
git branch -v

3.2创建分支
创建测试分支 git branch <分支名>
git branch test

3.3切换分支
切换到test分支 git checkout <分支名>

3.3.1在test分支下创建a.java,添加暂存区,提交本地库
touch a.java
git add a.java
git commit -m "测试分支第一次提交" a.txt
3.3.2切换回master分支,查看是否修改
git chechout master
ls
发现test创建的a.java在master没有

3.4合并分支
先切换到主干分支,然后合并分支
git checkout master
git merge test

此时可以看见test分支上的修改,分支合并完成
3.5删除分支
删除test分支
git branch -d test
查看分支
git branch -v

3.6版本冲突
3.6.1test分支操作
创建test分支
git branch test
切换分支到
git checkout test
修改a.java,添加1行数据
vim a.java
把a.java添加到暂存区
git add a.java
把a.java提交到本地库
git commit -m "test修改a.java"

3.6.2master分支操作
切换到master分支
git checkout master
修改a.java,添加1行数据
vim a.java
把a.java添加到暂存区
git add a.java
把a.java提交到本地库
git commit -m "test修改a.java" a.java
产生冲突
git merge test

产生冲突原因:test分支和master分支在同一个文件的相同位置有两套不同的修改,git无法决定使用哪一套代码,必须人为决定新代码的内容。
3.6.3解决冲突
查看冲突文件
cat a.java
手动解决,修改冲突文件,留下需要的代码
vim a.java
添加、提交解决冲突
git add a.java
git commit -m "分支合并,解决冲突"

四、IDEA集成Git
4.1配置忽略文件
这些文件与项目的实际功能无关,不参与服务器上部署运行。把它们忽略掉能够屏蔽IDE工具之间的差异。
# 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/
创建git.ignore文件,把上诉内容添加进去并在~/.gitconfig中引用
注意:
这里要使用“正斜线(/)”,不要使用“反斜线(\)”
[user]
name = liuzhihao
email = lzhgy163@163.com
[core]
excludesfile =C:/Users/刘智豪/git.ignore
4.2找到git安装位置
左上角file->settings

4.3初始化版本信息

4.4添加到暂存区
右键点击项目选择Git->Add将项目添加到暂存区。

4.5提交到本地库


4.6切换版本
在IDEA的左下角,点击git,然后点击Log查看版本

右键选择要切换的版本,然后在菜单里点击CheckoutRevision

4.7创建分支
git->branches

在弹出的GitBranches框里,点击NewBranch按钮。

4.8切换分支
右下角可以选择分支

4.9合并分支
Git->Merge


4.10版本冲突
在test分支上修改代码,并提交到版本库

在master分支上相同位置修改代码,并提交到版本库

把test分支合并到master分支

产生冲突手动解决冲突


五、码云
码云(Gitee)是开源中国社区推出的代码托管协作开发平台,支持Git,提供免费的私有仓库托管。Gitee目前已经成为国内最大的代码托管平台。帮助开发者存储和管理其项目源代码,且能够追踪、记录并控制用户对其代码的修改,提供稳定、高效、安全的云端软件开发协作平台。无论是个人、团队或是企业,都能够用Gitee实现代码托管、项目管理、协作开发。其网址是https://gitee.com/,使用方式跟GitHub一样,而且它还是一个中文网站。
5.1账号注册
登录官网https://gitee.com/,点击注册,依次填写内容


5.2账号登录
输入账号密码登录

5.3创建远程仓库
点击右上角,创建仓库


5.4idea集成码云
安装getee插件

账号密码登录

将本地代码push到码云远程库

自定义远程库连接


点击push完成上传