文章目录
一.前言
Git是目前世界上最先进的分布式版本控制系统。
Git和SVN区别:
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。
Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
二.下载安装Git
GitHub是当今最流行的版本控制软件,官方下载地址
下载解压之后开始安装
打开Git黑窗口,输入git –version看是否安装成功
三.配置SSH
在黑窗口输入命令ssh-keygen -t rsa -C “你的邮箱地址”,然后一直回车
在C:\Users\WangPan.ssh目录下生成了秘钥文件,用记事本打开id_rsa.pub文件并复制里面的内容
然后登录github网站,然后按照下面进行操作,然后点击Add
添加完成之后如下图
四.配置账号和邮箱
在黑窗口输入命令行运行以下指令:
git config --global user.name “你的用户名”
git config --global user.email “你的邮箱”
五.IDEA配置Git
打开设置,进入git配置路径后,点击应用
六.IDEA提交Git(通过git命令)
先在idea中新建个工程,然后进入到工程的目录右键后弹出命令窗口
登录Github 点击右上角的加号
然后在刚刚打开的黑窗口输入以下命令
-
git init //初始化仓库
-
git add .(文件name) //添加文件到本地仓库
-
git commit -m “first commit” //添加文件描述信息
-
git remote add origin + 远程仓库地址 //链接远程仓库,创建主分支
注意这一步如果没有master主分支可以省略
-
git pull origin master//把本地仓库的变化连接到远程仓库主分支
-
git push -u origin master //把本地仓库的文件推送到远程仓库
第六步在提交的时候会弹出下图,只是第一次会弹出,输入用户名密码登录
提交完成
七.IDEA提交Git(通过idea)
在菜单点击VCS -> Import into Version Control -> Create Git Repository
弹出路径选择框,默认在工程目录下就行,创建本地仓库
多了个.git文件夹说明仓库创建成功,然后点击如下,点击Add后红色文件都会变成绿色,便是已经添加成功
然后点击如下图开始提交,添加提交说明
提交完成会变成白色,此时只是提交到本地仓库,还需要提交到远程仓库
提示成功就完成了,注意在多人开发的环境下,一定要先更新在提交,以免发生冲突
八.IDEA Git 更新
九.IDEA Git 还原
十.IDEA Git clone
选择要clone的工程,然后点击clone
弹出提示框,点击yes,然后一直下一步直到完成
十一.IDEA 断开Git
File –> Settings -> Version Control 点击右侧删除按钮
然后删除.git文件夹
十二.IDEA Git 文件颜色说明
十三.Git说明和原理
在使用git init 命令后会生成.git的隐藏文件夹
-
config文件:该文件主要记录针对该项目的一些配置信息,例如是否以bare方式初始化、remote的信息等,通过git remote add命令增加的远程分支的信息就保存在这里;
-
objects文件夹:该文件夹主要包含git对象。关于什么是git对象,将会在下一节进行详细介绍。Git中的文件和一些操作都会以git对象来保存,git对象分为BLOB、tree和commit三种类型,例如git commit便是git中的commit对象,而各个版本之间是通过版本树来组织的,比如当前的HEAD会指向某个commit对象,而该commit对象又会指向几个BLOB对象或者tree对象。objects文件夹中会包含很多的子文件夹,其中Git对象保存在以其sha-1值的前两位为子文件夹、后38位位文件名的文件中;除此以外,Git为了节省存储对象所占用的磁盘空间,会定期对Git对象进行压缩和打包,其中pack文件夹用于存储打包压缩的对象,而info文件夹用于从打包的文件中查找git对象;
-
HEAD文件:该文件指明了git branch(即当前分支)的结果,比如当前分支是master,则该文件就会指向master,但是并不是存储一个master字符串,而是分支在refs中的表示,例如ref: refs/heads/master。
-
index文件:该文件保存了暂存区域的信息。该文件某种程度就是缓冲区(staging area),内容包括它指向的文件的时间戳、文件名、sha1值等;
-
Refs文件夹:该文件夹存储指向数据(分支)的提交对象的指针。其中heads文件夹存储本地每一个分支最近一次commit的sha-1值(也就是commit对象的sha-1值),每个分支一个文件;remotes文件夹则记录你最后一次和每一个远程仓库的通信,Git会把你最后一次推送到这个remote的每个分支的值都记录在这个文件夹中;tag文件夹则是分支的别名,这里不需要对其有过多的了解;
-
hooks主要定义了客户端或服务端钩子脚本,这些脚本主要用于在特定的命令和操作之前或者之后进行特定的处理,比如:当你把本地仓库push到服务器的远程仓库时,可以在服务器仓库的hooks文件夹下定义post_update脚本,在该脚本中可以通过脚本代码将最新的代码部署到服务器的web服务器上,从而将版本控制和代码发布无缝连接起来;
-
description文件仅供GitWeb程序使用,这里不需要过多的关心;
-
logs则记录了本地仓库和远程仓库的每一个分支的提交记录,即所有的commit对象(包括时间、作者等信息)都会被记录在这个文件夹中,因此这个文件夹中的内容是我们查看最频繁的,不管是Git log命令还是tortoiseGit的show log,都需要从该文件夹中获取提交日志;
-
info文件夹保存了一份不希望在.gitignore 文件中管理的忽略模式的全局可执行文件,基本也用不上;COMMIT_EDITMSG文件则记录了最后一次提交时的注释信息。
从以上的描述中我们可以发现,.git文件夹中包含了众多功能不一的文件夹和文件,这些文件夹和文件是描述Git仓库所必不可少的信息,不可以随意更改或删除;尤其需要注意的是,.git文件夹随着项目的演进,可能会变得越来越大,因为任何文件的任何一个变动,都需要Git在objects文件夹下将其重新存储为一个新的对象文件,因此如果一个文件非常大,那么你提交几次改动就会造成.git文件夹容量成倍增长。因此,.git文件夹更像是一本书,每一个版本的每一个变动都存储在这本书中,而且这本书还有一个目录,指明了不同的版本的变动内容存储在这本书的哪一页上,这就是Git的最基本的原理。