走进Git的世界

来源:互联网 发布:猪湾事件知乎 编辑:程序博客网 时间:2024/05/28 16:14

如果你在读这篇文章,说明你跟大多数开发者一样对GIT感兴趣,如果你还没有机会来试一试GIT,我想现在你就要了解它了。

GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征。所以,这篇文章的主要目的就是通过介绍GIT能做什么、它和SVN在深层次上究竟有什么不同来帮助你认识它。

不搞卵弹琴了,直接说重点,git与svn有啥区别呢?不急不急,老衲慢慢给你们讲解:

   1.GIT是分布式的,SVN不是:一说分布式,大家可能就懵逼了,分布式就是指每个开发人员从中心版本库/服务器上chect out代码后会在自己的机器上克隆一个自己的版本库。可以这样说,如果你被困在一个不能连接网络的地方时,就像在厕所蹲坑时、飞机上,地下室,电梯里等,你仍然能够提交文件,查看历史版本记录,创建项目分支,等。对一些人来说,这好像没多大用处,但当你突然遇到没有网络的环境时,这个将解决你的大麻烦。而SVN是一种万众瞩目的集中式方式来进行管理,所有终端都直接对应SVN代码服务器!

2.GIT把内容按元数据方式存储,而SVN是按文件:

所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。如果你把.git目录的体积大小跟.svn比较,你会发现它们差距很大。因为,.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。

3.GIT分支和SVN的分支不同:

分支在SVN中一点不特别,就是版本库中的另外的一个目录。如果你想知道是否合并了一个分支,你需要手工运行像这样的命令svn propget svn:mergeinfo,来确认代码是否被合并,所以,经常会发生有些分支被遗漏的情况。

然而,处理GIT的分支却是相当的简单和有趣。你可以从同一个工作目录下快速的在几个分支间切换。你很容易发现未被合并的分支,你能简单而快捷的合并这些文件。

4.GIT没有一个全局的版本号,而SVN有:

目前为止这是跟SVN相比GIT缺少的最大的一个特征。你也知道,SVN的版本号实际是任何一个相应时间的源代码快照。我认为它是从CVS进化到SVN的最大的一个突破。

5.GIT的内容完整性要优于SVN:

GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。这里有一个很好的关于GIT内容完整性的讨论 –http://stackoverflow.com/questions/964331/git-file-integrity

git简单的流程:
1.克隆远程代码到本地(通常切换到develop分支)
2.创建忽略文件.gitignore
3.更新本地的代码最新(git pull)
4.根据需求创建本地分支(通常以最新的develop分支为基准)
5.在新创建的分支上完成开发
6.提交开发的功能(git add * + git commit -m '注释' + git push origin 所在的开发分支名称)
7.切换到develop分支,并更新develop分支为最新
8.合并已完成开发的分支过来(git merge 分支名称)
9.如有冲突,解决冲突,并commit
10.推送develop分支的最新变更至远端(git push origin develop)

列子:
需求:增加一个帮助页面
开发:
1.进入本人的虚拟机,并到项目目录下。
2.切换至develop分支,并更新。
3.新建分支help
4.完成开发
5.提交本地更改,并推送至远端。
6.切换值develop分支,并更新。
7.在develop分支下,合并help分支。
8.解决冲突并提交。
9.将develop分支推送至远端。


命令流程示例:
cd /yourPatn/jxc_dev
git status
git checkout develop
git pull
git checkout -b help
#开发示例………………
git add *
git commit -m 'finish help '
git push origin help
git checkout develop
git pull
git merge help
git pull
git push origin develop




 git update-index --skip-worktree  #强制忽略
 git update-index --no-skip-worktree  #取消强制忽略
 git update-index --assume-unchanged  #强制忽略
 git update-index --no-assume-unchanged  #取消强制忽略

1 0
原创粉丝点击