目 录

1、Git 概述

1.1 何为版本控制

  • 版本控制软件功能:

    • 版本管理:回退到历史上的任何版本
    • 共享代码:团队之间共享代码
    • 团队合作开发-代码整合:
  • 版本控制是一种记录文件内容变化, 以便将来查阅特定版本修订情况的系统。

1.2 为什么需要版本控制

个人开发过渡到团队协作。

需求

在项目开发中,团队协作管理代码和文件是每天必须要做的事情。大家一定会碰到如下几个场景和问题?

1:协同修改,多人并行开发修改服务器的文件
2:数据备份
3:版本管理,权限控制
4:如果文件和工程误删了还能找回来吗?
5:分支管理 1.0 2.0
6:遇到了文件冲突如何解决?
7:如何把一些我临时保存的文件不要提交?

Svn版本控制软件:

Git版本控制器软件:

小结

  • svn和git都是做版本控制的,如果不理解一句话: 记录代码的轨迹就好比每个人的成长阶段一样。

1.3 版本控制工具

➢ 集中式版本控制工具

CVS 、SVN(Subversion)、VSS……

集中化的版本控制系统诸如 CVS 、SVN 等, 都有一个单一的集中管理的服务器, 保存 所有文件的修订版本, 而协同工作的人们都通过客户端连到这台服务器, 取出最新的文件或 者提交更新。多年以来, 这已成为版本控制系统的标准做法。

这种做法带来了许多好处, 每个人都可以在一定程度上看到项目中的其他人正在做些什 么。而管理员也可以轻松掌控每个开发者的权限, 并且管理一个集中化的版本控制系统,要 远比在各个客户端上维护本地数据库来得轻松容易。

事分两面, 有好有坏。这么做显而易见的缺点是中央服务器的单点故障。如果服务器宕 机一小时, 那么在这一小时内, 谁都无法提交更新,也就无法协同工作。

集中管理方式在一定程度上看到其他开发人员在干什么,而管理员也可以很轻松掌握每个人的开发权限。

但是相较于其优点而言,集中式版本控制工具缺点很明显:

服务器单点故障
容错性差

➢ 分布式版本控制工具

Git 、Mercurial 、Bazaar、Darcs……

像 Git 这种分布式版本控制工具, 客户端提取的不是最新版本的文件快照, 而是把代码 仓库完整地镜像下来 (本地库)。这样任何一处协同工作用的文件发生故障, 事后都可以用 其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作, 实际上都是一次 对整个文件仓库的完整备份。

分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:

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

小结

  • svn它集中式的版本控制,不能离线工作。git分布式的版本控制,它版本放在用户自己的电脑。
  • svn不支持离线工作,版本全部都放在是中央服务器。如果中央服务器挂了。那么版本全部丢失。
  • git支持离线工作。版本都放用户自己电脑上完成。---- 分布式的版本控制。
  • svn是项目对仓库,git是仓库对仓库。

1.4 GIT的由来及发展史

概述

同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代。

Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002 年间)。到 2002 年,Linux 系统已经发展了十年了,代码库之大让 Linus 很难继续通过手工方式管理了,于是整个项目组开始启用分布式版本控制系统 BitKeeper 来管理和维护代码。

到 2005 年的时候,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了免费使用 BitKeeper 的权力。这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds )不得不吸取教训,只有开发一套属于自己的版本控制系统才不至于重蹈覆辙。他们对新的系统订了若干目标:

• 速度快 
• 简单的设计 
• 对非线性开发模式的强力支持(允许上千个并行开发的分支) 
• 完全分布式 
• 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量) 

Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。

Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。

历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。

小结

  • Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。

  • Git 易于学习, 占地面积小, 性能极快。 它具有廉价的本地库, 方便的暂存区域和多个工作流分支等特性。 其性能优于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具。

1.5 Git 工作机制

1、工作区:存放代码的地方

2、暂存区:临时存储,将工作区的代码让git知道,通过git add将代码放到暂存区

3、本地库:将暂存区的代码提交到本地库,就会生成对应的历史版本,这个代码就无法删除

4、远程库:将本地库的代码推送到远程库

1.6 Git 和代码托管中心

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

  • 局域网
    • GitLab:自己搭建 远程库
    • gogs: Gogs 是一款极易搭建的自助 Git 服务
  • 互联网
    • GitHub (外网),可能无法访问
    • Gitee 码云(国内网站)

比较出名的代码托管中心: GitHub 和 码云

1.6.1 什么是GitHub?

