聊git之前,需要了解一个概念,版本控制!
什么是版本控制?就是版本迭代,新的版本!
版本控制(Revision Control)可以在开发的过程中管理我们对文件,目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。
简单来说,版本控制就是管理多人协同开发项目的技术。
多人开发就必须要使用版本控制,否则代价会比较大!(比如临近上线,发现团队内开发的代码,每个人都不太一样,导致上线后代码有缺失!)
所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新版本。
由于所有的版本数据都存在服务器上,如果用户不联网,就看不到历史版本,也无法切换分支工作。并且,所有数据都保存在单一的服务器上,一旦服务器损坏,就会丢失所有的数据。解决方法:服务器定期备份。
所有版本信息都会全部同步到本地的每个用户,用户不联网也可以在本地查看所有历史版本,可以离线在本地提交代码,只需在联网时push到对应的服务器或push到其他用户的分支账号。由于每个用户都保存所有的版本数据,只要一个用户的设备没有问题,就可以恢复所有的数据。
好处:每个人都拥有全部的代码!不会因为服务器损坏,或者网络问题,造成不能工作的情况!
坏处:Git无法设置权限,每个人都拥有全部的代码!一旦某个人跑路了,有可能会带走所有的代码。。而SVN可以设置权限,用户不一定拥有全部的代码,因此仍然有很多公司采用SVN来管理代码。
SVN和Git的区别
- SVN是集中式版本控制系统,版本库集中存放在中央服务器,工作的时候需要先从中央服务器得到最新的版本,然后工作,完成工作后,需要把做完的内容推送到中央服务器。集中式版本控制系统必须联网才能工作,对网络带宽要求较高。
- Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网。工作完之后直接推送给其他人,合并代码即可。Git可以直接看到更新和新增了哪些代码和文件。对网络没有要求,可以离线工作。
Linux社区中存在很多的大佬!Linux的内核开源项目的多人维护和开发工作很多时间都浪费在了提交补丁和保存归档的繁琐事务上(1991-2002年间),Linux之父忍不住了,花了2周时间,开发了Git。
Git是免费的,开源的,最初是为了辅助Linux内核维护开发的,取代其他的收费的版本控制软件。
软件下载及安装
Git官网:https://git-scm.com/ ,下载git对应操作系统的版本,直接无脑下一步安装。(无需手动去配环境变量,安装包会默认自动配置)
如果官网下载速度慢,可以在镜像地址下载:http://npm.taobao.org/mirrors/git-for-windows/
启动Git
Git Bash:类似Linux风格的命令行,使用最多,推荐最多。
Git CMD:Windows风格的命令行
Git GUI:图形界面的Git
Git配置
查看配置git config -l
设置用户名与邮箱(这是用户标识,必须设置)
git config --global user.name "kuangshen" #名称 git config --global user.email 24736743@qq.com #邮箱
Git本地有三个工作区域:Working Directory(工作目录)、Stage / Index(暂存区)、Repository / Git Directory(资源库)。
如果再加上远程的git仓库(Remote Directory),就可以分为四个工作区域。
Git的工作流程一般是这样的:
git add .
将需要进行版本管理的文件放入暂存区域git commit
将暂存区域的文件提交到git仓库 (git commit -m ‘’提交备注信息“)因此,git管理的文件有3种状态:已修改(modified)、已暂存(staged)、已提交(committed)
在想要新建仓库的位置鼠标右键Git Bash Here
在当前目录通过git init
新建一个Git本地仓库
执行后可以看到一个 .git 格式的隐藏文件目录,关于版本等的所有信息都在这个目录里面。
鼠标右键Git Bash Here
git clone [url地址]
克隆远程目录,将远程服务器上的仓库完全镜像一份至本地!# 克隆一个项目和它的整个代码历史(版本信息) git clone [url] # https://gitee.com/kuangstudy/openclass.git
有些时候我们不想要把某些文件纳入到版本控制中,比如数据库文件,临时文件,设计文件等。
在主目录下建立 “.gitignore” 文件,此文件有如下规则:
#为注释 *.txt #忽略所有 .txt结尾的文件,这样的话上传就不会被选中! !lib.txt #但lib.txt除外,不会被忽略。 /temp #仅忽略项目根目录下的TODO文件,不包括其它目录temp build/ #忽略build/目录下的所有文件 doc/*.txt #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
下面是".gitignore"文件,包括锁文件,日志文件,生成的jar包war包,idea的配置等都忽略
*.class *.log *.lock # 生成的jar包war包 *.jar *.war *.ear target/ # idea配置文件 .idea/ *.iml *.ipr *.iws *velocity.log*
github是有墙,比较慢,在国内一般使用gitee,公司使用自己搭建的gitlab服务器。
# 进入 C:\Users\Administrator\.ssh 目录 # 生成公钥 ssh-keygen
方法一:新建普通项目,将以往的git项目的【git文件】复制到这个项目中。(则这个新建的普通项目就变成了git远程项目,可以提交到远程仓库)
方法二:在gitee或者gitlab中新建git仓库,在IDEA中克隆下来。IDEA --> New Project --> Get from Version Control --> Git
在IDEA中不显示指定的文件,比如iml文件,md文件等。
问题:Git Pull Failed(在开发的过程有未提交的代码,同时又pull代码,IDEA会报错Pull失败,原因是在本地的代码会冲突,IDEA无法自动处理)
解决方法:首先将本地未提交的代码commit(只需commit到本地仓库,无需push到远程仓库),然后再pull远程仓库的代码,在IDEA中选择Merge合并,手动处理冲突。
备注:
养成良好习惯,定期先pull再push,每天来上班第一件事,下班第一件事,都是先pull一下代码,如果有冲突,尽早处理。
统一编码格式,统一采用UTF-8编码格式
格式化代码,美化代码(快捷键Ctrl + Alt + L)【慎用,在公司最好不要用,因为git会记录这段代码最后由你修改,这样将来追责就是你】
一定要先提交.gitignore文件,不要提交IDEA的配置文件