关于版本控制
版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统。
如果你是位图形或网页设计师,可能会需要保存某一幅图片或页面布局文件的所有修订版 本。采用版本控制系统(VCS)是个明智的选择。有了它你就可以将某个文件回溯到之前的 状态,甚至将整个项目都回退到过去某个时间点的状态。你可以比较文件的变化细节,查 出是谁最后修改了什么地方从而造成某些怪异问题,又是谁在何时报告了某个功能缺陷, 等等。使用版本控制系统通常还意味着,就算你胡来搞砸了整个项目,把文件改的改,删的删,你也可以轻松恢复到原先的样子。而由此额外增加的工作量却微乎其微。
1 本地版本控制系统
大多本地版本控制系统都是采用某种简单的数据库来记录文件的历次更新差异。如下图:
本地版本控制2 集中化的版本控制系统
这类系统,诸如 CVS,Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或 者提交更新。如下图:
集中化版本控制3 分布式版本控制系统
在这类系统中,诸如 Git,Mercurial,Bazaar 还有 Darcs 等,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。如下图:
分布式版本控制安装Git
有许多安装方式,概况起来主要有两个,一种是通过编译源代码来安装;另一种是使用为特定平台预编译好的安装包。
-
在Linux上安装
如果要在Linux上安装预编译好的git二进制安装包,可以直接使用系统提供的包管理工具。在Fedora上yum安装:
$ yum install git-core
在Ubuntu这类Debian体系的系统上,可以用apt-get安装:
$ apt-get install git-core
-
在Mac上安装
在Mac上安装git有两种方式。最容易的当属使用图形化的git安装工具,下载地址:
另一种是通过Macports(http://www.macports.org)安装。安装好Macports之后,使用下面的命令安装git:
$ sudo port install git-core +svn +doc +bash_competition +gitweb
-
在Windows上安装
- 有个叫做msysgit的项目提供了安装包,可以从Google code的页面上下载安装文件:
安装完之后,就可以使用命令行的git工具了,另外还有一个图形界面的git项目管理工具。
常用git命令
-
用户信息配置
要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次git提交都会引用这两条信息,说明是谁提交了更新。
$ git config --global user.name "" $ git config --global user.email ...
-
设置的是默认使用的文本编辑器
默认会使用操作系统指定的默认编辑器,一般可能会是 Vi 或者 Vim。也可以重新设置:
$ git config --global core.editor ...
-
获取帮助说明指令
git help [子命令]
-
初始化本地仓库
使用以下命令会生成一个.git文件夹(本地代码仓库),.git文件夹用来管理本地代码,修改上传,版本回退。
git init
-
查看配置信息
查看信息是否配置成功
git config -l
-
将创建的文件添加到stage暂存区
git add .
-
提交文件到指定的分支(默认mater分支)
git commit -m "(添加注释说明)"
-
删除文件并提交
git rm 文件名
-
将删除的文件提交到本地库
git commit -m "(添加注释说明)"
-
查看日志
查看git的更新日志和40位哈希值版本号
git log
查看git的更新日志和7位哈希值版本号
git relog
-
代码版本回退
重置到当前版本 git reset --hard HEAD 重置到上上个版本 git reset --hard HEAD^^ 重置到往上3个版本 git reset --hard HEAD~3 重置到指定版本 git reset --hard 七位版本号
-
恢复
恢复某次提交的状态 git revert <$id> 恢复最后一次提交的状态 git revert HEAD
-
查看、切换、创建、删除分支
-
查看分支
查看远程分支
git branch -r
查看各个分支最后提交的信息
git branch -v
查看已经被合并到当前分支的分支
git branch --merged
查看尚未被合并到当前分支的分支
git branch --no --merged
-
切换分支
git checkout <branch>
-
创建新分支
创建新的分支并且切换过去
git checkout -b <new_branch>
创建基于branch分支的新分支new_branch
git checkout-b <new_branch> <branch>
把某次历史记录checkout出来并创建新分支
git checkout $id -b <new_branch>
-
删除分支
删除某个分支
git branch -d <branch>
强制删除某个分支(未被合并的分支在被删除时需要强制)
git branch -D <branch>
-
-
git暂存管理
暂存
git stash
列所有暂存区
git stash list
恢复暂存区的内容
git stash apply
删除暂存区
git stash drop
-
git远程仓库管理
查看远程服务器地址
git remote -v
查看远程服务器仓库状态
git remote show origin
添加远程仓库地址
git remote add origin ...
删除远程仓库
git remote rm <repository>
-
git远程分支管理
-
远程分支抓取
抓取远程仓库所有分支更新并合并到本地
git pull
抓取远程仓库所有分支更新并合并到本地,不要快进合并
git pull --no--ff
-
push远程分支
push所有分支
git push
将本地分支推到远程主分支
git push origin master
将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库)
git push -u origin master
创建远程分支
git push origin <local_branch>
创建远程分支git push origin <local_branch>:<remote_branch>
先删除本地分支,然后再push删除远程分支git push origin :<remote_branch>
-
Git与GitHub
GitHub是目前为止最大的开源Git托管服务,并且是少数同时提供公共托管和私人托管服务的站点之一。
接下来的内容主要描述讲解如何使用git来将本地仓库与GitHub账户的仓库建立连接。
-
建立本地git仓库
进入你要同步的本地项目的根目录下,执行git命令:
git init
-
将项目中所有的文件添加到仓库中
git add .
如果只想添加某个特定的文件,只需把 . 换成特定文件名即可。
-
将add进来的文件提交到仓库
git commit -m "(添加注释语句 )"
-
在自己GitHub上创建一个仓库(repository),界面如下:
创建仓库Repository name:填写仓库名称
Description:描述,填写仓库的主题、内容
Public、Private:仓库类型可选:公有、私有
Initialize this repository with a README:初始化readme说明文件
最后,点击Create repository就可以成功创建仓库了。
-
获取仓库地址
要想本地仓库与远程建立连接,需要有远程仓库的地址,获取方法如下图:
获取仓库地址
-
将本地仓库关联到GitHub上
进入本地仓库目录,执行如下git命令:
git remote add origin ...(远程仓库地址)
-
在上传本地目录之前,要先pull一下,执行如下git命令:
git pull origin master
-
上传本地仓库到GitHub远程仓库
git push -u origin master
-
执行完成,如果没有异常,等待上传完成就上传成功。期间会要求输入账户名和密码,只需要输入GitHub的账户和密码就行。
Git GUI
Git有提供图形界面,下面简要介绍如何使用。
-
打开Git GUI,在右下角处选择"重新扫描",如下:
扫描新的改动 -
扫描完成后,在左上角处会显示"未缓存的改动",如下:(点击左边的图标即可将文件添加到已缓存区)
未缓存 -
点击左侧图标,将"未缓存文件"添加到"已缓存文件",如下:
已缓存 -
在"提交描述"框内填写此次修改的目的和原因,然后提交。
第一行:一句话概况你做的修改。
第二行:空行。
第三行:请描述为什么你做的这些改动是好的。
提交描述
-
最后提交,会要求输入用户名和密码,同样是GitHub的账户名和密码即可。
账户 密码 -
上传成功,提示如下:
上传成功
大概流程差不多这样了,还有其他一些功能,比如分支管理,等深入学习了有时间再分享。
后言
感谢阅读,欢迎指教。本人简书和GitHub —>(简书/GitHub)
good luck!
网友评论