确切的说 GitHub 是一家公司,位于旧金山,由 Chris Wanstrath, PJ Hyett 与 Tom Preston-Werner 三位开发者在2008年4月创办。这是它的 Logo:

2008年4月10日,GitHub正式成立,地址:How people build software · GitHub ,主要提供基于git的版本托管服务。一经上线,它的发展速度惊为天人,截止目前,GitHub 已经发展成全球最大的开源社区。所以 Git 只是 GitHub 上用来管理项目的一个工具而已,GitHub 的功能可远不止于此!

1.6.2 什么是码云?

我们使用GitHub的时候,会感觉比较慢,为什么? 原因就是GitHub在遥远的美国,由于各种原因造成访问速度不怎么好,所以国内的git服务提供商,码云就起来了。

1.6.3 产品功能对比
功能码云 GiteeGitHub
代码托管,支持 Git/SVN
开源项目、代码片段
Issue
Wiki
Fork + Pull Request
组织
私有仓库免费协作人数5 人3 人
保护分支免费收费
在线 IDE(Gitee IDE)不支持
仓库自动备份不支持
禁止 Git 强推不支持
支持仓库访问 IP 限制不支持
企业级研发协作5 人免费收费
敏捷开发管理
任务看板(可灵活定义)
支持多级任务、关联任务
自动代码质量分析
快捷生成工作周报
代码克隆检测
自动生成 JavaDoc/PHPDoc
多语言 README 自动渲染
支持微信/钉钉通知
1.6.4 协作开发流程

2、软件安装

2.1 Git 下载与安装

百度上搜索Git

官网:
https://git-scm.com/

下载:https://git-scm.com/download/win/

下载Git安装程序,双击安装 Git-2.9.3.2-64-bit.exe

配置环境变量path

使用git --version查看 git 是否安装成功

2.2 TortoiseGit下载与安装

下载网址:https://tortoisegit.org/download/

在桌面空白处鼠标右键

说明TortoiseGit已经安装成功

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 设置用户签名

1)基本语法

git config --global user.name 用户名

git config --global user.email 邮箱

2)案例实操

说明:

签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到, 以此确认本次提交是谁做的。 Git 首次安装必须设置一下用户签名, 否则无法提交代码。 ※注意: 这里设置用户签名和将来登录 GitHub (或其他代码托管中心)的账号没有任何关系。

3.2 初始化本地库

1)基本语法

git init : 获取目录的管理权

2)案例实操

【第一步】在d盘创建目录:D:\git-space\git-0819

【第二步】进入D:\git-space\git-0819文件目录,右击鼠标,选择git bush here

【第三步】输入 git init 命令

【第四步】结果查看

3.3 查看本地库状态

1)基本语法

git status

2)案例实操

3.3.1 首次查看(工作区没有任何文件)

3.3.2 新增文件(hello.txt

(命令:yy复制,p粘贴)

3.3.3 再次查看(检测到未追踪的文件)

红色代表这个文件虽然有了,但是至少存在工作区,git从来没有追踪过这个文件

3.4 添加暂存区

3.4.1 将工作区的文件添加到暂存区

1)基本语法

git add 文件名

2)案例实操

3.4.2 查看状态(检测到暂存区有新文件)

3.5 提交本地库

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

1)基本语法

git commit -m 日志信息 文件名

2)案例实操

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

3.6 修改文件(hello.txt)

3.6.1 查看状态(检测到工作区有文件被修改)

3.6.2 将修改的文件再次添加暂存区

3.6.3 查看状态(工作区的修改添加到了暂存区)

3.6.4 提交到本地库

3.7 历史版本

3.7.1 查看历史版本

1)基本语法

git reflog 查看版本信息

git log 查看版本详细信息

2)案例实操

3.7.2 版本穿梭

1)基本语法

git reset –hard 版本号

2)案例实操

Git 切换版本, 底层其实是移动的 HEAD 指针。

4、 Git 分支操作

4.1 什么是分支

在版本控制过程中, 同时推进多个任务, 为每个任务, 我们就可以创建每个任务的单独 分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来, 开发自己分支的时 候, 不会影响主线分支的运行。对于初学者而言, 分支可以简单理解为副本, 一个分支就是 一个单独的副本。(分支底层其实也是指针的引用)

4.2 分支的好处

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

各个分支在开发过程中, 如果某一个分支开发失败, 不会对其他分支有任何影响。失败 的分支删除重新开始即可。

4.3 分支的操作

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

1)基本语法

git branch -v

2)案例实操

4.3.2 创建分支

1)基本语法

git branch 分支名

2)案例实操

4.3.3 切换分支

1)基本语法

git checkout 分支名

2)案例实操

【第一步】切换分支到hot-fix,在hot-fix分支上做修改

【第二步】修改hot-fix分支上的hello.txt

修改内容如下:

4.3.4 合并分支

1)基本语法

git merge 分支名

2)案例实操 在 master 分支上合并 hot-fix 分支

【第一步】切换到master分支

【第二步】合并hot-fix分支

【第三步】查看文件内容

4.3.5 产生冲突

冲突产生的表现: 后面状态为 MERGING

冲突产生的原因:

合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。 Git 无法替 我们决定使用哪一个。必须人为决定新代码内容。

查看状态(检测到有文件有两处修改)

制造冲突:

【第一步】 切换到master分支上,修改hello.txt

修改内容如下:

【第二步】 切换到hot-fix分支上,修改hello.txt

修改内容如下:

【第三步】 切换到master分支,merge合并 hot-fix分支

已经产生冲突!!!

4.3.6 解决冲突

1)编辑有冲突的文件,删除特殊符号,决定要使用的内容

特殊符号: <<<<<<< HEAD 当前分支的代码 ======= 合并过来的代码 >>>>>>> hot-fix

​ 修改文件如下:

2)添加到暂存区

3)执行提交(注意: 此时使用git commit 命令时不能带文件名)

4)注意

我们修改的只是master分支的内容,hot-fix分支的内容没有发生改变

5、 Git 团队协作机制

5.1 团队内协作

5.2 跨团队协作

6、 Gitee码云 操作

码云网址:https://gitee.com/

账号验证邮箱
yuanxinqi2008yuanxinqi2008@126.com
yuanxinqi2009yuanxinqi2009@126.com
yuanxinqi2010yuanxinqi2010@126.com

6.1 创建远程仓库

6.2 远程仓库操作

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

1)基本语法

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

git remote add 别名 远程地址

2)案例实操

https://gitee.com/yuanxinqi/git0819.git

这个地址在创建完远程仓库后生成的连接, 如图所示红框中

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

1)基本语法

git push 别名 分支 : 推送的最小单位是分支,所以一定要指定分支

2)案例实操

【第一步】切换到master主分支

【第二步】git push git0819 master推送到主分支

【第三步】推送的时候需要登录

【第四步】推送成功,此时发现已将我们 master 分支上的内容推送到 码云创建的远程仓库。

6.2.3 拉取远程仓库内容

1)基本语法

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

2)案例实操

【第一步】远程操作修改文件

【第二步】修改内容如下:

【第三步】提交修改

【第四步】本地拉取

【第五步】查看本地文件

6.2.4 克隆远程仓库到本地

1)基本语法

git clone 远程地址

2)案例实操

【第一步】创建git-0820文件夹

【第二步】执行克隆命令

6.2.5 邀请加入团队

1)选择邀请合作者

2)填入想要合作的人

3 ) 复 制 地 址 并 通 过 微 信 钉 钉 等 方 式 发 送 给 该 用 户 , 复 制 内 容 如 下 :
https://gitee.com/yuanxinqi/git0819/invite_link?invite=fa13a6a6c165941240d612a81902b3c7d3d58b53e8e9499fb7993663152babc51072802d03f1afc25f318cd36bbddc3a

4)在 其他人 打开链接,点击接受邀请。

5)成功之后可以在 yuanxinqi2009 这个账号上看到 git-Test 的远程仓库。

6)yuanxinqi2009可以修改内容并 push 到远程仓库。

7)回到 yuanxinqi2008 的 GitHub 远程仓库中可以看到,最后一次是 yuanxinqi2009提交的。

6.3 SSH 免密登录

我们可以看到远程仓库中还有一个 SSH 的地址,因此我们也可以使用 SSH 进行访问。

具体操作如下:

【第一步】进入windows的家目录,C:\Users\yxq,删除.ssh文件

【第二步】在此处点击git bash here

【第三步】输入命令: ssh-keygen -t rsa -C yuanxinqi2008@126.com,然后点击三次回车

【第四步】查看.ssh文件

【第五步】点击git bash here,进入.ssh目录

【第六步】查看id_rsa.pub 文件内容

【第七步】登录 Gitee,点击用户头像→设置→SSH 公钥


在这里插入图片描述

【第八步】复制公钥内容,点击确定

【第九步】输入密码认证,设置公钥成功

【第十步】测试

7、IDEA集合Git

7.1 配置Git忽略文件-IDEA特定文件

