Git 系列(一):什么是 Git

导读 若是你刚步入开源的世界,你颇有可能会遇到一些在 Git 上托管代码或者发布使用版本的开源软件。事实上,无论你知道与否,你都在使用基于 Git 进行版本管理的软件:Linux 内核(就算你没有在手机或者电脑上使用 Linux,你正在访问的网站也是运行在 Linux 系统上的),Firefox、Chrome 等其余不少项目都经过 Git 代码库和世界各地开发者共享他们的代码。

 

Git 系列(一):什么是 GitGit 系列(一):什么是 Git

换个角度来讲,你是否仅仅经过 Git 就能够和其余人共享你的代码?你是否能够在家里或者企业里私有化的使用 Git?你必需要经过一个 GitHub 帐号来使用 Git 吗?为何要使用 Git 呢?Git 的优点又是什么?Git 是我惟一的选择吗?这对 Git 全部的疑问都会把咱们搞的一脑浆糊。html

所以,忘记你之前所知的 Git,让咱们从新走进 Git 世界的大门。前端

什么是版本控制系统?linux

Git 首先是一个版本控制系统。如今市面上有不少不一样的版本控制系统:CVS、SVN、Mercurial、Fossil 固然还有 Git。git

不少像 GitHub 和 GitLab 这样的服务是以 Git 为基础的,可是你也能够只使用 Git 而无需使用其余额外的服务。这意味着你能够以私有或者公有的方式来使用 Git。编程

若是你曾经和其余人有过任何电子文件方面的合做,你就会知道传统版本管理的工做流程。开始是很简单的:你有一个原始的版本,你把这个版本发送给你的同事,他们在接收到的版本上作了些修改,如今大家有两个版本了,而后他们把他们手上修改过的版本发回来给你。你把他们的修改合并到你手上的版本中,如今两个版本又合并成一个最新的版本了。浏览器

而后,你修改了你手上最新的版本,同时,你的同事也修改了他们手上合并前的版本。如今大家有 3 个不一样的版本了,分别是合并后最新的版本,你修改后的版本,你同事手上继续修改过的版本。至此,大家的版本管理工做开始变得愈来愈混乱了。网络

正如 Jason van Gumster 在他的文章中指出 即便是艺术家也须要版本控制,并且已经在个别人那里发现了这种趋势变化。不管是艺术家仍是科学家,开发一个某种实验版本是并不鲜见的;在你的项目中,可能有某个版本大获成功,把项目推向一个新的高度,也可能有某个版本惨遭失败。所以,最终你不可避免的会建立出一堆名为project_justTesting.kdenlive、project_betterVersion.kdenlive、project_best_FINAL.kdenlive、project_FINAL-alternateVersion.kdenlive 等相似名称的文件。app

无论你是修改一个 for 循环,仍是一些简单的文本编辑,一个好的版本控制系统都会让咱们的生活更加的轻松。编程语言

Git 快照分布式

Git 能够为项目建立快照,而且存储这些快照为惟一的版本。

若是你将项目带领到了一个错误的方向上,你能够回退到上一个正确的版本,而且开始尝试另外一个可行的方向。

若是你是和别人合做开发,当有人向你发送他们的修改时,你能够将这些修改合并到你的工做分支中,而后你的同事就能够获取到合并后的最新版本,并在此基础上继续工做。

Git 并非魔法,所以冲突仍是会发生的(“你修改了某文件的最后一行,可是我把这行整行都删除了;咱们怎样处理这些冲突呢?”),可是整体而言,Git 会为你保留了全部更改的历史版本,甚至容许并行版本。这为你保留了以任何方式处理冲突的能力。

分布式 Git

在不一样的机器上为同一个项目工做是一件复杂的事情。由于在你开始工做时,你想要得到项目的最新版本,而后此基础上进行修改,最后向你的同事共享这些改动。传统的方法是经过笨重的在线文件共享服务或者老旧的电邮附件,可是这两种方式都是效率低下且容易出错。

Git 天生是为分布式工做设计的。若是你要参与到某个项目中,你能够克隆clone该项目的 Git 仓库,而后就像这个项目只有你本地一个版本同样对项目进行修改。最后使用一些简单的命令你就能够拉取pull其余开发者的修改,或者你能够把你的修改推送push给别人。如今不用担忧谁手上的是最新的版本,或者谁的版本又存放在哪里等这些问题了。所有人都是在本地进行开发,而后向共同的目标推送或者拉取更新。(或者不是共同的目标,这取决于项目的开发方式)。

Git 界面

最原始的 Git 是运行在 Linux 终端上的应用软件。然而,得益于 Git 是开源的,而且拥有良好的设计,世界各地的开发者均可觉得 Git 设计不一样的访问界面。

Git 彻底是免费的,而且已经打包在 Linux,BSD,Illumos 和其余类 Unix 系统中,Git 命令看起来像这样:

