版本控制(Revision Control)是一种在开发过程中用于管理我们对文件,目录或工程等内容的修改历史,方便查看更改历史记录。备份以便恢复以前版本内容的软件工程技术。
1、本地版本控制
记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人使用。
2、集中版本控制 SVN
所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改。
3、分布式版本控制系统 Git
所有的版本信息仓库都同步到本地的每个用户,这样就可以在本地查询所有历史版本,可以离线在本地提交,只需要在联网的时候Push到相应的服务器或者其他用户那里,由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题,就可以恢复所有的数据,但是增加了本地存储空间的占用。(每个人都有公司的全部代码)
1、SVN是集中版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的是自己的电脑,所以首先要从中央处理器得到最新的版本,然后工作,完成工作后,需要把自己完成的工作推送到中央服务器,集中式版本控制系统是必须联网的才能工作的,对网络带宽要求较高。
2、Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网,因为版本都在自己的电脑上。
Git Bash:Unix和Linux风格的命令行,使用最多,推荐最多
Git CMD:Windows风格的命令行
Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉命令行
1、cd:改变目录
2、cd…:回到上一级目录,直接cd进入默认目录
3、pwd:显示当前所在的目录路径
4、ls/ll:两个命令都是列出当前目录中的所有文件,只不过ll列出的命令更加详细
5、touch:新建一个文件 如touch index.js,就是在当前目录下面新建一个index.js的文件
6、rm:删除一个文件,如rm index.js是将index.js文件删除
7、mkdir:新建一个目录,相当于新建一个文件夹
8、rm -r:删除一个文件夹,rm -r src删除src目录
9、mv:移动文件,mv index.html src 的意思是将该目录下的index.html移动到src文件夹下面,但是当前文件夹必须和src文件夹,在同一目录下面
10、reset:重新初始化终端/清屏
11、clear:清屏
12、history:查看命令历史
13、help:帮助
14、exit:退出
15、#:表示注释
1、查看配置:git config -l
2、查看系统配置:git config --system --list
3、查看本地配置:git config --global --list
4、设置用户名和邮箱:
git config --global user.name 用户名
git config --global user.email 邮箱名
5、查看文件版本日志:
# 查看文件版本日志
git log
# 查看所有提交的记录
git reflog
6、回滚快照
# 回退一个版本
git reset head~
# 回退两个版本
git reset head~~
# 回退十个版本
git reset head~10
reset参数选择:
(1)–hard:回退版本库、暂存区、工作区。(因此我们修改过的代码就没有了,所以要慎重使用)
(2)–mixed:回退版本库、暂存区。将快照回滚到暂存区域,他还将暂存区域的文件还原到工作目录
(3)–soft:回退到版本库。
Git有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository)或Git Directory,如果在加上远程的Git仓库(Remote Directory)就可以分成四个工作区域。文件在这四个区域之间的转换关系如下:
workspace:工作区,就是平时村方项目代码的地方。
index / Stage:暂存区,用于临时村方本地的改动,事实上他只是一个文件,保存即将提交的文件列表信息。
Repository:仓库区(或本地仓库),就是安全村方数据的位置,这里面有提交的所有的版本数据,其中HEAD指向最新放入仓库的版本。
Remote:远程仓库,托管代码的服务器,可以简单的认为项目组中的一台电脑用于远程数据交换。
1、在工作目录中添加,修改文件;
2、将需要要进行版本管理的文件放入暂存区域中;(git add …)
3、将暂存区域中的文件教导Git仓库;(git commit)
因此,Git股那里的文件有三种状态:已修改(modified),已缓存(staged),已提交(committed)
工作目录(WOrkSpace)一般就是希望Git帮助管理的文件夹,可以是项目的目录,也可以是一个空目录,建议不要用中文。
创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库
(1)创建全新的仓库,需要用Git管理的项目的根目录执行
# 在当前目录新建一个Git代码库
git init
执行之后就可以看到,在项目目录里面多出来一个.git目录,关于版本等所有的信息都在这个目录里面
(2)克隆远程仓库
# 克隆一个项目和它的整个代码历史(版本信息)
git clone[url] https://gitee.com/kuangstudy/kuang_livenote.git
版本控制就是文件的版本控制,要对文件进行修改,提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者需要提交的文件没提交上去。
(1)Untracked:为追踪,此文件在文件夹中,但并没有加入到git库,不参与版本控制,通过git add
状态变为staged
(2)Unmodify:文件已经入库,未修改,即版本库中的文件快照内容与文件夹中有两个去处,如果它被修改,而变为Modified
,如果使用git rm
移出版本库,则成为了Untracked
文件
(3)Modified:文件已修改,仅仅是修改,并没有进行其他的操作,这个文件也有两个去处,通过git add
,可进入暂存staged
状态,使用git checkout
则丢弃修改过,返回到unmodify
状态,这个git checkout
即从库中取出文件,覆盖当前修改
(4)Staged:暂存状态,执行git commit
则将修改同步到库中,这时候库中的文件和本地的文件右边为一致,文件为unmodify
状态,执行git reset HEAD filename
取消暂存,文件状态为Modified
# 查看指定文件状态
git status [filename]
# 查看所有文件状态
git status
# 添加左右文件到暂存区
git add .
# 提交暂存区中的所有内容到本地仓库 -m表示提交信息
git commit -m “消息内容” #引号里面的是消息内容
有些时候我们不想把一下文件纳入到版本控制中去,比如数据库文件,临时文件,设计文件等等。
在主目录下面建立“.gitignore”文件,此文件有如下规则:
(1)忽略文件中的空行或井号(#)开始的行将会被忽略;
(2)可以使用lLinux通配符。例如:星号(*)代表任意多个字符,问好(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1, string2, …})代表可选的字符串等;
(3)如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略;
(4)如果名称的最前面有一个路径分隔符(/),表示要忽略的文件在此目录下面,而子目录中的文件将不被忽略。
(5)如果名称的最后面有一个路径分隔符(/),表示要忽略此目录下改名称的子目录,而非文件(默认文件或目录都忽略)
*txt # 忽略所有.txt结尾的文件,这样的话上传就不会被选中。
!lib.txt # 但lib.txt文件除外
/temp # 仅忽略build/目录下的所有文件
build/ # 忽略build/目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
.gitignore文件的内容定义:
*.class
*.log
*.lock
# Package Files #
*.jar
*.war
*.ear
target/
# idea
.idea/
*.iml
*velocity.log*
### STS ###
.apt_generated
.factorypath
.springBeans
### IntelliJ IDEA ###
*.iml
*.ipr
*.iws
.idea
.classpath
.project
.settings/
bin/
*.log
tmp/
# rebel
*rebel.xml*
1、创建、切换分支
# 将登陆界面作为一个分支独立出来
git branch feature-login
# 切换分支
git checkout feature-out
# 第一步,先切换到master分支
git checkout master
# 第二步,合并分支
git merge 分支名 # 例如:git merge feature-login
# 删除分支
git branch -d 分支名 # 例如:git branch -d feature-login
注册后,生成公共密钥
在C:\Users\xueli\目录下用CMD执行mkdir .ssh命令行,生.ssh文件夹,在文件夹里面执行Git
输入命令ssh-keygen -t rsa
一路Enter下去,最后会生成公共密钥和两个文件