问题 **1:**为什么要忽略他们?

答: 与项目的实际功能无关, 不参与服务器上部署运行。把它们忽略掉能够屏蔽 IDE 工具之间的差异。

问题 2:怎么忽略?

1)创建忽略规则文件 xxxx.ignore (前缀名随便起, 建议是 git.ignore)

这个文件的存放位置原则上在哪里都可以, 为了便于让~/.gitconfig 文件引用, 建议也放在用 户家目录下

git.ignore 文件模版内容如下:

# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# 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

2)在.gitconfig 文件中引用忽略配置文件(此文件在 Windows 的家目录中)

[user]
	name = yuanxinqi
	email = yuanxinqi2008@126.com
[core]
excludesfile = C:/Users/yxq/git.ignore
	

注意:这里要使用“正斜线(/)”,不要使用“反斜线(\)”

7.2 定位 Git 程序

IDEA配置Git程序

7.3 初始化本地库

【目标】在idea中初始化项目,将项目纳入git管理

【第一步】VCS–> Import into Version Control --> Create Git Repository

【第二步】选择要初始化的本地项目

【第三步】在该项目下生成了 .git文件

7.4 添加到暂存区

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

7.5 提交到本地库

7.6 切换版本

【第一步】在 IDEA 的左下角, 点击 Version Control,然后点击 Log 查看版本

【第二步】右键选择要切换的版本, 然后在菜单里点击 Checkout Revision。

7.7 创建分支

【第一步】选择 Git ,在 Repository 里面,点击 Branches 按钮。

【第二步】在弹出的 Git Branches 框里,点击New Branch 按钮。

【第三步】填写分支名称,创建 hot-fix 分支。

【第四步】在 IDEA 的右下角看到 hot-fix,说明分支创建成功, 并且当前已经切换成 hot-fix 分 支

7.8 切换分支

【第一步】在 IDEA 窗口的右下角, 切换到 master 分支。

【第二步】在 IDEA 窗口的右下角看到了master,说明 master 分支切换成功。

7.9 合并分支

【第一步】在 IDEA 窗口的右下角, 将 hot-fix 分支合并到当前 master 分支。

【第二步】如果代码没有冲突, 分支直接合并成功, 分支合并成功以后, 代码自动提交, 无需手动 提交本地库。

7.10 解决冲突

如图所示, 如果 master 分支和 hot-fix 分支都修改了代码, 在合并分支的时候就会发生 冲突。

【第一步】在hot-fix分支上,增加如下代码,并且提交

【第二步】在master 分支上,增加如下代码,并且提交

【第三步】 我们现在站在 master 分支上合并 hot-fix 分支, 就会发生代码冲突。

点击 Conflicts 框里的 Merge 按钮,进行手动合并代码。

【第四步】手动合并代码

手动合并完代码以后,点击右下角的 Apply 按钮。

代码冲突解决, 自动提交本地库。

8、IDEA集成码云

8.1 IDEA 安装码云插件

【第一步】Idea 默认不带码云插件, 我们第一步要安装 Gitee 插件。

如图所示, 在 Idea 插件商店搜索 Gitee,然后点击右侧的 Install 按钮。

安装成功后,重启 Idea。

Idea 重启以后在Version Control 设置里面看到 Gitee,说明码云插件安装成功。

【第二步】在码云插件里面添加码云帐号, 我们就可以用Idea 连接码云了。

8.2 分析工程到码云Gitee

【第一步】选择Share…

【第二步】填入信息,点击share

【第三步】成功提醒:

【第四步】查看gitee码云工程

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

【第一步】点击push

【第二步】自定义远程库链接

【第三步】给远程库链接定义个 name,然后再 URL 里面填入码云远程库的 HTTPS 链接即可。码云服务器在国内, 用 HTTPS 链接即可, 没必要用 SSH 免密链接。

然后选择定义好的远程链接,点击 Push 即可。

【第四步】看到提示就说明 Push 远程库成功。

【第五步】去码云远程库查看代码。

8.4 pull拉取远程库到本地库

【第一步】直接在服务器修改代码

【第二步】选择pull

【第三步】查看结果

=========================================================

后记

好啦,以上就是本期全部内容,能看到这里的人呀,都是能人

十年修得同船渡,大家一起点关注。

我是♚焕蓝·未来,感谢各位【能人】的:点赞收藏评论,我们下期见!

各位能人们的支持就是♚焕蓝·未来前进的巨大动力~

注:如果本篇Blog有任何错误和建议,欢迎能人们留言!

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