版本控制工具——git

   Git——是目前世界上最先进的分布式版本控制系统

版本控制系统:
备份(记录多个版本文件的功能), 记录操作时间线(查看历史操作,进行版本回滚、前进的功能),多端共享代码(代替各种云盘的功能),‘自动’合并(解决多人开发冲突问题)

分布式:
去中心化,也就是我们所说的分布式。Git是没有中心服务器的,每个人机器上都是一个完整的库,我们平时开发代码时的*服务器其实和我们自己机器上的库内容基本是完全一样的。虽然平时大家都是将代码提交到*服务器上再统一pull别人的代码,但实际情况你可以总是pull张三的库,然后push给李四等等操作。

去中心化意味着没有权威、没有主力,所有人都是平等的。这概念本身看起来好像没什么,但实际对社区影响是巨大的,去看看 http://github.com 上的fork功能,你可以fork任何一个你喜欢的项目,接着按自己的喜好修改成自己的项目,或是发起pull request请原作者merge你的功能到他们项目里去(这同样也得益于Git另一项与SVN很大不同的功能——分支策略),而且大多数开源项目都会鼓励你去fork它们。这里面没有权威,没有主从,所有人只要有兴趣都可以在其他人的基础上去构建更强大或是更有领域针对性的项目。

在Git中,我们将需要进行版本控制的文件目录叫做一个仓库(repository),每个仓库可以简单理解成一个目录,这个目录里面的所有文件都通过Git来实现版本管理,Git都能跟踪并记录在该目录中发生的所有更新。

版本控制工具——git


下载、安装git


配置git

git version 查看版本号

git config --global user.name  "自己的名字"

git config --global user.email "自己的邮箱"

git config --list / git config --l 查看


git常用指令

· git init :创建一个本地仓库

· git add test.txt :把本地文件(工作区)添加到暂存区

· git add . :把本地所有文件全部添加到暂存区

· git commit -m “describe message”:真正把暂存区的所有文件添加到仓库里

· git status :查看git仓库当前的状态

· git diff test.txt :查看文件具体修改了哪里?

· git log -p:查看最近到最远提交到仓库的文件信息(一串数字为特有的时间序列id 可以根据它进行版本前后回滚)

· git log --oneline :缩减查看信息为一行

· git tag -a 标签名 -m "备注"   :例:$ git tag -a v1 -m "第一版"    给提交命个名字

· git tag -a v1 -m "important" "23c4156"   :给这个版本命个名字 

· git show v1 :显示谁写的tag

· git merge dev: 把dev合并到当前分支上

· git branch dev: 创建dev分支

· git checkout dev: 切换到dev分支上开发

· git reset --hard HEAD^ : 回退到上一次 commit的时候

· git reset --hard bdeacd : 版本前进 只能根据 id进行前进(id只写出前六位就好了)

· git reflog:查看每次操作仓库内的信息(commit) 这样的话当黑窗口没了的时候,也可以查询具体操作信息,进行版本回退或者前进!

· git checkout --test.txt : 工作区恢复到最近一次的commit或者add

· git rm test.txt : 删除某一个文件

· git branch:查看所有分支

· git branh -d dev:删除分支 (-D 强制删除)



· 如果在开发的过程中发现主分支master上右bug但正在开发的dev分支没开发完怎们办,切记一点不要在master分支上直接开发,保存dev工作现场回到master上创建解决bug的分支如issue分支解决完回到master分支把issue分支合并再回到dev恢复现场
git stash:保存工作现场;
git pop:恢复工作现场;


·本地仓库配合远程仓库进行操作-github(现成而且较好的远程仓库,也是世界上最大的开源社区)
远程仓库上也有主分支master, 和 其他分支如dev。那本地仓库和远程仓库如何关联呢,开发流程是什么样的呢。我们先来分析以下基本流程
1.首先要再github上创建远程仓库用来存储项目,和本地电脑达成信任关系(ssh)
2.可以通过git clone远程仓库(git clone [email protected]:HustCst/duyiApp.git)或者通过git remote add origin [email protected]:HustCst/duyiApp.git,是本地仓库和远程仓库相关联,git pull origin master,本地才有master分支!
3.之后再本地master分支上的代码上传到 远程仓库上的master分支 第一次上传使用 git push –u origin master,之后可以简化命令,把-u去掉。(如果仓库里本身就有文件,但是我们不要了,而是想把远程的代码上传上去,我们可以通过 git push origin master –f 强行让master分支上的本地文件覆盖远程master分支上的文件)


小公司开发流程:
个人开发:
再本地master分支上创建一个新的分支dev 开发完毕后合并到master分支上,把master分支直接推送到远程master分支上,那远程另一些分支如自己创建的dev用来做什么呢? 它其实就是用来保存代码的,我们如果在本地的dev分支上未开发完毕,不能把它合并到本地的master分支上,那我们可以先把本地的dev分支保存在远程的dev分支上(git push origin dev:dev ----第一个dev本地分支名称,第二个dev远程分支名称)。之后如果你得项目删除或者丢失可以重新克隆一个项目(此时只有maste分支),之后使用git  fetch orgin  远程分支名(dev):本地分支名(dev),把远程分支上的代码clone下来并且在本地创建这个分支。

多人开发的或多了一个操作:
就是在合并本地dev分支的时候先,在master分支上来取以下远程master分支的代码,因为 为了确保你本地的master分支是最新的代码,所以需要这样做git pull origin master。

大公司开发流程:

其他都一样切记不要在本地master分支上开发,在其他分支如dev上开发后,合并到master上直接上传到 远程的 非master分支如dev分支,通过 git push origin master:dev; 之后项目参与者可以 new pull request 进行代码比对和阅读,项目管理人员在同意的情况下,会把远程dev分支上的东西合并到远程master分支上。