不懂Git,别说自己是程序猿–20分钟git快速上手(转)

Git如日中天的今天,不懂git都不好意思跟人说自己是程序猿。你是不是早就跃跃欲试了,只是苦于没有借口(契机)。
好吧,机会就在今天。 给我20分钟,是的,只要20分钟, 让你快速用上git。

我们废话不多说,直接来干货。

我们将会介绍一下几点:

一, 什么是git

二,使用git的一般开发流程

三,快速安装新建项目。holloword。

开始:

一、什么是git。

阅读本文的前提是你知道或者用过至少一种源代码管理工具,比如:SVNCVS 或者TFS等等。
你必须知道什么是源代码管理。如果这些都不满足。请直接跳过本文。

了解陌生事物的最好办法,是和已知事物类比。 —孔子

我们以svn为例。  我们都知道传统的源代码管理都是以服务器为中心的:

每个开发者都直接连在中间服务器上, 本地修改,然后commit到svn服务器上。

这种做法看似完美,但是有致命的缺陷:

1. 开发者不能本地跟踪代码版本。 所有的信息都是在服务器上。 
你把本地的代码改了很多,但是又不能提交。通常,本地只能缓存一个版本。对于小项目无所谓, 但是项目一复杂,人员多就麻烦了。
通常你本地的代码都全是红色的。自己都不知道今天修改了什么, 有哪些修改是真正应该提交给svn的。

2. 因为第一点,一旦离开服务器, 程序猿将无法正常工作。 因为本地不能跟踪代码版本。  你的(几乎)任何操作都必须连上服务器。比如, show
log, blame,show history等等。

3. 中央服务器压力过大。  因为每个人都必须把代码提交到服务器,并且做daily build。

4. 对于大型项目, svn几乎不可用。 例如linux内核项目, 开发者何止几万? 都直接提交给svn服务器的话还不乱套了。

5. 对于个人的私人项目而言(或者对于小公司的项目), 不用版本控制当然不行,但是为了用版本控制而专门架设svn服务器有有点舍不得。

有没有能解决上述几个问题的东东呢?  恩, 答案是肯定的。

Linux内核的作者也遇到了这些问题,于是他决定再一次改变世界, 重写一个可以本地使用的svn。

对, 这就是git。  分布式代码版本管理系统。(说人话 :就是不用服务器的svn)

我们来看git的结构:

git没有中央服务器。 你装上git软件之后,你就可以指定本地的文件夹进行版本控制了。你可拔掉网线,然后在本地修改,
commit,revert(rollback), branch, restore, show log, blame, history 等等,
全部你之前在svn里面可以用的操作。 简单的说,你就完美了。

你可能意识到一个问题了。   就是天下大乱了。


每个人都自顾自的开发,怎么协作呢?  恩,通常git比svn会多出两个操作, 就是 pull
和push。

我们看一个复杂一点的图:

开发者之间通过 pull和push操作, 把别人的修改拉过来,或者把自己的修改推给别人。

恩,你可能还是觉得有问题,我们生产 环境中, 以谁的代码为最终版本呢?

这个问题确实比较棘手,因为,从单纯的技术上将,每个开发者的机器都是对等的。 没有主次之分。

我们还有办法:

技术上不能解决的问题,我们从制度上解决. —- 孟子

从分布式环境中我们模拟出一个中心来:

我们引入Leader这个角色。  他的机器是最终版本。 每个开发者都必须把最终的修改版push给leader。
leader会review然后提交。他就是最终版本。

恩, 我们好像还漏掉一个大问题, 说git,怎么漏掉了github呢。 github是什么。

我们知道,如果每个人都本地修改的话,本地可能不安全,(硬盘坏了,笔记本被偷了。。。。)

我们可能需要一个安全的服务器来存储/备份代码。对于开源的项目,可能是需要一个地方分享你的代码,你不可能24小时开着笔记本,让别人从你这pull代码。

于是, 网上所谓的源代码托管网站就冒出来了。 github就是这样的。

看这个图, 我只修改了其中一个地方, 就是把leader的机器换成了。 github.com 提供的在线账户。

所以, git和 github没有必然联系。

这里有几个常用的在线托管地址, 有兴趣自己看看:

1. github.com,  大名鼎鼎。 免费,只支持开源项目, 不支持私有项目。

2.  bitbucket.com ,同样大名鼎鼎。 免费, 支持开源项目和私有项目。
免费用户最多5个。项目无限。

3.   git.oschina.net, 国内顶尖托管平台,
我本人正在用的就是这个。  支持开源项目和私有项目。 成员无限, 项目1000个。   使用的是阿里云服务器,
速度极快。  本人推荐5颗星。

二、 git开发的一般流程。

上面其实已经涉及了使用git的一般结构。 那么生产环境中, git是如何应用的呢。

本人知道的模型如下:

