vs中使用git

一、概念

Git是一个强调速度的分布式版本控制软件和源代码管理系统(SCM,source code management)。Git最初是由Linus Torvalds为内核开发而设计的管理软件。自从Git推出以来,已经被很多开源项目所采纳。每一个Git工作目录是一个带有完全历史记录和版本信息的仓库,不依赖于网络和中央服务器。

Github

GitHub是一个平台,一个网站,提供给用户创建git仓储空间,保存(托管)用户的一些数据文档或者代码等。概括来说,Github只是一个提供存储空间的服务器,用来存储git仓库。类似的网站还有很多,比如码云等等

二、为什么要用Git

  • 更顺畅的工作流程,开发过程中,完全可以离线操作
  • 快速,Git分布式架构使得本地仓库包含所有的历史版本信息,你可以在不同的版本之间快速切换
  • 弹性的本地分支,在svn下,你建一个分支需要把源代码复制到另外一个文件夹,而在Git下,创建分支的代价是非常小的,只需一条命令
  • 仓库目录结构简洁,用Git复制一个项目,只会在项目根目录创建一个.git的目录,而其他目录很干净
  • 内容按元数据方式存储,所有的版本信息都位于.git目录下
  • 完整性好,更易于协作开发
  • 用户群大,现在已经有成千上万个开源项目采用Git来做项目管理,github上更是有无数个代码仓库

三、git与svn的区别

git是分布式版本控制系统,拥有两个仓库,一个是本地仓库,一个是远程仓库。代码提交是提交到本地的(如此速度就快),当然生成补丁(patch)然后推送(push)到远程服务器上是需要联网的;SVN是集中式版本控制系统,只有一个远程仓储,代码提交都是提交到远程服务器上,是需要一直联网的(如此速度就慢)

SVN这样的集中式版本控制系统,它的完整代码仓库(代码仓库不仅仅只包含了代码,还包含各个历史版本的信息等)在中心服务器上,一旦这个中心服务器挂了,也就是完整的代码仓库挂了,虽然你本地可能之前有从中心服务器上取得过代码,但是那些历史版本信息都没有了,而且你也无法再提交代码。

git不同,git没有中心服务器的概念,每一个git客户端(git节点)都含有一个完整的代码仓库(前提是你之前从远程git仓库fetch过代码),所以那些历史版本信息都在你本机上,假如哪一个git节点挂掉了,随意从其他git节点clone一个代码仓库过来就ok了, 那些原来的代码、版本信息之类的都还是完整的(当然如果你在这个挂掉的git节点上新增的代码是没有掉了的)。

综上,git的每一个节点(第一次从远程git仓库取得代码后,该git节点就是一个完整的代码仓库)相当于SVN的中心服务器,都包含完整的代码仓库

四、vs中使用git

在vs中已经帮我们安装了git,我们只需要在“项目”--“团队资源管理器”中打开即可使用

git的一些常用术语:

克隆(clone):从远程服务器上克隆完整的git仓库(包括代码和版本信息)到自己的机器上

提交:将自己修改的代码提交到本地的仓库

拉取(同步):从远程仓库拉取新的代码到本地仓库(拉取的时候必须先进行提交)

推送(push):将修改的代码推送到远程仓库

冲突:冲突产生是因为git无法将修改的内容进行自动合并时就会产生冲突,这时就需要我们手动进行合并冲突

流程:

首先在服务器上(github,码云)上新建项目,在vs中进行克隆之后,会在本地指定的文件夹中生成.git的隐藏文件,Git用来进行版本控制和内容跟踪的所有文件都在该文件夹下。我们只需要将代码放到包含.git的文件夹下提交并推送即可,这样就推送到了远程仓库。修改代码之后也是进行提交推送即可。如果远程仓库有新的更新,我们只需要拉取。

注意

在git中文件有三种状态:已修改,已暂存,已提交

已提交表示该文件已经被安全地保存在本地数据库中了;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已修改的文件放在下次提交时要保存的清单中。

理解分支
分支(branch)有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作

分支内部原理

1、如下图所示,版本的每一次提交(commit),git都将它们根据提交的时间点串联成一条线。刚开始是只有一条时间线,即master分支,HEAD指向的是当前分支的当前版本。

2、当创建了新分支,比如dev分支,git新建一个指针dev,dev=master,dev指向master指向的版本,然后切换到dev分支 ,把HEAD指针指向dev,如下图。

3.在dev分支上编码开发时,都是在dev上进行指针移动,比如在dev分支上commit一次,dev指针往前移动一步,但是master指针没有变,如下:

4、当我们完成了dev分支上的工作,要进行分支合并,把dev分支的内容合并到master分支上。其内部的原理,其实就是先把HEAD指针指向master,再把master指针指向现在的dev指针指向的内容。如下图。

5、当合并分支的时候出现冲突(confict),比如在dev分支上commit了一个文件file1,同时在master分支上也提交了该文件file1,修改的地方不同(比如都修改了同一个语句),那么合并的时候就有可能出现冲突,如下图所示

这时候执行,git会默认执行合并,但是要手动解决下冲突并提交,现在git分支的结构如下图

参考文档:

http://blog.csdn.net/chenj_freedom/article/details/50543152

http://blog.csdn.net/wengpingbo/article/details/8985132

http://www.nowamagic.net/academy/detail/48160210

