Git笔记
为什么要学Git?
多人运动!版本控制,也叫做版本迭代
没有进行版本控制或者版本控制本身缺乏正确的流程管理,在软件开发过程中将会引入很多问题,
- 如软件代码的一致性
- 软件内容的冗余
- 软件过程的事物性
- 软件开发过程中的并发性
- 软件源代码的安全性
- 以及软件的整合等问题
那么如何管理多人协同开发项目?
版本控制
一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。
优点
- 实现跨区域多人协同开发
- 追踪和记载一个或者多个文件的历史记录
- 组织和保护你的源代码和文档
- 统计工作量
- 并行开发、提高开发效率
- 跟踪记录整个软件的开发过程
- 减轻开发人员的负担,节省时间,同时降低人为错误
主流产品
- Git
- SVN(Subversion)
- CVS(Concurrent Versions System)
- VSS(Micorosoft Visual SourceSafe)
- TFS(Team Foundation Server)
- Visual Studio Online
目前影响力最大且使用最广泛的是Git与SVN,GitHub和Gitee社区也非常火热。
版本控制的分类
本地版本控制
记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人用,如RCS。
集中版本控制
所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改。
代表产品:SVN、CVS
分布式版本控制
所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。
代表:Git
Git与SVN的区别
SVN是集中式版本控制系统,版本库集中放在中央服务器。
工作时用自己的电脑,先从中央服务器获取最新的版本,然后工作,完成工作后,再把自己做完的活推送到中央服务器。
集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。
Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库。
工作的时候不需要联网了,只需在连网时push到相应的服务器或其他用户。
协同的方法:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,
这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
Git是目前世界上最先进的分布式版本控制系统
Git历史
Git起源于 Linux,Linux内核维护最初提交到 BitKeeper上,到2005年 BitKeeper的商业公司收回 Linux内核社区免费使用 BitKeeper的权利。
于是Linux之父Linus torvalds
(李纳斯·托沃兹 )决定开发自己的版本系统,仅用两周就开发出了 Git!
Git是免费、开源的,最初Git是为辅助 Linux 内核开发的,来替代 BitKeeper!
Git安装
打开 git官网 ,下载git对应操作系统的版本。
下载对应的版本即可安装!安装:无脑下一步即可!
说明
- Git Bash:Unix与Linux风格的命令行,使用最多,推荐最多
- Git CMD:Windows风格的命令行
- Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令
Git配置
查看所有配置:git config -l
*注意必须要配置用户名和邮箱,表明身份
git config --global user.name "用户名"
git config --global user.email "邮箱"
所有的配置文件都保存在本地
系统级配置
在安装目录的etc文件夹下的gitconfig
用户级配置
在当前登录的用户目录下也有gitconfig文件
Git核心
本地工作区分为
- 工作目录 Working Directory 平时存放项目代码的地方
- 暂存区 Staging Area 保存即将提交到本地仓库的文件列表信息
- 资源库 Respository 存放数据的位置,包含所有提交的版本
工作流程
- 在工作目录添加或修改文件
- 将需要进行版本管理的文件放入暂存区
- git add .
- 将暂存区的文件提交到本地仓库
- git commit
- 提交到远程仓库
- git push
文件状态
- Untracked:未跟踪,不参与版本控制
- Unmodify:文件入库但未修改
- Modified:文件已修改,但仍未放到暂存区
- Staged:暂存状态,commit之后提交到本地仓库
.gitignore文件配置忽略信息
语法规则:
-
注释
- 可以使用Linux通配符
- *任意多个字符
- ?一个字符
- [abc]可选字符范围
- {“str1”,"str2"} 可选字符串
- !文件名,该文件除外
- /目录 往上忽略
- 目录/ 往下忽略
- target/ 表示target目录下的都不参与版本控制
相关命令
命令 | 说明 |
---|---|
git init | 在目录创建一个全新的仓库 |
git clone [url] | 从远程克隆一个仓库 |
git status | 查看文件状态 |
**git commit -m **[msg] | 提交并附带说明 |
还有远程仓库(Remote)托管代码的服务器,简单认为项目组中一台电脑用于远程数据交换
使用码云
注册->登录->设置个人信息
设置本机SSH公钥,免密连接
首先输入命令 ssh-keygen -t rsa
生成公钥文件
然后到当前登录的用户目录下找到.ssh文件夹
打开id_rsa.pub文件,全选,拷贝到码云的ssh设置中
创建仓库
创建好仓库之后就可以邀请团队成员
IDEA集成Git
- 按照平时的方法创建项目,第一次使用时需要指定Git的执行文件
- 将当前项目设为版本控制后就可以看到右上角多了一些图标
- 也可以在项目的文件夹下打开bash窗口,执行git init初始化仓库
-
修改文件,使用IDEA操作git
点击右上角绿色的打勾按钮,会显示下图的内容。
一般先commit到本地仓库,再push到远程仓库。
熟练之后可以两步一起操作,一步到位!
记得提交版本时添加备注信息哦
如果没有push成功还可以重新上传
使用命令无非就三部曲
- git add.
- git commit -m "说明信息"
- git push
分支说明
多人协作时非常重要!
master主分支应该非常稳定,用来发布新版本,一般情况下不允许在上面工作。
而是在dev分支下工作,若需要发布新版本再将稳定的dev分支代码合并到master主分支上。
在分支合并时,出现文件冲突,协商之后选择一个稳定的文件。
git branch 查看所有分支
git branch -r 查看所有分支
git btanch dev 创建开发dev分支
git btanch -d dev 删除dev分支
git checkout -b dev 创建并选择dev分支
git merge [branch] 合并指定分支到当前分支
git push origin --delete [分支 名] 删除远程分支
git branch -dr [remote/branch] 删除远程分支
还有很多学习资料在码云下面可以参考
总结
最后记录一下这次团队协作开发的感受。
最初不明白分支的概念,项目开始就一直在主分支上工作
刚开始的时候经常发生文件冲突,后来给每个人分模块在各自的包下写代码。冲突明显减少
在两周时间里,有很积极的同学,也有懒散的同学。但总的来说大家都挺努力~
要怪就怪自己管理经验不足,以后分配任务一定不能分多,而且重要的任务需要自己负责。
不能让某个环节堵塞整个项目进度。比如项目的登录功能,负责的同学一周没做出来??
后面很多功能都需要从session提取登录人信息,当时也没想到伪造默认登录人,一直干等着。
如果某个人负责的模块难度超过了他的能力,及时换人调整。否则给再久的时间也是徒劳。
为期两周的团队合作,最大的感触就是人和人之间是有差距的,不能用对自己的要求去对待别人。
宽容理解走得慢的同学,给他们一些简单的工作。鼓励和带动上进的同学,保证项目正常完成。