1.集中式版本控制系统(CVS,SVN) 有一个中央服务器,干活的时候,用的都是自己的电脑,需要先从中央服务器获取最新的版本,然后开始干活,干完活了,再把自己的修改推动给中央服务器。 缺点:需要联网的情况下才能使用,上传速度慢。2.分布式版本控制系统(最常见的Git) 分布式版本控制系统没有中央服务器,每个人的电脑上都用一个完整的版本库,只要交换对方的修改就行,把各自的修改推送给对方。分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。优点:安全性高,不需要联网
集中式:服务器挂了,所有库操作都完蛋了,更像http下载分布式:互相之间拉来拉去,更像bt下载,有源就可以
关于版本控制
文件每一次提交,都会进行版本记录,可以把当前版本回退到历史当中的任意一个版本我们了解下的版本管理控制系统,其实只能跟踪 文本文件 的改动,比如TXT文件,网页,所有的程序代码等等
备份文件记录历史回到过去多端共享团队协作开源协作
安装git命令行
注册github账号
用户设置:打开命令行,设置用户名和邮箱(在github上注册的用户名和邮箱)git config --global user.name "zfpx"git config --global user.email "zfpx@126.com"
用git创建版本库版本库又称仓库,repository,
打开命令行在你的学习的目录中,右键git bash,打开命令行,
创建一个空目录$ mkdir study-git
切换进去$ cd study-git
初始化仓库$ git init
```初始化仓库,其实就是在你的目录下安装了一个.git的目录,这个目录是Git来跟踪管理版本库的,不要随意修改,更不能删掉,否则仓库就died了.git目录默认是隐藏的,用ls -al命令就可以看见。 ```
工作流本地仓库的组成:
第一个是工作区,对应你的物理目录,树型结构,也就是编辑代码的地方,写代码的地方;第二个是 暂存区,工作区和历史提交的中间缓存,代表需要提交的工作状态,维护虚拟树型结构,临时保存你的改动;最后是 历史区,树型结构,历史仓库,指向你最近一次提交后的结果。
添加就是工作区到暂存区,提交就是暂存区到历史区
文件的写入到提交window的可视化操作,你需要经历一些列点击,点击,点击,双击的操作,不免有些繁琐,体验一下git命令的方便。
上面我们新建并初始化了一个仓库,我们现在在库里面新建文件
新建一个html文件$ touch index.html
写入一句话$ echo study git > index.html //清空index.html并写入
再写入一句话$ echo again study git >> index.html //追加"again study git"
查看文件的内容$ cat index.html
会看到输出:study gitagain study git
现在文件在工作区,把文件添加到暂存区$ git add index.html
提交文件$ git commit index.html -m '我写了study git'
表示提交index.html文件, -m后面为这次提交的描述信息,
在这里如果你没有 -m '' 那么会跳到一个很奇怪的页面,不过没事,它只是让你补充一下提示信息,在你开始编辑之前,按a,i,o其中一个键进入编辑模式,完成后esc退出编辑模式,
输引号内的命令,就可以保存退出,":wq"
理解这个过程:git add把文件添加进去,实际上就是把文件修改添加到暂存区,看清是文件修改;接下来是用git commit提交更改,实际上就是把暂存区的所有内容提交到版本库中的历史区中,在这个历史区中,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往历史区的master分支上提交更改。
你可以尝试再次添加内容到index.html$ echo 222 >> index.html
然后检查状态git status
提示:index.html被修改了,让你添加到暂存区以提交,因为它和暂存区的状态不一样了,所以他会提示你
你可以再次添加$ git add index.html
修改被放到暂存区,然后需要你用commit提交$ git commit index.html -m '我修改了index.html'
所以,git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。 一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的:
比较版本差异和查看版本库状态修改html文件如下echo diff >> index.html
git diff可以查看修改的内容git diff
每次清楚index.html作了什么修改后,再把它提交到仓库,提交修改和提交新文件是一样的两步,git add和git commit:
$ git add index.html$ git commit -m "add diff"
注意
要随时掌握工作区的状态,使用git status命令。如果git status告诉你有文件被修改过,用git diff可以查看修改内容。
现在可以查看一下历史记录git log
记录目录按照先后顺序排列,第一列为最新提交版本,第二列次之,以此类推。
版本回退当你误删了文件,可以回到上一个提交的版本git log命令查看历史记录
commit 5078bca90fce4a84846fc2adebd550b74dab8576 (HEAD -> master)Author: LuYuanGit <18392709319@163.com>Date: Wed Nov 8 21:46:05 2017 +0800
second commit
commit 7a2b6bf0429031b4f901c8fb0c25c93ad6e845dfAuthor: LuYuanGit <18392709319@163.com>Date: Wed Nov 8 21:38:28 2017 +0800
first commit
commit是这个版本的id,找回版本就靠它
太乱,看不清?$ git log --oneline
5078bca (HEAD -> master) second commit7a2b6bf first commit
返回上一个版本$ git reset --hard HEAD^
这里HEAD相当于是指针,指向了上一次的commit id,你也可以直接写上commit id 写上前7位,如下$ git reset --hard 5078bca
提示:HEAD is now at 5078bca second commit
(如果要直接推送:git push -f origin master)
然后查看一下当前目录文件
$ lsindex.html又回来了
cat index.html内容都在,高兴。
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向对应版本的commit id
git reset扩展
git reset –mixed:此为默认方式,它回退到某个版本, 工作区不变,回退历史区 和 暂存区git reset –soft:回退到某个版本,只回退了历史区的信息,工作区 和 暂存区 都不变git reset –hard:彻底回退到某个版本,回退 工作区 、历史区 和 暂存区 。
撤销修改 修改完后,在git status时,会提示你(use "git checkout -- <file>..." to discard changes in working directory)这句话,
那么就可以git checkout -- index.html
把index.html文件在工作区的修改全部撤销,
即时你git add index.html 添加到了暂存区,没关系,照样可以撤销git status会提示(use "git reset HEAD <file>..." to unstage)
那么
$ git reset HEAD index.html Unstaged changes after reset: M index.html
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
删除文件 $ rm index.html
有两种情况:我误删了但暂存区里还有呢,所以可以很轻松地把误删的文件从暂存区恢复到工作区:
$ git checkout -- index.js
确实要删除,那就确认删除,并提交$ git rm index.js$ git commit -m "delete index.js"
分支(继续补充)查看分支:git branch创建分支:git branch <name>切换分支:git checkout <name>创建+切换分支:git checkout -b <name>合并某分支到当前分支:git merge <name>删除分支:git branch -d <name>放弃这次合并: git merge --abort
合并分支时发生冲突并处理:1.新建dev分支,修改内容,添加提交,2.切换到主分支,再次修改内容,添加提交3.git merge dev 合并dev到mater,这里会有错误4.git merge --abort 放弃合并,或者,vim <file> 删掉冲突的地方,保留你需要的,保存退出,5.再次添加提交
隐藏工作台(继续补充)用git stash“储藏”起来$ git stash
用git stash pop,恢复git stash pop
克隆到本地:git clone <别人的仓库地址>切到文件夹中:cd <file>查看仓库的源是谁:git remote -v删除仓库的源:git remote remove origin再次查看仓库的源:git remote -v把仓库的源改为自己的git仓库:git remote add origin <自己的git仓库地址>推送到远程仓库:git push -u origin master
意思是上传我本地的 serverfix 分支到远程仓库中去,仍旧称它为 serverfix 分支
远程分支操作
转载于:https://www.cnblogs.com/luyuans/p/7806647.html
相关资源:JAVA上百实例源码以及开源项目