git (读音为/gɪt/)是一个分布式版本控制软件,由林纳斯·托瓦兹创作,最初目的是为更好地管理Linux内核开发而设计,但后来git内核已经成熟到可以独立地用作版本控制。它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。git的速度很快,git最为出色的是它的合并追踪(merge tracing)能力——维基百科。
分布式和集中式系统
分布式系统:分布式系统是相对于集中式系统而言的。个人计算机性能的提高、使用的普及使得数据的存储、计算都可以由本地机完成,促进了分布式系统的发展。分布式系统中的数据存储、任务的处理分布在网络中的不同机器上,每台主机都是一个独立的系统,联网的目的是为了获取更多的资源、丰富的服务。分布式系统是由许多台不同的机器组成的,每台主机都有自己的数据库、中央处理器、终端等,它们在物理上是分散的,在逻辑上属于同一系统——分布式系统。
集中式系统:集中式系统有一个大型的中央处理系统,中央处理系统时一台高性能、可扩充的计算机,所有的数据、运算、处理任务全部在中央计算机系统上完成。中央计算机连接多个终端,终端用来输入和输出,不具有数据处理能力。远程终端通过网络连接到中央计算机,它们得到的信息是一致的。我们在日常生活中常用的银行自动提款机(ATM)、超时收款机(POS)等都是用的是集中式系统。
版本控制系统
版本控制系统(version control system),是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。版本控制系统不仅可以应用于软件源代码的文本文件,而且可以对任何类型的文件进行版本控制。用的比较多的如svn,git等——百度百科。
分布式和集中式版本控制系统
分布式版本控制系统:与集中式版本控制系统相比,分布式版本控制系统没有中央服务器的。每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库。那问题来了,如何进行多个人项目开发协作呢?比如说某人在电脑上修改了文件A,同时其他人也在电脑上改了文件A。这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
集中式版本控制系统:版本库是集中放在中央服务器的,当我们实际工作的时候,用的都是自己的电脑,所以首先要连接中央服务器,从那里得到最新的版本,然后编写或者更改代码,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就很郁闷了。
如果你用过SVN与Git,不难得出一个结论:
SVN属于集中式版本控制系统,而Git属于分布式版本控制系统。
git基本操作介绍:
工作区(开发)–[add]–>暂存区–[commit]–>版本库
工作区:即开发者的工作目录
暂存区:修改已被记录,但尚未录入版本库的区域
版本库:存储变化日志及版本信息
暂存区和版本库:.git文件夹
add操作:
add发生改变的所有文件: git add .
add发生改变的一个特定的文件:git add index.txt
commit(提交到版本库)操作:
初始化仓库:git commit -m “init”
修改: git commit -m “modify”
添加: git commit -m “add read.txt”
删除: git commit -m “del read.txt”
查看工作区状态:git status
删除文件操作: git rm a.txt
文件修改–[add]–[commit]–[push]–>在coding.net的private仓库发生变化,修改完成同步
把文件推到远程仓库:git push https://git.coding.net/orzno/private.git master
(注释:把本地的版本(默认为master),推到远程仓库上去)
为远程仓库地址添加 private 别名:git remote add private https://git.coding.net/orzno/private.git
(注释:添加一个远程仓库,代号为private)
查看日志: git log
让日志单行显示:git log –pretty=oneline
版本切换: git reset –hard HEAD^^^(HEAD指当前版本,^指回退一个版本,该语句指从当前版本回退三个版本)
git reset –hard xxx(xxx代指版本号)
查看每次操作: git reflog
查看分支: git branch
创建分支: git branch xxx(xxx代指新建分支名)
切换分支: git checkout xxx(xxx代指切换到的分支名)
合并分支: git merge dev(将dev分支合并到master上)
删除分支: git branch -d xxx(xxx代指删除的分支名)
查看远程仓库别名:git remote
查看仓库地址别名:git remote -v
删除远程仓库别名:git remote remove xxx(xxx代指删除的远程仓库别名)
添加远程仓库别名:git remote add <远程仓库别名> <远程仓库地址>
修改远程仓库别名:git remote rename <旧别名> <新别名>
异常及处理
以下列出我遇到的一些异常及处理方法,以供参考:
1.
refusing to merge unrelated histories
在coding新建了个仓库private,在本地建立一个private仓库,先pull,由于两个仓库不同,无法pull。
这是因为它们是两个不同的项目,需要先把这两个项目合并。
需要如下操作(origin为远程https地址的简写):git pull private master --allow-unrelated-histories
示例:git pull https://git.coding.net/orzno/private.git master --allow-unrelated-histories
参考链接:
git官方网站(英文)
git维基百科
git从入门到精通
VCS(版本控制系统)
什么是分布式系统,如何学习分布式系统
文中若存在不妥或有误之处,敬请指正,不胜感激。