每个开发者都向自己的项目服务器(leader)提交代码, leader向公司服务器提交。 当然这个leader是可有可无的。如果项目小的话, 
开发者可以直接向公司服务器提交。  公司的服务器就是最终版本。  一般公司还会有持续集成CI服务器。 
我们可以在公司的源码服务器上设置git的hook。 自动触发CI服务器工作。 这是后话,不多说了。

三、  前面的概念弄清楚之后, 上手就容易多了。 我们helloworld。

1.   这是git的官网:http://git-scm.com/ 
去下载windows客户端。

如果是linux的话, sudo apt-get install gitcore

2.  注意, 官网的客户端都是命令行的。 命令行是高阶用法。不在这里说了。 我们下个gui。

我用的是TortoiseGit。  https://code.google.com/p/tortoisegit/ 
, 大家恐怕都熟悉svn时代的乌龟爬。上手快。 我们下面的操作都是gui上的。

安装过程不说了。 一路next。 我们跳过。 直接到最后。假设你现在已经安装完成了。

比如我已经有一个工程, helloworld:

这是工程文件的内部结构:

现在我们想让helloworld用上git怎么做呢, 在工程根目录下,点击鼠标右键。

选择 Create repository。

这个选项不要勾上。 稍后我们会解释什么是 Bare。

然后就完成了。

里面多出了一个 .git目录。 当前的目录(及其所有子目录)已经在git的监视之中了。 但是当前的代码还没有添加到git的跟踪数据库中。 
简单的说,git还没有储存任何版本信息。 我们需要进行第一次提交:

git默认你本地会有一个主分支master。

我们写一些注释, 并且勾上想要添加到git的文件。 (如果有子目录的话, 它都会显示在这里。)

提交完成, close。 这个push按钮,稍后再说!

好了,这个时候我们在回到文件夹,看看有什么变化:

现在这些文件就添加进git了。

剩下的你就可以为所欲为了。 想svn一样,自己试试几个命令吧: 修改, difference, commit, revert,

到这你已经入门了。

最后我们来介绍两个重要的概念。

1. “git目录”,   就是指上图中,项目根目录下生成的 “.git” 文件夹。  用过svn的同学都知道,
svn有‘.svn’文件夹。  他们的作用差不多。 这里保存了git的本地数据库资料。就是所有的版本信息。  
跟svn不一样的地方就是,git中,只有根目录下有这个目录, 所有的子目录下都没有, 也就是每个工程只有一个.git目录。

2.  “git工作目录”, 其实就是你的工程目录, 比如上图中的工程跟目录:H:\mycode\helloworld\ 
。  问什么有这个工作目录呢。 就是你工作在这个目录下, 你可以修改编辑里面的文件,最后把修改提交给git目录。 
这个共组目录还有一个神奇的地方就是,  你可以创建不同的branch(你默认工作在master下), 当你切换不同的branch时,
你的工作目录(工程目录)里的所有文件都会变成当前branch对应的文件。 这个不展开了。

最后再解释上面留下的两个问题:

1. “Bare”  创建Bare的意思是: 你只想要git的数据库(即上图中的 “.git”文件夹。), 而不想要当前的文件。
这通常用在公司的中央服务器上。 它不需要当前项目的实际代码,只需要保留git数据库信息就行了。

2. 在commit之后的对话框中的 push的意思。   正如之前介绍的。
push的意识是把你的修改push给别人(或者给公共服务器)。  commit的意思只是提交到本地的 .git 数据库。
并没有更新别别人。  所有提交完之后, 乌龟很贴心的给我们一个push按钮。 通过它你可以快速把刚刚的修改push给别人,或者给服务器。

总结, 这不是一本完全的git手册,但至少能让你消除git恐惧症,快速入手。

这里是gitbook的中文版: http://gitbook.liuhui998.com/ 
他是真正的大而全。 为什么最后才说它呢? 因为它就像是一本 牛津大辞典, 全面,权威。 
但是对于幼儿园小朋友学英语,就不能一上来就背它吧。  先跟着别人说,上手要紧。   之后有什么不会的,再去查字典。

转自:http://www.makeyuan.com/2014/01/28/886.html

时间: 2024-08-07 06:59:05

不懂Git,别说自己是程序猿–20分钟git快速上手(转)的相关文章

20分钟1快速上手Spring Boot应用

20分钟快速上手Spring Boot应用 Spring Boot(简称SB)用于简化Spring应用的配置过程. 采用"习惯优于配置"的方式开发 学习SPB其实就是掌握它的各项约束与要求. 学习视频: http://www.itlaoqi.com/chapter/1683.html 源码地址: QQ群 814077650 , 群共享中自助下载 老齐的官网: itlaoqi.com (更多干货就在其中) 前置准备 JDK 8以上版本 建议安装Intellj Idea Ultimate(

C 系程序员20分钟学会 Dart 语言

