1. 版本控制
版本控制是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。 简单来说就是用于管理多人协调开发项目的技术。
常见的版本控制器
1. 版本控制分类
1. 本地版本控制 记录文件每次的更新,可以堆每个版本做一个快照,活石记录补丁文件,适合个人用,如RCS。  2. 集中版本控制 所有的版本数据都保存在服务器上,协调开发者从服务器上同步更新或上传自己的修改。
所有的版本都存放在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支上工作。 而且,所有的数据都保存在单一的服务器上,一旦服务器损坏,就会丢失所有的数据。 常用的解决方法,就是经常备份。 代表产品:SVN、CVS、VSS
 3. 分布式版本控制 所有的版本信息都同步到每个用户,这样就可以在本地查看所有版本历史,可以离线本地提交,只需要在连网时 push 到相应的服务器或其它用户那里即可。由于每个用户保存的都是所有的版本数据,只要有一个用户的设备没有被损坏,就可以恢复所有的数据。
不会因为服务器损坏或者网络的原因,造成不能工作的情况!

2. Git 与 SVN 最主要区别
SVN 是集中式版本控制系统。 Git 是分布式版本控制系统。
Git 是目前世界上最先进的分布式版本控制系统。
2. Git 的历史
Git 诞生于一个极富纷争大举创新的年代。 Linux 的缔造者花了两周开发了 Git 来取代 BitKeeper 来辅助 Linux 内核开发。 
3. Git 环境配置
1. 安装 Git
Git 官网 选择自己的版本下载  安装:无脑点击下一步即可(都选择默认即可)
2. 启动 Git
 Git Bash:Unix 与 Linux 风格的命令行,使用最多,推荐最多。 Git CMD:Windows 风格的命令行。 Git GUI:图形界面的 Git,不建议初学者使用,尽量先熟悉常用命令。
3. 基本的 Linux 命令学习
cd :改变目录cd.. :退回到上一级目录pwd :显示当前所在的目录路径clear :清屏ls :列出当前目录中的所有文件ll :累出当前目录中的所有文件,列出的内容更为详细touch :新建一个文件,如 touch test.txt ,就会在当前目录下新建一个 test.txt 文件rm :删除一个文件,如 rm test,txt ,将 test.txt 文件删除mkdir :新建一个文件夹,如 mkdir test ,新建一个 test 文件夹rm -r :删除一个文件夹,如 rm -r test ,删除 test 文件夹 rm -rf 切勿在 Linux 中尝试!删除电脑中全部文件!mv :移动文件reset :重新初始化终端/清屏history :查看命令历史help :帮助exit :退出# :表示注释
4. Git 的配置
查看配置 git config -l  查看系统 config 配置 git config --system --list
查看当前用户(global)配置 git config --global --list
设置用户名与邮箱(用户标识,必要) 当你安装 Git 后首先要做的事情就是设置你的用户名称和 e-mail 地址。 这是非常重要的,因为每次 Git 提交都会使用该信息。 它被永远的嵌入到了你的提交中: git config --gobal user,name "名称" git config --gobal user.email "邮箱"

4. Git 基本理论(核心)
1. 工作区域
Git 本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Diretory)。

- Workspace:工作区,就是你平时存放项目代码的地方
- Index/Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交的文件列表信息
- Repository:仓库区,就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中 HEAD 指向最新放入仓库的版本。
- Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
.git 是一个隐藏文件夹

2. 工作流程
- 在工作目录中添加、修改文件
UserMapper.xml - 将需要进行版本管理的文件放入到暂存区域
git add. - 将暂存区域的文件提交到 git 仓库
git commit

