Git版本控制使用
Git 版本控制 (一)
一、什么是 版本控制
版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。
- 实现跨区域多人协同开发
- 追踪和记载一个或者多个文件的历史记录
- 组织和保护你的源代码和文档
- 并行开发、提高开发效率
- 跟踪记录整个软件的开发过程
等等
简单说就是用于管理多人协同开发项目的技术。
1.常用的版本控制
目前影响力最大和适用范围最广的主流的版本控制:
- Git
- SVN(Subversion)
而这两种也代表着不同的类型的版本控制,集中版本控制 和 分布式版本控制
1.1 SVN
属于集中版本控制,即所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改。
所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。
1.2 Git
属于分布式版本控制。
所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时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 [email protected]
查看配置的用户名称和e-mail
git config --global user.name
git config --global user.email
只需要做一次这个设置,如果你传递了–global 选项,因为Git将总是会使用该信息来处理你在系统中所做的一切操作。如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行该命令而不要–global选项。 总之–global为全局配置,不加为某个项目的特定配置。
现在我查看下公司项目clone下来的项目,在项目所在的目录中,右键打开 Git Bash Here,可以看到
用户名和邮箱都是刚才的全局配置
如果想单独为某个项目配置单独的用户名和邮箱 ,只需将 –global 去掉即可
git config user.name “xx”
git config user.email [email protected]
2.3.2 创建全新的仓库
2.3.2.1 本地新建仓库
需要用GIT管理的项目的根目录执行:
git init
同时,该项目的根目录会多出一个 .git 文件夹(该文件夹是隐藏文件夹)
关于版本等的所有信息都在这个目录里面。
2.3.2.2 克隆远程仓库
克隆远程目录,是将远程服务器上的仓库完全镜像一份至本地
git clone [url]
比如我们要从克隆的远程仓库托管在github上,地址为:https://github.com/PuppetZ/Utils.git
,这是一个公开的项目
2.3.2.3 将本地新建的仓库上传到GitHub
2.3.2.3.1 查看本地仓库 文件状态
git status
可以看到这些文件成红色,表明这些文件还没有提交到暂存区中,提交单个文件的命令
git add [文件名]
如果需要将当前目录的所有文件到暂存区
git add .
图中的警告是指
由于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、公司服务器新建远程仓库类似)
本地仓库关联远程仓库
git remote add origin [远程仓库url]
本地仓库提交到远程仓库
git push -u origin master
提交的时候需要登录Github。一般我们默认将项目的git用户名和邮箱配置程Github用户名/邮箱。(GitLab同理)
如果公司自己搭建服务器,建议将项目的git用户名和邮箱配置成分配我们的公司服务器的账号和邮箱。
如图,即上传远程仓库成功
查看GitHub,也可以看出项目上传到远程仓库
这样我们可以将本地项目上传到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
IDE会默认检测电脑中安装的Git,我们可以点击 Test
检测是否配置Git成功,Git配置成功会显示电脑安装Git版本
2.4.1 本地项目初始化本地仓库
如果我们需要将本地项目添加到Git本地仓库
初始化本地仓库成功后,你会发现项目中的代码全部变为了红色,表明代码还没加入到缓存区,也就是还没有执行命令行中的
git add
我们接下来直接 add 即可。
项目添加到缓存区后,代码颜色变为了绿色。
接下来执行 commit ,会将缓存区中的代码上传到本地仓库
等同于命令行中的
git commit
执行 commit 时,我们需要添加 commit message
等同于命令行
git commit -m [commit message]
图中下方会显示每个文件提交时,改变的代码。
提交时,IDE会自动给你检测你的代码中有多少错误和警告,你可以选在修改之后再进行提交
提交成功后,你会发现代码颜色变成了默认的白色
如果我们对某个文件进行了修改,目录中的文件颜色会变为蓝色
修改完成之后,我们在执行之前的操作提交操作即可。
保证本地代码都已提交到本地仓库后,我们可以推送到远程仓库。先关联远程仓库,如同命令行
git remote add origin [远程仓库url]
代码推送到远程仓库
git push -u origin master
这样我们本地项目就会推送到GitHub/GitLab/公司服务器的远程仓库。
2.4.2 远程仓库 clone 项目
我们需要从远程仓库 clone 到本地项目,也可直接在IDE中操作。
填入远程仓库url和 clone 到本地的目录文件夹即可
以上就是我们使用Git进行项目的版本控制的两种方法,我个人认为在IDE中操作,是一种图形化的操作,可以给人更加直观的感受,也更加简便。不过也会有人认为使用命令行操作更加的高大上,专业。无论使用哪种方式都是为了我们更好的进行版本控制,那种简单便捷使用哪种,毕竟使用Git是为了让我们开发效率更高。