git的基本介绍
git是一个版本控制器来控制你书写的各个版本的代码,程序,笔记等等
git简单的来说就是管理多人开发的控制器,例如上班读取最新的代码,下班以后然后上传,以方便他人读取
- 实现多人款跨区域协同开发
- 统计开发进度
- 并行开发,提高效率
简单的来说就相当于一个可控制的存储库
版本控制器的分类
-
本地版本控制
-
相当于在本地的目录中修改的方案
- 解决方案1
- 解决方案2
- 解决方案修改版1
- 解决方案修改版2
- 解决方案最终修改版
。。。。
这些就是储存在本地文档中的版本,进行控制
-
-
集中式版本控制
-
这个是将版本的数据上传到服务器上,协同者在服务器上修改或者更新
ps:这个的缺点很明显,需要服务器,服务器不能崩
这样所有的版本数据全部都会在服务器上,各个用户之间也只有自己的版本数据,如果出现网络问题或者是服务器的崩溃问题,将会无法修改以及同步版本以及历史的版本,甚至会失去最新的版本数据。其中代表的产品有:SVN、CVS、VSS
-
-
分布式控制
-
这个的版本控制器的原理是将所有的版本的信息仓库全部同步到本地的每一个用户,这样就可以在本地查看所有版本的历史以及可以离线的本地提交,这时候只需要联网的时候push到相应的服务器仓库或者其他用户哪里就可以了,并且所有的用户都保留了所有版本的版本数据,因此数据安全性得到了保证
ps:缺点是占用了本地的储存空间,每个人都有全部的代码
优点是避免服务器损坏带来的信息丢失
-
git与SVN的区别
- SVN是集中式的版本控制器,所有的版本全部都放在中央服务器当中,在工作的时候必须从中央服务器提取最新的版本数据,完成工作以后,需要将完成后的版本数据推送到中央服务器,必须联网才能完成相应的版本控制,对于带宽要求比较高
- GIT是分布式版本控制器,没有中央服务器,每个人的电脑就是完整的版本库,工作的时候不需要联网,协同控制的方法例如:在自己电脑上修改了文件A,其他人也在电脑上修改了文件A,这时候你们各自把修改的文件A进行推送,就可以看到修改的内容了,git就可以查看内容了
ps:目前最先进的版本控制器依旧是git
git历史
原身是BitKeeper,其中由linux之父==Torvalds李纳斯·托沃兹,Linus Benedict Torvalds==进行开发的咳咳。。。用时两个星期,开发出git来代替BitKeeper。
git是免费的、开源的、最初的git是辅助Linux内核开发的。
Git环境的配置以及搭建
-
下载
-
安装
- 无脑下一步,不过记得查看一下环境变量有没有自动配上
-
卸载
- 先清理完环境变量,然后控制面板卸载完活
-
启动Git
-
Git安装完成以后会出现3个菜单项,任意文件夹下如果你选择了右菜单的选项,也可以看到这几选项
Git Bash:其中最经常用的是Bash,没错就是linux里面的Bash。Git CMD:Windows风格的命令。
Git GUI:图形界面的Git,这个吧,建议先学习命令。
ps:使用Bash需要用到基本的linux命令,可以到这里来进行学习Linux命令大全
-
-
Git环境的配置
-
-
查看配置的命令
git config -l
一般新用户并没有配置这些环境的 -
查看系统的配置
git config --system --list
-
查看本地的配置
git config --global --list
里面的配置有个人的用户名以及密码和邮箱,例如用来连接github,用来告诉提交项目的人是谁。
# 查看系统的配置 git config --system --list # 查看本地的配置 git config --global --list
-
-
Git的相关的配置文件:
-
Git\etc\gitconfig: Git安装目录下的gitconfig --system系统级别的配置
-
C:\User\
当前登录用户\
.gitconfig 只适合当前登录用户的配置 --global全局的配置这里可以直接的编辑配置文件,通过命令也可以影响到这里进行修改
ps:所以所有的配置文件全部在本地,所有修改可以手动本地修改
-
-
设置邮箱以及用户名
ps:这个是安装完git最先做的事情且是必须的
-
git config --global user.name < you name > #用户名 git congig --golbal user.email < you email > # 你的邮箱
ps:这个是配置的 --global选项的配置,如果你想要配置特定的项目的话,可以配置这个特定的项目
-
-
Git 基本理论
-
工作区域
Git本地有三个工作的区域 工作目录、暂存区、资源库。(可以再加上远程的git连接的仓库),关系如下:
-
Workspace:工作目录,存放项目代码的地方
-
Index/Stage:暂存区,这个只是一个文件,一般看不到
-
Repository:本地仓库,就是存放数据的位置,这里有你所有的版本数据。其中有HEAD隐藏文件里面有一个分支默认的master分支
-
Remote:远程仓库,就是托管代码服务器,远程的公共仓库,gitee、github等等
-
Directory:使用Git管理的一个目录,也就是一个仓库里面包括工作目录以及git管理空间
-
WorkSpace:通过git进行版本控制的目录以及文件
-
.git:存放git管理信息的目录
-
Index/Stage:相当于内存的缓存区
-
Loxcal Repo:本地仓库,顾名思义在本地存放版本数据的地方
-
Stash:隐藏的一个文件,是一个工作保存栈,用来临时保存
-
-
工作流程
git的工作流程如下:
- 在工作目录中添加、修改文件----
UserMapper.xml
- 将需要进行版本管理的文件放入暂存区----
git add
- 将暂存区的文件提交到远程仓库----
git commit
所以呢,git管理文件的三种状态:已修改、已暂存、已提交
- 在工作目录中添加、修改文件----
Git项目搭建
-
创建工作目录与常用命令
工作目录(WorkSpace)这个是git帮助你管理的一个区域,也可以说是一个文件夹,建议不要中文命名
日常使用的命令:
-
本地仓库的搭建
本地仓库的搭建方法有两种:一 、是创建一个全新的仓库,二、是克隆一个远程仓库
a. 创建一个全新的仓库的git命令:
git init #git初始化会是隐藏的文件,在你的git管理项目的根目录打开git bash
b. 克隆远程仓库
-
将远程服务器上的仓库完全镜像一份给本地
git clone [url] # 将所有的项目以及版本数据全部克隆
-
去gitee或者github上克隆
-
Git文件操作
-
文件的4种状态,你需要知道文件的状态才可以对其进行增删改查
- Untracked:未跟踪。这个文件在文件夹种,但是没有加入got库,不参加版本控制,通过
git add
状态变为staged
- Unmodify:文件已经入库未修改,就是版本库中的文件与本地的文件一样,这种文件有两种状态,如果被修改的话则变为
MOdfied
如果使用git rm
移除版本库,则变为Untracked
文件 - Modified:文件已经修改,仅仅是修改,没有进行其他的操作的话,这个文件有两个状态,通过
git add
可以进入暂存状态staged
使用git checkout
,则表示丢弃修改,返回unmodify
状态,这个git checkout
即从库中取出文件,覆盖当前修改 - Staged:暂存状态,执行
git commit
则将修改同步到库中,这时库中的文件和本地的文件相同,文件为Unmodify
状态,执行git reset HEAD filename
取消暂存,文件状态为Modified
- Untracked:未跟踪。这个文件在文件夹种,但是没有加入got库,不参加版本控制,通过
-
查看文件状态
查看文件状态的命令
# 查看指定文件状态 git status [filename] # 查看所有文件的状态 git status git add . # 添加所有文件到暂存区 git commit -m "注释" # 提交暂存区的内容到本地仓库 -m提交信息
-
忽略文件
ps:这个很重要,在你写的项目中不是所有的文件都需要上传的例如node_modules里面的插件,本地的一些文件这时候就需要忽略文件的功能了
在主目录下建立
.gitignore
文件,此文件有以下的规则:- 忽略文件中的空行或者#号开始的行
- 可以使用费Linux通配符,例如‘*’表示任意的多字符,‘?’代表一字符等等
- 如果名称最前面有一个“!”,表示在规则内例外,不会被忽略
- 如果名称最前面是一个路径分割符‘/’,表示要忽略的文件在此目录,而子目录的文件不会被忽略
- 如果名称最后面是一个路径分隔符‘/’,表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录忽略)
# 注释 *.txt #忽略所有.txt结尾的文件,上传的话就不会被上传 !lib.txt #但是lib.txt除外 /temp #仅忽略项目根目录下的TODO文件,不包括其他的目录的temp build/ #忽略build/目录下所有的文件 doc/*.txt #忽略 doc/notes.txt但是不包括doc/server/arch.txt也就是说只忽略该目录下的,子目录不忽略
使用码云 (gitee/github)
-
注册账号,完善资料,网上都有教程
-
设置本机绑定的SSH公钥,实现免密码登录
ssh-keygen -t rsa -C "youremail" # 然后创建SSH,一路回车 # 一般在C:\User\你登陆的用户\.ssh 目录 # id_rsa是私有密钥不得外传 # id_rsa.pub是公共密钥放在你的码云仓库n
-
可以去网上搜索gitee仓库的建立以及初始化
-
仓库建立好以后可以在将仓库克隆到本地
git clone <url>
IDEA中集成Git
-
建立的项目绑定Git
- 将我们原程克隆的项目拷贝到项目目录
-
修改文件,使用IDEA操作Git提交项目到远程仓库
-
也可以在这输入git命令进行添加
-
也可以在这进行添加
-
拷贝完成以后会出现这几个git图标代表拉取与上传,需要完成上面两个步骤进行上传
现在更多的是在代码区用
git add.
进行暂存区添加,用git commit -m ""
进行提交用git push
进行远程到仓库提交
Git分支说明
分支这个就是表面的意思,就是对于主支与分支,相当于平行宇宙,什么都一样,而这个处的问题是分支合并的问题
-
git中常用分支的命令
# 列出本地所有分支 git branch # 列出所有远程分支 git branch -r # 新建一个分支,仍然保留在当前分支 git branch [new branch] # 新建分支,并切换到该分支 git checkout -b [branch] # 合并指定的分支到当前分支 git merge [branch] # 删除分支 git branch -d [branch_name] # 远程删除分支 git push origin --delete [branch_name] git branch -dr[branch/remote]
多个分支如果并行执行,就会导致我们的代码不冲突,也就是同时存在多个版本
ps:如果同一个文件在合并分支时被修改则会发生冲突:解决的拌饭是可以修改冲突文件后重新提交,也就是选择保留那个分支
main的分支应该非常的稳定,用来发布软件或者程序的最新版本,一般不会在主分支上进行工作的,一般会在dev的测试分支上进行工作的,dev上完成测试没有太大的问题是合并到主分支进行发布