5. Git 项目搭建
1. 创建工作目录与常用指令
工作目录(WorkSpace)一般就是你希望 Git 帮助你管理的文件夹,可以是你项目的目录,也可以是一个空目录,建议不要有中文。 日常使用只要记住下图 6 个命令: 
2. 本地仓库的搭建
创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库。
-
创建全新的仓库,需要用 Git 管理的项目的根目录执行: git init  -
执行后可以看到,仅仅在项目目录多出了一个 .git 目录,关于版本等的所有信息都在这个目录里面。 
3. 克隆远程仓库到本地
- 另一种方式是克隆远程目录,由于是将远程服务器上的仓库完全镜像一份到本地!
git clone [url] - 去 gitee 或者 github 上克隆一个测试!
git clone [url]
6. Git 文件操作
1. 文件的四种状态
- Untracked:未跟踪,此文件在文件夹中,但并没有加入到 git 库,不参与版本控制。通过
git add 将状态改变为Staged - Unmodify:文件已经入库,未修改。如果它被修改,状态就会变为Modified:如果使用
git rm 移除版本库,则会变为Untracked 文件 - Modified:文件已被修改。通过
git add 可以暂存为Staged状态,使用git checkout 则丢弃修改过的版本,返回到Unmodify状态,这个git checkout 从库中取出文件,覆盖当前修改。 - Staged:暂存状态。通过
git commit 将修改同步到库中,这时库中的文件和本地文件又变为一致,文件变为Unmodify状态,执行git reset HEAD filename 取消暂存,文件状态变为Modified
2. 查看文件状态
查看指定文件状态 git status [filename]
查看所有文件状态 git status
添加所有文件到暂存区 git add .
提交暂存区中的内容到本地仓库 -m 提交信息 git commit -m "消息内容"
3. 忽略文件
有些时候我们不想将一些文件上传,比如数据库,临时文件,设计文件等
在主目录下建立".gitignore"文件,此文件有如下规则:
- 忽略文件中的空行或以井号(#)开始的行将会被忽略。
- 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符。方括号([abc])代表可选字符范围,大括号({string1,sring2,…})代表可选的字符串等
- 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
- 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
- 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
*.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
tem/
#rebel
*rebel.xml*
忽略所有 .txt 结尾的文件,这样的话上传就不会被选中! *.txt 但lib.txt 除外 !lib.txt 仅忽略项目根目录下的TODOO 文件,不包括其它目录temp /temp 忽略build/ 目录下的所有文件 build/ 会忽略doc/notes.txt 但不包括doc/server/arch.txt
7. 使用码云
国外的 GitHub 是有墙的,比较慢,在国内的话, 我们一般使用 gitee,公司中有时候会搭建自己的 gitlab 服务器
码云 gitee 官网
1. 注册自己的 gitee 账号,完善自己的信息

2. 设置本机绑定 SSH 公钥,实验免密码登录!
免密码登录,很重要,gitee 是远程仓库,我们平时工作是在本地仓库
 先执行下面的命令 ssh-keygen -o 一直回车就好了  然后在本机电脑的 C 盘下找到 .ssh 目录  将id_rsa.pub 中的内容复制到网页的公钥部分,然后添加公钥就可以了  添加成功后会自动一个公钥,这样就可以将 gitee 与自己的本地仓库绑定了 
3. 新建仓库
 创建成功后,就可以根据这个连接将 gitee 上的文件克隆到本地仓库了 
GitHub 的操作与 gitee 的操作基本相同
8. IDEA 中集成 Git
1. 新建项目,绑定 Git
将我们远程仓库的 Git 文件目录全部拷贝到新项目的文件夹下即可!  文件的颜色就是选中的状态 
2. 修改文件,使用 IDEA 操作 Git
- 添加到暂存区
- commit 提交
- push 到远程仓库
可以直接使用 IDEA 集成的 Git 工具(右上角) 也可以使用 IDEA 的命令行,使用方法和 GitBash 的命令方法一样 
9. 说明:GIT 分支
分支在 Git 中相对较难,分支就是科幻电影里面的平行宇宙,如果两个平行宇宙互不干扰,那对现在的你也没啥影响,不过,在某个时间点,两个平行宇宙合并了,我们就需要处理一些问题了!  Git 分支中常用指令
- 列出所有的本地分支
git branch - 列出所有的远程分支
git branch -r - 新建一个分支,但依旧停留在当前分支
git branch [branch-name] - 新建一个分支,并切换到该分支
git checkout -b [branch] - 合并指定分支到当前分支
git merge [branch] - 删除分支
git branch -d [branch-name] - 删除远程分支
git push origin --delete [branch-name] git branch -dr [remote/branch]
多个分支如果并行执行,就会导致我们代码冲突,也就是同时存在多个版本! 如果同一个文件在合并分支时都被修改了则会引起冲突:解决的办法是我们可以修改冲突文件后重新提交!选择要保留他的代码还是你的代码!
master 主分支应该是非常稳定,用来发布新版本,一般情况下不允许在上面工作,工作一般情况下在新建的 dev 分支上工作,工作玩后,比如要发布,或者说 dev 分支代码稳定后可以合并到主分支 master 上来。
|