$ git --version
git version 2.5.3

可能最著名的 Git 访问界面是基于网页的,像 GitHub、开源的 GitLab、Savannah、BitBucket 和 SourceForge 这些网站都是基于网页端的 Git 界面。这些站点为面向公众和面向社会的开源软件提供了最大限度的代码托管服务。在必定程度上,基于浏览器的图形界面(GUI)能够尽可能的减缓 Git 的学习曲线。下面的 GitLab 界面的截图:

 

Git 系列(一):什么是 GitGit 系列(一):什么是 Git

再者,第三方 Git 服务提供商或者独立开发者甚至能够在 Git 的基础上开发出不是基于 HTML 的定制化前端界面。此类界面让你能够不用打开浏览器就能够方便的使用 Git 进行版本管理。其中对用户最透明的方式是直接集成到文件管理器中。KDE 文件管理器 Dolphin 能够直接在目录中显示 Git 状态,甚至支持提交,推送和拉取更新操做。

 

 

Git 系列(一):什么是 GitGit 系列(一):什么是 Git

Sparkleshare 使用 Git 做为其 Dropbox 式的文件共享界面的基础。

 

 

Git 系列(一):什么是 GitGit 系列(一):什么是 Git

想了解更多的内容,能够查看 Git wiki,这个(长长的)页面中展现了不少 Git 的图形界面项目。

 

谁应该使用 Git?

就是你!咱们更应该关心的问题是何时使用 Git?和用 Git 来干吗?

我应该在何时使用 Git 呢?我要用 Git 来干吗呢?

想更深刻的学习 Git,咱们必须比日常考虑更多关于文件格式的问题。

Git 是为了管理源代码而设计的,在大多数编程语言中,源代码就意味者一行行的文本。固然,Git 并不知道你把这些文本当成是源代码仍是下一部伟大的美式小说。所以,只要文件内容是以文本构成的,使用 Git 来跟踪和管理其版本就是一个很好的选择了。

可是什么是文本呢?若是你在像 Libre Office 这类办公软件中编辑一些内容,一般并不会产生纯文本内容。由于一般复杂的应用软件都会对原始的文本内容进行一层封装,就如把原始文本内容用 XML 标记语言包装起来,而后封装在 Zip 包中。这种对原始文本内容进行一层封装的作法能够保证当你把文件发送给其余人时,他们能够看到你在办公软件中编辑的内容及特定的文本效果。奇怪的是,虽然,一般你的需求可能会很复杂,就像保存 Kdenlive 项目文件,或者保存从 Inkscape 导出的SVG文件,可是,事实上使用 Git 管理像 XML 文本这样的纯文本类容是最简单的。

若是你在使用 Unix 系统,你可使用 file 命令来查看文件内容构成:

$ file ~/path/to/my-file.blah
my-file.blah: ASCII text
$ file ~/path/to/different-file.kra: Zip data (MIME type "application/x-krita")

若是仍是不肯定,你可使用 head 命令来查看文件内容:

$ head ~/path/to/my-file.blah

若是输出的文本你基本能看懂,这个文件就颇有多是文本文件。若是你仅仅在一堆乱码中偶尔看到几个熟悉的字符,那么这个文件就可能不是文本文件了。

准确的说:Git 能够管理其余格式的文件,可是它会把这些文件当成二进制大对象(blob)。二者的区别是,在文本文件中,Git 能够明确的告诉你在这两个快照(或者说提交)间有 3 行是修改过的。可是若是你在两个提交commit之间对一张图片进行的编辑操做,Git 会怎么指出这种修改呢?实际上,由于图片并非以某种能够增长或删除的有意义的文本构成,所以 Git 并不能明确的描述这种变化。固然我我的是很是但愿图片的编辑能够像把文本“<sky>丑陋的蓝绿色</sky>”修改为“<sky>漂浮着蓬松白云的天蓝色</sky>”同样的简单,可是事实上图片的编辑并无这么简单。

常常有人在 Git 上放入 png 图标、电子表格或者流程图这类二进制大型对象(blob)。尽管,咱们知道在 Git 上管理此类大型文件并不直观,可是,若是你须要使用 Git 来管理此类文件,你也并不须要过多的担忧。若是你参与的项目同时生成文本文件和二进制大文件对象(如视频游戏中常见的场景,这些和源代码一样重要的图像和音频材料),那么你有两条路能够走:要么开发出你本身的解决方案,就如使用指向共享网络驱动器的引用;要么使用 Git 插件,如 Joey Hess 开发的 git annex,以及 Git-Media 项目。

你看,Git 真的是一个任何人均可以使用的工具。它是你进行文件版本管理的一个强大并且好用工具,同时它并无你开始认为的那么可怕。

原文来自:http://os.51cto.com/art/201608/515456.htm

本文地址:http://www.linuxprobe.com/git1.html

相关文章
相关标签/搜索