一、 版控制辅助工具
1.1. 什么是版控制技术?
版控制技术(Version Control System):是一类历史纪录两个或若干个文档文本变动,以期今后翻查某一版修改情形的控制系统。版控制技术不但能应用作应用软件源码的文本文档,所以能对任何人类别的文档展开版控制。
常用的版控制技术有:cvs、svn、git
1.2. 为何要有版控制技术?
在联合开发操作过程中,时常须要对两个文档展开修正即使删掉,但我们又期望能留存这个文档的历史历史纪录,假如透过存储,所以管理工作出来会十分的繁杂。在王承恩联合开发时,假如须要王承恩合作联合开发两个网页,所以修正和分拆也会十分的头疼。难再次出现武装冲突。1.3. 版控制技术进行分类
有关版控制
邻近地区版控制技术
邻近地区版控制技术就是在两台电脑上,历史纪录版的相同变动,确保文本不能遗失
优点:假如王承恩联合开发,每一人都在相同的控制系统和笔记本电脑上联合开发,没配套措施相互配合。
封闭式版控制系統
svn/cvs都是集中式的版控制技术
务器难以访问,其他人都难以组织工作。
分布式控制系统版控制技术
git是分布式控制系统的版控制技术。
伺服器之中。不须要互联网就能展开组织工作。当相连互联网时,采用者能优先选择将自己的伺服器与标识符库房展开并行。
二、 git
2.1. git如是说
Git是这款完全免费、开放源码的分布式控制系统版控制技术 ,用作灵巧高效率地处理任何人或小或大的项目。Git 是 Linus Torvalds 为了帮助管理工作 Linux 内核联合开发而联合开发的两个开放源码的版控制应用软件。
2.2. git安装
下载地址
# 推荐采用国内镜像下载 http://npm.taobao.org/mirrors/git-for-windows
1. 不要安装在中文目录
2. 不要采用桌面管理工作应用软件
安装很简单,一直下一步即可。在任意的目录下右键,能再次出现下图,表示安装成功了。
git用法方式主要有两种,
git gui,即图形化界面的方式git bash,命令行的方式bash是linux控制系统的命令,因此学习git前,我们先学习一下bash
在任意文档夹中,都能采用右键,透过git bash here打开命令行窗口,此时的路径就是当前目录。窗口上右键,透过options–>Text–>select能调整字体的大小。# cd 改变目录 (change directory)
cd images #进入images文档夹
cd .. #进入上一层目录
cd ~ #进入采用者根目录
# tab 自动补全,当我们输命令或者目录很长时,能采用tab键展开自动补全。
# 按两次tab,会把所有符合要求的文本都列出来。
# pwd 打印当前目录的路径 (print work directory)
pwd
# ls 展示当前目录列表(list)
ls # 展示当前目录ls -a# 展示全部文本,包括隐藏文档
ls -l # 以列表的形式展示文本
ls -al # 以列表的形式展示所有的文本,包括隐藏文档。
ls –help # 查看ls所有的参数。
ls -l images # 展示images目录下的文档,假如没有写目录,默认展示当前目录。
# clear reset清屏
clear # 清除屏幕文本,滚动条,保留了历史
reset # 重置,历史历史纪录没了。
# mkdir 创建两个文档夹 (make directory)
mkdir css # 创建两个css的文档夹
mkdir css img js # 创建了三个文档夹
# rmdir 删掉两个空的文档夹(没啥用)
rmdir img # 删掉文件夹
# touch 创建文档
touch index.html #创建了两个index.html文档
touch css/index.css # 在css目录下创建idnex.css文档
# rm 删掉两个文档
rm index.html # 删掉index.html文档
rm js # 删掉空的js文档夹
rm -r css # 递归删掉两个文档夹
# mv 移动文档(move)mv index.html js# 将html文档移动到js文档夹中
mv index.html index2.html # 将index.html重命名为index2.html
# cp 复制文档(cp)cp index.html index2.html# 复制index.html文档,命名为index2.html
cp -r css css02 # 假如复制的是文档夹,须要采用-r参数。
# cat 查看文档全部文本cat index.html# less 查看文档部分文本
less index.html
# q退出查看
2.3. 基本操作
初始化git库房git init查看当前git库房的状态git status将文档添加到git的暂存区git add 文档名将文档由暂存区提交到库房区git commit -m 提交说明查看提交日志git log# 初始化git库房,会在当前目录生成两个隐藏文档夹 .git 不要去修正这个文档夹下的任意东西。
git init
# 查看git的状态 ,假如此时新建两个文档,所以这个文档是没有被追踪的,说白了git还没有管理工作这个新建的文档
git status
# 让git管理工作这个新建的文档git add index.html# 让文档由暂存区提交到库房区。此时文档才真正的被git管理工作了。
# 假如提交日志乱码,右键–>options–>Text–>将编码改成utf-8git commit -m第一次提交
# 查看提交日志
git log
2.4. 配置邮箱和采用者名
假如第一次采用git,会要求设置采用者名和邮箱
# git config user.name 你的目标采用者名
# git config user.email 你的目标邮箱名
# 这种配置方式只有在当前库房生效git config user.name shuaige
git config user.email 669104343@qq.com# 能采用–global参数,配置全局的采用者名和邮箱,这样别的git库房就不须要重新配置了。
# 假如同时配置了局部的和全局的,所以局部的采用者名和邮箱将会生效。git config –global user.name shuaige
git config –global user.email 669104343@qq.com# 查看配置信息git config –list
2.5. git的组织工作原理
2.6. git命令详解
2.6.1. git add(重点)
作用:将文档由 组织工作区 添加到 暂存区,暂存文档
命令:
git git add 文档名
例如: git add index.html
git add –all 或者 git add -A 或者git add .(简写) 添加所有文档
git add a.txt b.txt 同时添加两个文档
git add *.js 添加当前目录下的所有js文档
2.6.2. git checkout 文档名
作用:暂存区的文本恢复到组织工作区。git checkout 1.txt 将暂存区中1.txt文档恢复到组织工作区2.6.3. git commit(重点)
作用:将文档由 暂存区 添加到 库房区git commit -m “提交说明”2.6.4. git status
作用:查看文档的状态
命令:git status
命令:git stauts -s 简化日志输出格式2.6.5. git log
作用:查看提交日志git log 只能查看当前head和以前的日志git log –oneline 简洁的日志信息git reflog 查看所有的提交变更日志2.6.6. git reset
作用:版回退,将标识符恢复到已经提交的某两个版中。
git reset –hard 版号 将标识符回退到某个指定的版(版号只要有前几位即可)
git reset –hard head~1
将版回退到上一次提交
~1:上一次提交~2:上上次提交~0:当前提交2.7. git忽视文档
在库房中,有些文档是不想被git管理工作的,比如数据的配置密码、写标识符的一些思路等。git能透过配置从而达到忽视掉一些文档,这样这些文档就能不用提交了。在库房的根目录创建两个.gitignore的文档,文档名是固定的。将不须要被git管理工作的文档路径添加到.gitignore中# 忽视idea.txt文档
idea.txt
# 忽视.gitignore文档
.gitignore
# 忽视css下的index.js文档
css/index.js
# 忽视css下的所有的js文档
css/*.js
# 忽视css下的所有文档
css/*.*
# 忽视css文档夹
css
三、 git分支操作
分支就是科幻电影里面的平行宇宙,当你正在笔记本电脑前努力学习Git的时候,另两个你正在另两个平行宇宙里努力学习SVN。
假如两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙分拆了,结果,你既学会了Git又学会了SVN!
3.1. 为何要有分支?
假如你要联合开发两个新的功能,须要2周时间,第一周你只能写50%标识符,假如此时立即提交,标识符没写完,不完整的标识符会影响到别人难以组织工作。假如等标识符写完再提交,标识符很难遗失,风险很大。有了分支,你就能创建两个属于自己的分支,别人看不到,也不影响别人,你在自己的分支上组织工作,提交到自己的分支上,等到功能联合开发完毕,一次性的分拆到原来的分支。这样既安全,又不影响他人组织工作。在组织工作操作过程中,时常会碰到多任务并行联合开发 的情形,采用分支就能很好的避免任务之间的影响。其他版辅助工具比如svn,cvs中也有分支这个概念,但这些辅助工具中的分支操作十分的慢,形同摆设。3.2. 分支操作的命令
3.2.1. 创建分支
git branch 分支名称创建分支,分支中的标识符,在创建时与当前分支的文本完全相同。git在第一次提交时,就有了两个叫master的主分支。3.2.2. 查看分支
git branch能查看所有的分支,在当前分支的前面会有两个*3.2.3. 切换分支
git checkout 分支名称切换分支在当前分支的任何人操作,都不能影响到其他的分支,除非展开了分支分拆。切换分支之前,必须确保标识符已经提交了3.2.4. 创建并切换分支
git checkout -b 分支名称 创建并切换分支3.2.5. 删掉分支
git branch -d 分支名称 能删掉分支注意:不能在当前分支删掉当前分支,须要切换到其他分支才能删掉。注意:master分支是能删掉的,但不推荐所以做。3.2.6. 分拆分支
git merge 分支名称 将其他分支的文本分拆到当前分支。在master分支中执行git merge dev 将dev分支中的标识符分拆到master分支3.3. git分支的组织工作原理
3.4. git分拆武装冲突
对于同两个文档,假如有多个分支须要分拆时,难再次出现武装冲突。分拆分支时,假如再次出现武装冲突,只能手动处理,再次提交,一般的作法,把自己的标识符放到武装冲突标识符的后面即可。四、远程库房
所有的程序员都能透过远程库房来展开版的共享,达到其他人的标识符一致的效果。
4.1. 远程库房相关的命令
4.1.1. git push
作用:将邻近地区标识符提交到远程库房git push 库房地址 master 在标识符提交到远程库房,注意master分支必须写,不能省略例子:git push git@github.com:hucongcong/test.git master 假如第一次采用,须要填写github的采用者名和密码4.1.2. git pull
作用:将远程的标识符下载到邻近地区git pull 标识符地址 将远程的标识符中master分支下载到邻近地区通常在push前,须要先pull一次。4.1.3. git clone
作用:克隆远程库房的标识符到邻近地区git clone 库房地址 自定义邻近地区库房名 将整个库房克隆到邻近地区4.1.4. git remote
每次push和pull操作都须要带上远程库房的地址,十分的麻烦,我们能给库房地址设置两个别名
git remote add 库房别名 库房地址采用库房别名替代库房地址。库房别名相当于两个变量,库房地址就是对应的值。
git remote add hucc git@github.com:hucongcong/test.git 设置了两个hucc的库房别名,以后push和pull都能不用库房地址,而用hucc
git remote remove hucc 删掉hucc这个库房别名。
git remote 查看所有的库房别名
in的远程地址,指向的就是克隆的远程地址。
4.2. github
git与github没有直接的关系。
git是两个版控制辅助工具。github是两个标识符托管平台,是git的两个远程标识符库房。今后组织工作时,公司会有自己的标识符库房。github官网
开放源码中国-git 码云
1. gitHub是两个面向开放源码及私有应用软件项目的托管平台,因为只支持git 作为唯一的版库格式展开托管,故名gitHub。
2. github完全免费,标识符其他人都能看到,但只有你自己能修正。付费的能隐藏。
4.3. SSH免密码登陆
(对称加密与非对称加密)
每次push标识符,都须要输入采用者名跟密码,十分的麻烦。因此我们能配置两个SSH免密码登陆。
github为了账户的安全,须要对每一次push请求都要验证采用者的身份,只有合法的采用者才能push采用ssh能实现免密码操作(不须要采用密码)4.3.1. SSH免密码登录配置
1 创建SSH Key:ssh-keygen -t rsa2 在文档路径 C:\采用者\当前采用者名\ 找到 .ssh 文档夹3 文档夹中有两个文档:私钥:id_rsa公钥:id_rsa.pub4 在 github -> settings -> SSH and GPG keys网页中,新创建SSH key5 粘贴 公钥 id_rsa.pub 文本到对应文本框中5 在github中新建库房或者采用现在库房,拿到git@github.com:采用者名/库房名.git6 此后,再次SSH方式与github“通信”,不用输入密码确认身份了五、idea集成git
5.1.idea配置git
首先,确保邻近地区已经安装过git客户端,idea会展开自动检测,假如没有,或者想展开手动调整,须要在这里重新配置。配置成功之后能透过点击Test按钮测试是否OK!
5.2:idea上传项目到邻近地区库房
选中指定项目右键,优先选择Git将项目添加到版控制,然后采用Commit Directory提交项目到邻近地区库房。
5.3:将邻近地区库房项目推送到远程库房
注意:假如没有配置ssh公钥,第一次邻近地区推送,须要输入GitHub或gitee远程库房采用者名密码。
5.4:idea设置git忽略部分文档
0、安装.ignore插件
点击File->Settings ,找到Plugins搜索ignore,然后install,OK重启idea
1、创建项目,在项目中添加.gitignore文档
建议.gitignore文档文本
######################################################################
# Build Tools
.gradle
/build/
!gradle/wrapper/gradle-wrapper.jar
target/
!.mvn/wrapper/maven-wrapper.jar
######################################################################
# IDE
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
out
gen
### NetBeans ###
nbproject/private/
build/*
nbbuild/
dist/
nbdist/
.nb-gradle/
######################################################################
# Others
*.log
*.xml.versionsBackup
!*/build/*.java
!*/build/*.html
!*/build/*.xml
# .gitignore文档文本编写规则
*.a # 忽略所有 .a 结尾的文档
!lib.a # 但 lib.a 除外
/TODO # 仅仅忽略项目根目录下的 TODO 文档,不包括 subdir/TODO
build/ # 忽略 build/ 目录下的所有文档
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
2、创建邻近地区库房
$ git init
3、创建个人分支
$ git checkout -b dev
4、添加文档到版控制,提交到邻近地区库房
$ git add .
$ git commit -m “first commit”
5、推送到远程库房
$ git push https://gitee.com/liyunyi/ssm.git dev
6、分拆分支推送到主分支
$ git checkout master
$ git merge dev
$ git push https://gitee.com/liyunyi/ssm.git master
5.5:克隆远程库房项目到邻近地区
附件:命令大全
Workspace:组织工作区Index / Stage:暂存区Repository:库房区(或邻近地区库房)Remote:远程库房1、库房
# 在当前目录新建两个Git标识符库
$ git init
# 新建两个目录,将其初始化为Git标识符库
$ git init [project-name]
# 下载两个项目和它的整个标识符历史
$ git clone [url]
2、配置
# 显示当前的Git配置
$ git config –list
# 编辑Git配置文档
$ git config -e [–global]
# 设置提交标识符时的用户信息
$ git config [–global] user.name “[name]”
$ git config [–global] user.email “[email address]”
3、增加/删掉文档
# 添加指定文档到暂存区
$ git add [file1] [file2] …
# 添加指定目录到暂存区,包括子目录
$ git add [dir]
# 添加当前目录的所有文档到暂存区
$ git add .
# 添加每一变动前,都会要求确认
# 对于同两个文档的多处变动,能实现分次提交
$ git add -p
# 删掉组织工作区文档,并且将这次删掉放入暂存区
$ git rm [file1] [file2] …
# 停止追踪指定文档,但该文档会保留在组织工作区
$ git rm –cached [file]
# 改名文档,并且将这个改名放入暂存区
$ git mv [file-original] [file-renamed]
4、标识符提交
# 提交暂存区到库房区
$ git commit -m [message]
# 提交暂存区的指定文档到库房区
$ git commit [file1] [file2] … -m [message]
# 提交组织工作区自上次commit之后的变动,直接到库房区
$ git commit -a
# 提交时显示所有diff信息
$ git commit -v
# 采用一次新的commit,替代上一次提交
# 假如标识符没有任何人新变动,则用来改写上一次commit的提交信息
$ git commit –amend -m [message]
# 重做上一次commit,并包括指定文档的新变动
$ git commit –amend [file1] [file2] …
5、分支
# 列出所有邻近地区分支
$ git branch
# 列出所有远程分支
$ git branch -r
# 列出所有邻近地区分支和远程分支
$ git branch -a
# 新建两个分支,但依然停留在当前分支
$ git branch [branch-name]
# 新建两个分支,并切换到该分支
$ git checkout -b [branch]
# 新建两个分支,指向指定commit
$ git branch [branch] [commit]
# 新建两个分支,与指定的远程分支建立追踪关系
$ git branch –track [branch] [remote-branch]
# 切换到指定分支,并更新组织工作区
$ git checkout [branch-name]
# 切换到上两个分支
$ git checkout –
# 建立追踪关系,在现有分支与指定的远程分支之间
$ git branch –set-upstream [branch] [remote-branch]
# 分拆指定分支到当前分支
$ git merge [branch]
# 优先选择两个commit,分拆进当前分支
$ git cherry-pick [commit]
# 删掉分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin –delete [branch-name]
$ git branch -dr [remote/branch]
6、标签
# 列出所有tag
$ git tag
# 新建两个tag在当前commit
$ git tag [tag]
# 新建两个tag在指定commit
$ git tag [tag] [commit]
# 删掉邻近地区tag
$ git tag -d [tag]
# 删掉远程tag
$ git push origin :refs/tags/[tagName]
# 查看tag信息
$ git show [tag]
# 提交指定tag
$ git push [remote] [tag]
# 提交所有tag
$ git push [remote] –tags
# 新建两个分支,指向某个tag
$ git checkout -b [branch] [tag]
7、查看信息
# 显示有变更的文档
$ git status
# 显示当前分支的版历史
$ git log
# 显示commit历史,和每次commit发生变更的文档
$ git log –stat
# 搜索提交历史,根据关键词
$ git log -S [keyword]
# 显示某个commit之后的所有变动,每一commit占据一行
$ git log [tag] HEAD –pretty=format:%s
# 显示某个commit之后的所有变动,其”提交说明”必须符合搜索条件
$ git log [tag] HEAD –grep feature
# 显示某个文档的版历史,包括文档改名
$ git log –follow [file]
$ git whatchanged [file]
# 显示指定文档相关的每一次diff
$ git log -p [file]
# 显示过去5次提交
$ git log -5 –pretty –oneline
# 显示所有提交过的采用者,按提交次数排序
$ git shortlog -sn
# 显示指定文档是什么人在什么时间修正过
$ git blame [file]
# 显示暂存区和组织工作区的差异
$ git diff
# 显示暂存区和上两个commit的差异
$ git diff –cached [file]
# 显示组织工作区与当前分支最新commit之间的差异
$ git diff HEAD
# 显示两次提交之间的差异
$ git diff [first-branch]…[second-branch]
# 显示今天你写了多少行标识符
$ git diff –shortstat “@{0 day ago}”
# 显示某次提交的元数据和文本变动
$ git show [commit]
# 显示某次提交发生变动的文档
$ git show –name-only [commit]
# 显示某次提交时,某个文档的文本
$ git show [commit]:[filename]
# 显示当前分支的最近几次提交
$ git reflog
8、远程并行
# 下载远程库房的所有变动
$ git fetch [remote]
# 显示所有远程库房
$ git remote -v
# 显示某个远程库房的信息
$ git remote show [remote]
# 增加两个新的远程库房,并命名
$ git remote add [shortname] [url]
# 取回远程库房的变动,并与邻近地区分支分拆
$ git pull [remote] [branch]
# 上传邻近地区指定分支到远程库房
$ git push [remote] [branch]
# 强行推送当前分支到远程库房,即使有武装冲突
$ git push [remote] –force
# 推送所有分支到远程库房
$ git push [remote] –all
9、撤销
# 恢复暂存区的指定文档到组织工作区
$ git checkout [file]
# 恢复某个commit的指定文档到暂存区和组织工作区
$ git checkout [commit] [file]
# 恢复暂存区的所有文档到组织工作区
$ git checkout .
# 重置暂存区的指定文档,与上一次commit保持一致,但组织工作区不变
$ git reset [file]
# 重置暂存区与组织工作区,与上一次commit保持一致
$ git reset –hard
# 重置当前分支的指针为指定commit,同时重置暂存区,但组织工作区不变
$ git reset [commit]
# 重置当前分支的HEAD为指定commit,同时重置暂存区和组织工作区,与指定commit一致
$ git reset –hard [commit]
# 重置当前HEAD为指定commit,但保持暂存区和组织工作区不变
$ git reset –keep [commit]
# 新建两个commit,用来撤销指定commit
# 后者的所有变动都将被前者抵消,并且应用到当前分支
$ git revert [commit]
# 暂时将未提交的变动移除,稍后再移入
$ git stash
$ git stash pop
10、其他
# 生成两个可供发布的压缩包
$ git archive
参考网址
# git大全
https://gitee.com/all-about-git
# 深入浅出git教程
https://www.cnblogs.com/syp172654682/p/7689328.html
# 阮一峰git教程
https://www.liaoxuefeng.com/wiki/896043488029600
# idea中.ignore忽略提交文档到Git的采用
https://blog.csdn.net/byy8023/article/details/82259155?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase