Git 版本控制 (一)

一、什么是 版本控制
版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。
- 实现跨区域多人协同开发
- 追踪和记载一个或者多个文件的历史记录
- 组织和保护你的源代码和文档
- 并行开发、提高开发效率
- 跟踪记录整个软件的开发过程
等等
简单说就是用于管理多人协同开发项目的技术。
1.常用的版本控制
目前影响力最大和适用范围最广的主流的版本控制:
- Git
- SVN(Subversion)
而这两种也代表着不同的类型的版本控制,集中版本控制 和 分布式版本控制
1.1 SVN
属于集中版本控制,即所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改。

所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。
1.2 Git
属于分布式版本控制。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o8LleL7T-1592805568838)(AD9E450C5A4E41D6BA7C95D6A804DE3A)]](https://i-blog.csdnimg.cn/blog_migrate/7a3b2eb86debc629bbc79e158a9e9f23.png)
所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。
1.3 Git与SVN最主要区别
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。
Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
二、Git安装与配置
1.什么是Git
1.1
Git是目前世界上最先进的分布式版本控制系统。
优点:
- 适合分布式开发,强调个体。
- 公共服务器压力和数据量都不会太大。
- 速度快、灵活。
- 任意两个开发者之间可以很容易的解决冲突。
- 离线工作。
缺点:
- 模式上比SVN更加复杂。
- 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
2.搭建Git工作环境
2.1 下载安装Git
下载完成后,一步步安装即可
2.2 启动Git
右键鼠标会有Git选项

Git Bash Here
Unix与Linux风格的命令行,使用最多,推荐最多

Git GUI Here
是Git自带的图形化工具,可以直观的操作Git

2.3 Git配置
- 查看Git版本
git version
如上图,可知我下载的Git版本为:2.26.2
- 查看配置
git config -l

查看不同级别的配置文件:
查看系统config
git config --system --list
查看当前用户(global)配置
git config --global --list
查看当前仓库配置信息
git config --local --list
2.3.1 设置用户名与邮箱(用户标识,必要)
当你安装Git后首先要做的事情是设置你的用户名称和e-mail地址。这是非常重要的,因为每次Git提交都会使用该信息。它被永远的嵌入到了你的提交中:
git config --global user.name “name”
git config --global user.email xxxx@163.com
查看配置的用户名称和e-mail
git config --global user.name
git config --global user.email
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QzpIQT7h-1592805568846)(7DC7E5C8698240808D214C03E8B1BEBA)]](https://i-blog.csdnimg.cn/blog_migrate/8c2def1c339137de510dd574d045cdf8.png)
只需要做一次这个设置,如果你传递了–global 选项,因为Git将总是会使用该信息来处理你在系统中所做的一切操作。如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行该命令而不要–global选项。 总之–global为全局配置,不加为某个项目的特定配置。
现在我查看下公司项目clone下来的项目,在项目所在的目录中,右键打开 Git Bash Here,可以看到
用户名和邮箱都是刚才的全局配置

如果想单独为某个项目配置单独的用户名和邮箱 ,只需将 –global 去掉即可
git config user.name “xx”
git config user.email xxxx@163.com

2.3.2 创建全新的仓库
2.3.2.1 本地新建仓库
需要用GIT管理的项目的根目录执行:
git init
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qaMrwO7T-1592805568848)(76D284828E8247FF944D0D44DC4FE71E)]](https://i-blog.csdnimg.cn/blog_migrate/2c97f3c168bdea83fd3cd8f6bf0e7277.png)
同时,该项目的根目录会多出一个 .git 文件夹(该文件夹是隐藏文件夹)

关于版本等的所有信息都在这个目录里面。
2.3.2.2 克隆远程仓库
克隆远程目录,是将远程服务器上的仓库完全镜像一份至本地
git clone [url]
比如我们要从克隆的远程仓库托管在github上,地址为:https://github.com/PuppetZ/Utils.git
,这是一个公开的项目

![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xfqjj1bQ-1592805568850)(EDF155D8AB944496ABA4ECAD1445E635)]](https://i-blog.csdnimg.cn/blog_migrate/3e81e32a7730fcefad3c18ba39329761.png)

2.3.2.3 将本地新建的仓库上传到GitHub
2.3.2.3.1 查看本地仓库 文件状态
git status

可以看到这些文件成红色,表明这些文件还没有提交到暂存区中,提交单个文件的命令
git add [文件名]
如果需要将当前目录的所有文件到暂存区
git add .
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xd1cCpgA-1592805568852)(4CA0831886024B20B5C788A77607723D)]](https://i-blog.csdnimg.cn/blog_migrate/841c6e65f4e07524d30e05883b0396bd.png)
图中的警告是指
由于Linux中的换行符是LF,而Windows中的换行符是CRLF,如果想用Windows下的git管理来自Linux的文本文件,git会默认将LF转换成CRLF,并发出烦人的warning。
我们这里无需理会。如果无法添加文件,我们可以禁止Git自动转换
git config --global core.autocrlf false
再次查看文件状态 git status

文件全部变为了绿色,表明文件以及提交到暂存区。接下来我们需要把文件提交到本地仓库
git commit -m “提交日志”

查看下文件状态

工作树是干净的,全部已经提交。
2.3.2.3.2 GitHub新建远程仓库,项目提交到远程仓库
GitHub上新建远程仓库。(GitLab、公司服务器新建远程仓库类似)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8bGrwSs1-1592805568855)(2F4404B181AD480B9540C4058D4979D4)]](https://i-blog.csdnimg.cn/blog_migrate/e87b7580c908c6271f0157e660eac785.png)
本地仓库关联远程仓库
git remote add origin [远程仓库url]
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LkJwgNAP-1592805568856)(8CEAB1946F3945679ED2FB6EB5325A47)]](https://i-blog.csdnimg.cn/blog_migrate/27fe4eb0b4a48ebe48182ed2ab6ce6b1.png)
本地仓库提交到远程仓库
git push -u origin master
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9XbNJaTs-1592805568857)(49E3066271D64BC0AE27904A79D5D5DF)]](https://i-blog.csdnimg.cn/blog_migrate/045a0b65346b232ec928402125688e60.png)
提交的时候需要登录Github。一般我们默认将项目的git用户名和邮箱配置程Github用户名/邮箱。(GitLab同理)
如果公司自己搭建服务器,建议将项目的git用户名和邮箱配置成分配我们的公司服务器的账号和邮箱。
如图,即上传远程仓库成功
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-omPC4rcx-1592805568858)(73916FB4D0F14E6B8AB86463D69B90DC)]](https://i-blog.csdnimg.cn/blog_migrate/629ba077218ad95d04d34eafd3af7f65.png)
查看GitHub,也可以看出项目上传到远程仓库
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UMQIDwT8-1592805568859)(098967F6D5AA4240B3A83AE22D15300E)]](https://i-blog.csdnimg.cn/blog_migrate/8ff1d54927666b9f06ccc92ae5d38645.png)
这样我们可以将本地项目上传到Github/GitLab/公司服务器搭建的远程仓库。
2.4 IDE中使用Git
我们除了使用命令行可以进行Git操作,我们还可以在IDE中使用Git进行操作。
目前Android 开发主流工具为Android studio,后台开发中使用IntelliJ IDEA的较多。其实Android studio 是IntelliJ IDEA社区版上剔除其他功能的一款专注Android开发的插件,可以说是弱化版的IntelliJ IDEA。
我们都可以在其中进行Git版本控制
2.4.1 配置Git
右上角
File --Settings – Version Control --Git
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l96WMjMa-1592805568859)(74F1DDE146A54548B9B75996B4D5F383)]](https://i-blog.csdnimg.cn/blog_migrate/e189037acd533e3f3e7cceaf753a7e13.png)
IDE会默认检测电脑中安装的Git,我们可以点击 Test
检测是否配置Git成功,Git配置成功会显示电脑安装Git版本
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ABQwbABx-1592805568860)(8091746C849A44E0B39FB38F68B03D11)]](https://i-blog.csdnimg.cn/blog_migrate/22d34dae2ff64cc8a6a784ca3f8ee9a9.png)
2.4.1 本地项目初始化本地仓库
如果我们需要将本地项目添加到Git本地仓库
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8TSkL3vJ-1592805568861)(00CA0E19929A42B9B7AE6B5CBBF70748)]](https://i-blog.csdnimg.cn/blog_migrate/7e29c66dcef46c97f12824a1ada53143.png)
初始化本地仓库成功后,你会发现项目中的代码全部变为了红色,表明代码还没加入到缓存区,也就是还没有执行命令行中的
git add
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WStLlgta-1592805568862)(8FCE6E08968C44DB98A010BDDF7C6224)]](https://i-blog.csdnimg.cn/blog_migrate/d6e20f3e2faf323d444ffe0b8414b748.png)
我们接下来直接 add 即可。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UaPZ4KQm-1592805568862)(E22C188CDE514DF9BA33BA5759A93ECB)]](https://i-blog.csdnimg.cn/blog_migrate/9505d0f52b7a41541dd592293f8c9d89.png)
项目添加到缓存区后,代码颜色变为了绿色。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pnwxISgN-1592805568863)(200F568CD9034A20823A438B3160617F)]](https://i-blog.csdnimg.cn/blog_migrate/8bcb9257fe18166da148b5f1ef4d816a.png)
接下来执行 commit ,会将缓存区中的代码上传到本地仓库
等同于命令行中的
git commit
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XOtf0qJ8-1592805568864)(F5831768A73E450D8DEFFA820D9219D9)]](https://i-blog.csdnimg.cn/blog_migrate/0e0fd1b68b1eb24e009bf0a828ec6832.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gQs3XCGY-1592805568864)(06FE16B103F947568A52064899828E2C)]](https://i-blog.csdnimg.cn/blog_migrate/6c6039da30e4665dd18beaa0f80cd50d.png)
执行 commit 时,我们需要添加 commit message
等同于命令行
git commit -m [commit message]
图中下方会显示每个文件提交时,改变的代码。
提交时,IDE会自动给你检测你的代码中有多少错误和警告,你可以选在修改之后再进行提交
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AMlOnYsK-1592805568865)(C46DEC01D94F4D5F9531E77322521976)]](https://i-blog.csdnimg.cn/blog_migrate/d1ee56dc7431bc21471a0c43eb0ad9bc.png)
提交成功后,你会发现代码颜色变成了默认的白色
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AVMUa1kV-1592805568866)(1841A5CFB8FA4B5CA70B3A7BEF9F0FE2)]](https://i-blog.csdnimg.cn/blog_migrate/3f84e861167fe3013013ad2054d44c53.png)
如果我们对某个文件进行了修改,目录中的文件颜色会变为蓝色
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wA6dYL4A-1592805568866)(FA324602D2A841B280C3768FE6F9F59F)]](https://i-blog.csdnimg.cn/blog_migrate/92a7043b244b05ee5e5e5ffe8a127fc7.png)
修改完成之后,我们在执行之前的操作提交操作即可。
保证本地代码都已提交到本地仓库后,我们可以推送到远程仓库。先关联远程仓库,如同命令行
git remote add origin [远程仓库url]

![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5eZlnhyA-1592805568867)(5AB607FB398E496DB80194C93F3726E9)]](https://i-blog.csdnimg.cn/blog_migrate/de63ebfbaa34486f08aea478afc6fdb3.png)
代码推送到远程仓库
git push -u origin master

这样我们本地项目就会推送到GitHub/GitLab/公司服务器的远程仓库。
2.4.2 远程仓库 clone 项目
我们需要从远程仓库 clone 到本地项目,也可直接在IDE中操作。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-frBaBXng-1592805568868)(8A4C903AAD4145A78BA69541D652EC71)]](https://i-blog.csdnimg.cn/blog_migrate/4f298e69adc4b3620e184cbf77cb5203.png)
填入远程仓库url和 clone 到本地的目录文件夹即可
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2gh08tRv-1592805568870)(5E3CB09FE4084121ACE3C51BD342052D)]](https://i-blog.csdnimg.cn/blog_migrate/b2c5055f98b6bd5e8ef9d7ddedc8e97d.png)
以上就是我们使用Git进行项目的版本控制的两种方法,我个人认为在IDE中操作,是一种图形化的操作,可以给人更加直观的感受,也更加简便。不过也会有人认为使用命令行操作更加的高大上,专业。无论使用哪种方式都是为了我们更好的进行版本控制,那种简单便捷使用哪种,毕竟使用Git是为了让我们开发效率更高。
322

被折叠的 条评论
为什么被折叠?