vs中使用git的更多相关文章

  1. 在 Linux 中使用 Git 及其 和 Eclipse 的集成

    ##参考资料## 我是通过阅读<Pro Git>这本书学习 Git 的,我读的时候还是第一版的英文版,现在已经出第二版了,而且英文版和中文版都有.英文第二版的地址是 [https://gi ...

  2. 如何在 Visual Studio 中使用 Git 同步代码到 CodePlex

    开源社区不管在国内还是国外都很火热,微软也曾因为没有开源而倍受指责,但是随着 .Net framework.ASP.Net MVC等框架的逐渐开源,也让大家看到了微软开源的步伐.CodePlex 则是 ...

  3. 如何在 TFS 中使用 Git

    对 Charley Blog 的代码进行版本控制的想法由来已久,在代码建立之初其实已经使用过 TFS 进行控制,只是后期没能好好用起来,加之后来系统环境的变化导致TFS连接丢失,便算是正式放弃了版本控 ...

  4. 使用GIT进行源码管理 —— 在VisualStudio中使用GIT

    GIT作为源码管理的方式现在是越来越流行了,在VisualStudio 2012中,就通过插件的现实对GIT进行了官方支持,并且这个插件在VS2013中已经转正.本文在这里简单的介绍一下如何在Visu ...

  5. [.net 面向对象程序设计进阶] (27) 团队开发利器(六)分布式版本控制系统Git——在Visual Studio 2015中使用Git

    [.net 面向对象程序设计进阶] (26) 团队开发利器(六)分布式版本控制系统Git——在Visual Studio 2015中使用Git 本篇导读: 接上两篇,继续Git之旅 分布式版本控制系统 ...

  6. 常见开发需求之前端利器webstorm中的git和快捷键

    需求   前端开发中我们最常用的一般是webstorm.hbuilder和sublime,因为以前使用过一段时间eclipse所以我对webstorm的感觉比较良好,再加上以前使用hbuilder维护 ...

  7. VS2013中使用git发布解决方案master分支的时候出现错误

    VS2013GIT基础用法请自行参考:不会Git命令,照样玩转Git 环境:VS2013+ 码云错误描述:在VS2013中使用git发布解决方案master分支的时候出现“无法将本地分支 master ...

  8. (转载)在Visual Studio 2015中使用Git

    原文:http://blog.csdn.net/damon316/article/details/51885802 1. VS2015在对Git的支持 VS2015是微软IDE集成开发环境的重量级升级 ...

  9. 在Spring tools suite中使用git 共享项目

    我们都在eclipse 和 myeclipse中使用过cvs 和 svn 版本控制工具进行团队开发,今天我学习了另外一种版本控制工具git,下面我演示如何在Spring tools suite中使用g ...

随机推荐

  1. python之最强王者(5)——Nunber(数字)

    1.Python Number(数字) Python Number 数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值,将重新分配内存空间. 以下实例在变量 ...

  2. windows7 x64下maven安装和配置

    http://maven.apache.org/download.cgi下载maven 环境配置 验证配置是否成功 本地仓库配置 这是原来的配置文件: 更改为: link 离线安装 eclipse m ...

  3. Eclipse 日期和时间格式自定义

    点击下载Eclipse插件  org.eclipse.text_3.5.300.v20130515-1451.jar  覆盖下图所示的jar文件. /************************* ...

  4. Hibernnate延迟加载策略(这么详细你还看不懂)

    好久没有认真写过博客了,今天就好好的写一篇吧!!!!!!!!! 当Hibernate 从数据库中加载某个对象(例如:Dept对象)时,如果同时自动加载所有的关联的某个对象(例如:Emp对象),而程序实 ...

  5. iOS-集成支付宝支付、微信支付简单总结

    支付宝快捷支付: 官方文档中,支付宝说建议我们使用支付时要讲签名过程放在服务器端,这样安全.同时给的demo中签名是在本地移动端做的...不过支付宝的集成还是较简单的. 为了安全签名当然放后台做了.我 ...

  6. 移动端嵌入pdf.js远程请求pdf出现(206)

    最近在做移动端的开发,需要嵌入pdf进行预览.看了很多的js组件后选择了pdf.js:使用起来还是比较方便的,至于使用网上有很多的教程. 但在使用过程中出现了如下一个问题(我做的是IOS系统): 问题 ...

  7. 高仿ios版美团框架项目源码

    高仿美团框架基本已搭好.代码简单易懂,适合新人.适合新人.新人. <ignore_js_op>     源码你可以到ios教程网那里下载吧,这里我就不上传了,http://ios.662p ...

  8. iOS开发之Bug(持续更新)

    前言:收集在开发和学习的过程中遇到的bug. 1.循环利用cell的ID设置位置写错了.导致程序奔溃. 2.对于除数算法,可以直接算出结果的就写上结果,不要偷懒写式子让计算机自己算,更何况是除数,会有 ...

  9. 一步步学习 Spring Data 系列之JPA(一)

    引入: Spring Data是SpringSource基金会下的一个用于简化数据库访问,并支持云服务的开源框架.其主要目标是使得数据库的访问变得方便快捷,并支持map-reduce框架和云计算数据服 ...

  10. 豆芽儿 - 高端IT人才成长社区 上线啦!

      豆芽儿 - 高端IT人才成长社区 这是我们新打造的网站,全新设计了用户体验,给你更爽快的学习体验.为你分享敏捷开发.项目管理.需求分析.软件设计.UML.中层领导力.CMMI.IT职场等“高大上” ...