1. 概述 Dart 是 Google 下一代操作系统 Fuchsia 的御用程序开发语言,而是 App 跨平台框架 Flutter 使用的开发语言.它是一种面向对象的语言,使用 C 风格语法,揉合了 Javascript.Python.Java 等语言的相关特性. 如果之前熟悉这几门语言,可以快速入门. 2. 应知就会 2.1. 语句结束符 同 C 语言一样,Dart 所有语句都以 ; 结束. 2.2. 注释 同 Javascript,单行用 //, 多行用 /* */. 如果要支持文档生成工

常用的20个Git命令——每个都举例说明

很多人关于git命令没有形成比较统一.可以自己借鉴的模板,所以在此文中,我将讨论在使用Git时经常使用的前20个Git命令.并带有相关示例,希望能够帮助你们. 以下是涉及的Git命令: Git命令 git config 用法: git config –global user.name “[name]” 用法: git config –global user.email “[email address]” 此命令分别设置要与提交一起使用的作者姓名和电子邮件地址. git init 用法: git

作为程序猿/媛的你在5.20这一天都干了什么???

今天是2017.5.20,也许你忙的都忘记了今天是网络情人节,因为5.20谐音我爱你,被称为网络情人节,也许身为菜鸟程序猿的你会写个小程序或者copy一个网页发给自己的女票或者媳妇或者.......我相信大多数工作的程序猿都不会再搞这种看似很幼稚的东西,因为很low,就算给女票看了,如果不是那种网页版的,女票也许看不懂,还不如给女票或者媳妇发个大红包或者去海吃一顿或者去大商城狂购一番更让女票高兴和k开心吧,之前我也给自己女票发过网页版的心啊,动态图片啥的,当然修改一下文字和背景音乐或者照片就行了

每一个程序猿需掌握的20个代码命名小贴士

代码中到处都须要命名.作为程序猿.我们得给类命名,给变量命名,给函数命名,给參数命名.给命名空间命名,等等等等.以下有20条小贴士能帮助你提高你的命名能力. 1.使用可以表达意图的名字 名字得能告诉我们它要做什么,为什么存在,以及是怎样工作的.选择可以表达意图的名字.将更有利于我们理解代码. <span style="font-size:14px;">int d; // elapsed time in days int elapsedTimeInDays; int days

程序猿的干货:20条传说中的犯贱心理学(单身狗的福利)

1.当一个男人同一时候对两个女孩子有好感时,他更爱谁,取决于谁更不爱他.这就是传说中的犯贱心理学. 2.女生最讨厌听到的话,深表同感. "不是早和你说过吗?" "随便." "以后再说." "你自己看着办. " "你能够找到比我更好的." "我没办法对你--" "你要这么想我也没办法. " "你想多了. " "那就这样吧." &q

【5.20 专辑】来聊聊程序猿的那些花式表白

5.20 在即,程序猿们,准备好向你的女神表白了吗? 玫瑰 ?? ?巧克力 ?? ?情书 ?? ? 还记得那种经典的至尊宝式表白吗?--曾经有一段真挚的爱情放在我的面前,我没有珍惜.直到失去我才追悔莫急.如果上天再给我一次机会的话,我一定会对那个女孩说三个字"我爱你".如果一定要给这个承诺加上一个期限的话,我希望是"一万年".煽情的情话留给最爱的人,表白的不是你的礼物而是自己的一份真心,"千言万语无尽处,情到深处自然浓". 当然以上均为普通青年的

不懂CSS的后端难道就不是好程序猿?

由于H5在移动端的发展如日中天,现在大部分公司对高级前端需求也是到处挖墙角,前端薪资也随之水涨船高,那公司没有配备专用的前端怎么办呢? 作为老板眼中的“程序猿” 前端都不会是非常无能的表现,那作为后端人员需要不需要懂前端呢?为了提升价值还是需要懂点的,不然一点问题就找前端,那是不是让别人疯了…… 前端先从最常见的调样式说起吧,重要知识点之盒子模型,这里就不叽叽歪歪那些难懂的概念,直接看下面的图吧. 什么叫做外边距,内边距…… 图1:英文版 通俗点就是下面的图: 图2:中文版 再看看总宽度与总高度

你不懂,仅仅有程序猿懂

1.这里改一下就好 ,非常easy. 2.再加个XX功能吧 ,非常快. 3.你先这样实现 不行回头在改 4.刚加了功能---来立即给我的机子装一个新版本号---什么要给你3分钟加代码?!---不行! !! 如今就要 5.老板拿着还没写完的app走了.一会儿通知你:这儿竟然有一个bug 你赶紧改! !! 6.自己歇息的时候检查程序 发现逻辑漏洞 完好之后告诉老板:来更新下版本号吧 刚改动了程序 ---老板向我投来歧视的目光 7.老板--^_^我要辞职. :为什么要走??! . 不要走-给你涨工资