Git 从放弃到入门
文章平均质量分 96
Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
《Git从放弃到入门》带你走近Git、了解Git、使用Git、爱上Git。
shaonbean
关注稳定性建设,SRE体系建设
展开
-
图解 Git 使用
此页图解git中的最常用命令。如果你稍微理解git的工作原理,这篇文章能够让你理解的更透彻。 如果你想知道这个站点怎样产生,请前往https://github.com/MarkLodato/visual-git-guide转载 2016-10-18 14:06:16 · 1139 阅读 · 0 评论 -
1.1 起步 - 关于版本控制
1.1 起步 - 关于版本控制本章关于开始学习 Git。 我们从介绍有关版本控制工具的一些背景知识开始,然后讲解如何在你的系统运行 Git,最后是关于如何设置 Git 开始你的工作。 通过本章的学习,你应该了解为什么 Git 这么流行,为什么你应该使用 Git 以及你应该如何设置以便使用 Git。关于版本控制什么是“版本控制”?我为什么要关心它呢? 版本控制是一种记录一翻译 2016-10-10 15:06:27 · 590 阅读 · 0 评论 -
1.2 起步 - Git 简史
Git 简史同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代。Linux 内核开源项目有着为数众广的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。 到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。到了 2005 年,开发 BitKee翻译 2016-10-10 15:07:28 · 370 阅读 · 0 评论 -
1.3 起步 - Git 基础
Git 基础那么,简单地说,Git 究竟是怎样的一个系统呢? 请注意接下来的内容非常重要,若你理解了 Git 的思想和基本工作原理,用起来就会知其所以然,游刃有余。 在开始学习 Git 的时候,请努力分清你对其它版本管理系统的已有认识,如 Subversion 和 Perforce 等;这么做能帮助你使用工具时避免发生混淆。 Git 在保存和对待各种信息的时候与其它版本控制系统有很大差异,翻译 2016-10-10 15:11:21 · 497 阅读 · 0 评论 -
1.4 起步 - 命令行&&安装 Git
命令行Git 有多种使用方式。 你可以使用原生的命令行模式,也可以使用 GUI 模式,这些 GUI 软件也能提供多种功能。 在本书中,我们将使用命令行模式。 这是因为首先,只有在命令行模式下你才能执行 Git 的所有 命令,而大多数的 GUI 软件只实现了 Git 所有功能的一个子集以降低操作难度。 如果你学会了在命令行下如何操作,那么你在操作 GUI 软件时应该也不会遇到什么困难,但是,翻译 2016-10-10 15:12:48 · 1223 阅读 · 0 评论 -
1.5 起步 - 初次运行 Git 前的配置
初次运行 Git 前的配置既然已经在系统上安装了 Git,你会想要做几件事来定制你的 Git 环境。 每台计算机上只需要配置一次,程序升级时会保留配置信息。 你可以在任何时候再次通过运行命令来修改它们。Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:/etc/gitconfig 文件: 包含翻译 2016-10-10 15:14:33 · 493 阅读 · 0 评论 -
1.6 起步 - 获取帮助
获取帮助若你使用 Git 时需要获取帮助,有三种方法可以找到 Git 命令的使用手册:$ git help verb>$ git verb> --help$ man git-verb>例如,要想获得 config 命令的手册,执行$ git help config这些命令很棒,因为你随时随地可以使用而无需联网。 如果你觉得手册或者本书的内容还不够用,你可以尝试在翻译 2016-10-10 15:15:50 · 379 阅读 · 0 评论 -
2.1 Git 基础 - 获取 Git 仓库
假如你只能阅读一章来学习 Git,本章就是你的不二选择。 本章内容涵盖你在使用 Git 完成各种工作中将要使用的各种基本命令。 在学习完本章之后,你应该能够配置并初始化一个仓库(repository)、开始或停止跟踪(track)文件、暂存(stage)或提交(commit)更改。 本章也将向你演示如何配置 Git 来忽略指定的文件和文件模式、如何迅速而简单地撤销错误操作、如何浏览你的项目的历史版翻译 2016-10-10 15:18:13 · 438 阅读 · 0 评论 -
2.2 Git 基础 - 记录每次更新到仓库
记录每次更新到仓库现在我们手上有了一个真实项目的 Git 仓库,并从这个仓库中取出了所有文件的工作拷贝。 接下来,对这些文件做些修改,在完成了一个阶段的目标之后,提交本次更新到仓库。请记住,你工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪。 已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改,已修改或已放入暂翻译 2016-10-10 15:19:40 · 726 阅读 · 0 评论 -
2.3 Git 基础 - 查看提交历史
查看提交历史在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史. 完成这个任务最简单而又有效的工具是 git log 命令。接下来的例子会用我专门用于演示的 simplegit 项目, 运行下面的命令获取该项目源代码:git clone https://github.com/schacon/simplegit-progit然后在此项目中运行 git lo翻译 2016-10-10 15:22:05 · 1699 阅读 · 0 评论 -
2.4 Git 基础 - 撤消操作
撤消操作在任何一个阶段,你都有可能想要撤消某些操作。 这里,我们将会学习几个撤消你所做修改的基本工具。 注意,有些撤消操作是不可逆的。 这是在使用 Git 的过程中,会因为操作失误而导致之前的工作丢失的少有的几个地方之一。有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选项的提交命令尝试重新提交:$ git commit翻译 2016-10-10 15:23:17 · 455 阅读 · 0 评论 -
2.5 Git 基础 - 远程仓库的使用
远程仓库的使用为了能在任意 Git 项目上协作,你需要知道如何管理自己的远程仓库。 远程仓库是指托管在因特网或其他网络中的你的项目的版本库。 你可以有好几个远程仓库,通常有些仓库对你只读,有些则可以读写。 与他人协作涉及管理远程仓库以及根据需要推送或拉取数据。 管理远程仓库包括了解如何添加远程仓库、移除无效的远程仓库、管理不同的远程分支并定义它们是否被跟踪等等。 在本节中,我们将介绍一部分翻译 2016-10-10 15:25:25 · 574 阅读 · 0 评论 -
2.6 Git 基础 - 打标签
打标签像其他版本控制系统(VCS)一样,Git 可以给历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点(v1.0 等等)。 在本节中,你将会学习如何列出已有的标签、如何创建新标签、以及不同类型的标签分别是什么。列出标签在 Git 中列出已有的标签是非常简单直观的。 只需要输入 git tag:$ git tagv0.1v1.3翻译 2016-10-10 15:26:49 · 419 阅读 · 0 评论 -
2.7 Git 基础 - Git 别名
Git 别名在我们结束本章 Git 基础之前,正好有一个小技巧可以使你的 Git 体验更简单、容易、熟悉:别名。 我们不会在之后的章节中引用到或假定你使用过它们,但是你大概应该知道如何使用它们。Git 并不会在你输入部分命令时自动推断出你想要的命令。 如果不想每次都输入完整的 Git 命令,可以通过 git config 文件来轻松地为每一个命令设置一个别名。 这里有一些例子你可以翻译 2016-10-10 15:28:22 · 492 阅读 · 0 评论 -
3.1 Git 分支 - 分支简介
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。 在很多版本控制系统中,这是一个略微低效的过程——常常需要完全创建一个源代码目录的副本。对于大项目来说,这样的过程会耗费很多时间。有人把 Git 的分支模型称为它的“必杀技特性”,也正因为这一特性,使得 Git 从众多版本控制系统中脱颖而出。 为何 Git 的分支模型如此出众翻译 2016-10-10 15:31:21 · 635 阅读 · 0 评论 -
3.2 Git 分支 - 分支的新建与合并
分支的新建与合并让我们来看一个简单的分支新建与分支合并的例子,实际工作中你可能会用到类似的工作流。 你将经历如下步骤:开发某个网站。为实现某个新的需求,创建一个分支。在这个分支上开展工作。正在此时,你突然接到一个电话说有个很严重的问题需要紧急修补。 你将按照如下方式来处理:切换到你的线上分支(production bran翻译 2016-10-10 15:32:07 · 703 阅读 · 0 评论 -
3.3 Git 分支 - 分支管理
分支管理现在已经创建、合并、删除了一些分支,让我们看看一些常用的分支管理工具。git branch 命令不只是可以创建与删除分支。 如果不加任何参数运行它,会得到当前所有分支的一个列表:$ git branch iss53* master testing注意 master 分支前的 * 字符:它代表现在检出的那一个分支(也就是说,当前 HEAD 指针所指向的分翻译 2016-10-10 15:48:04 · 410 阅读 · 0 评论 -
3.4 Git 分支 - 分支开发工作流
分支开发工作流现在你已经学会新建和合并分支,那么你可以或者应该用它来做些什么呢? 在本节,我们会介绍一些常见的利用分支进行开发的工作流程。而正是由于分支管理的便捷,才衍生出这些典型的工作模式,你可以根据项目实际情况选择一种用用看。长期分支因为 Git 使用简单的三方合并,所以就算在一段较长的时间内,反复把一个分支合并入另一个分支,也不是什么难事。 也就是说,在整个项目开发周期的不同翻译 2016-10-10 15:48:50 · 529 阅读 · 0 评论 -
3.5 Git 分支 - 远程分支
远程分支远程引用是对远程仓库的引用(指针),包括分支、标签等等。 你可以通过 git ls-remote (remote)来显式地获得远程引用的完整列表,或者通过 git remote show (remote) 获得远程分支的更多信息。 然而,一个更常见的做法是利用远程跟踪分支。远程跟踪分支是远程分支状态的引用。 它们是你不能移动的本地引用,当你做任何网络通信操作时,它们翻译 2016-10-10 15:50:11 · 630 阅读 · 0 评论 -
3.6 Git 分支 - 变基
变基在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase。 在本节中我们将学习什么是“变基”,怎样使用“变基”,并将展示该操作的惊艳之处,以及指出在何种情况下你应避免使用它。变基的基本操作请回顾之前在 分支的合并 中的一个例子,你会看到开发任务分叉到两个不同分支,又各自提交了更新。Figure 3-27. 分叉的提交历史之前介绍过,整合翻译 2016-10-10 15:51:07 · 1723 阅读 · 0 评论 -
4.1 服务器上的 Git - 协议
到目前为止,你应该已经有办法使用 Git 来完成日常工作。 然而,为了使用 Git 协作功能,你还需要有远程的 Git 仓库。 尽管在技术上你可以从个人仓库进行推送(push)和拉取(pull)来修改内容,但不鼓励使用这种方法,因为一不留心就很容易弄混其他人的进度。 此外,你希望你的合作者们即使在你的电脑未联机时亦能存取仓库 — 拥有一个更可靠的公用仓库十分有用。 因此,与他人合作的最佳方法即是建翻译 2016-10-10 15:54:13 · 770 阅读 · 0 评论 -
4.2 服务器上的 Git - 在服务器上搭建 Git
在服务器上搭建 Git现在我们将讨论如何在你自己的服务器上搭建 Git 服务来运行这些协议。NOTE这里我们将要演示在 Linux 服务器上进行一次基本且简化的安装所需的命令与步骤,当然在 Mac 或 Windows 服务器上同样可以运行这些服务。 事实上,在你的计算机基础架构中建立一个生产环境服务器,将不可避免的使用到不同的安全措施与操作系统工具。但是,希望你能从本节翻译 2016-10-10 15:56:55 · 406 阅读 · 0 评论 -
4.3 服务器上的 Git - 生成 SSH 公钥
生成 SSH 公钥如前所述,许多 Git 服务器都使用 SSH 公钥进行认证。 为了向 Git 服务器提供 SSH 公钥,如果某系统用户尚未拥有密钥,必须事先为其生成一份。 这个过程在所有操作系统上都是相似的。 首先,你需要确认自己是否已经拥有密钥。 默认情况下,用户的 SSH 密钥存储在其 ~/.ssh 目录下。 进入该目录并列出其中内容,你便可以快速确认自己是否已拥有密钥:$翻译 2016-10-10 15:57:29 · 461 阅读 · 0 评论 -
4.4 服务器上的 Git - 配置服务器
配置服务器我们来看看如何配置服务器端的 SSH 访问。 本例中,我们将使用 authorized_keys 方法来对用户进行认证。 同时我们假设你使用的操作系统是标准的 Linux 发行版,比如 Ubuntu。 首先,创建一个操作系统用户 git,并为其建立一个 .ssh 目录。$ sudo adduser git$ su git$ cd$ mkdir .ssh && chm翻译 2016-10-10 15:58:13 · 509 阅读 · 0 评论 -
4.5 服务器上的 Git - Git 守护进程
Git 守护进程接下来我们将通过 “Git” 协议建立一个基于守护进程的仓库。 对于快速且无需授权的 Git 数据访问,这是一个理想之选。 请注意,因为其不包含授权服务,任何通过该协议管理的内容将在其网络上公开。如果运行在防火墙之外的服务器上,它应该只对那些公开的只读项目服务。 如果运行在防火墙之内的服务器上,它可用于支撑大量参与人员或自动系统(用于持续集成或编译的主机)只读访问的翻译 2016-10-10 16:11:06 · 1089 阅读 · 0 评论 -
4.6 服务器上的 Git - Smart HTTP
Smart HTTP我们一般通过 SSH 进行授权访问,通过 git:// 进行无授权访问,但是还有一种协议可以同时实现以上两种方式的访问。 设置 Smart HTTP 一般只需要在服务器上启用一个 Git 自带的名为 git-http-backend的 CGI 脚本。 该 CGI 脚本将会读取由 git fetch 或 git push 命令向 HTTP URL 发送的请求路径和翻译 2016-10-10 16:15:49 · 525 阅读 · 0 评论 -
4.7 服务器上的 Git - GitWeb
GitWeb如果你对项目有读写权限或只读权限,你可能需要建立起一个基于网页的简易查看器。 Git 提供了一个叫做 GitWeb 的 CGI 脚本来做这项工作。Figure 4-1. GitWeb 的网页用户界面如果你想要查看 GitWeb 如何展示你的项目,并且在服务器上安装了轻量级网络服务器比如 lighttpd 或webrick, Git 提供了一个命令来让你启翻译 2016-10-10 16:17:50 · 641 阅读 · 0 评论 -
4.8 服务器上的 Git - GitLab
GitLab虽然 GitWeb 相当简单。 但如果你正在寻找一个更现代,功能更全的 Git 服务器,这里有几个开源的解决方案可供你选择安装。 因为 GitLab 是其中最出名的一个,我们将它作为示例并讨论它的安装和使用。 这比 GitWeb 要复杂的多并且需要更多的维护,但它的确是一个功能更全的选择。安装GitLab 是一个数据库支持的 web 应用,所以相比于其他 git 服翻译 2016-10-10 16:20:19 · 728 阅读 · 0 评论 -
4.9 服务器上的 Git - 第三方托管的选择
第三方托管的选择如果不想设立自己的 Git 服务器,你可以选择将你的 Git 项目托管到一个外部专业的托管网站。 这带来了一些好处:一个托管网站可以用来快速建立并开始项目,且无需进行服务器维护和监控工作。 即使你在内部设立并且运行了自己的服务器,你仍然可以把你的开源代码托管在公共托管网站 - 这通常更有助于开源社区来发现和帮助你。现在,有非常多的托管供你选择,每个选择都有不同的优缺翻译 2016-10-10 16:24:01 · 496 阅读 · 0 评论 -
5.1 分布式 Git - 分布式工作流程
5.1 分布式 Git - 分布式工作流程你现在拥有了一个远程 Git 版本库,能为所有开发者共享代码提供服务,在一个本地工作流程下,你也已经熟悉了基本 Git 命令。你现在可以学习如何利用 Git 提供的一些分布式工作流程了。这一章中,你将会学习如何作为贡献者或整合者,在一个分布式协作的环境中使用 Git。 你会学习为一个项目成功地贡献代码,并接触一些最佳实践方式,让你和项目翻译 2016-10-10 16:24:52 · 607 阅读 · 0 评论 -
5.2 分布式 Git - 向一个项目贡献
向一个项目贡献描述如何向一个项目贡献的主要困难在于完成贡献有很多不同的方式。 因为 Git 非常灵活,人们可以通过不同的方式来一起工作,所以描述应该如何贡献并不是非常准确 - 每一个项目都有一点儿不同。 影响因素包括活跃贡献者的数量、选择的工作流程、提交权限与可能包含的外部贡献方法。第一个影响因素是活跃贡献者的数量 - 积极地向这个项目贡献代码的用户数量以及他们的贡献频率。 在许多翻译 2016-10-10 16:25:57 · 647 阅读 · 0 评论 -
5.3 分布式 Git - 维护项目
维护项目除了如何有效地参与一个项目的贡献之外,你可能也需要了解如何维护项目。 这包含接受并应用别人使用format-patch 生成并通过电子邮件发送过来的补丁,或对项目添加的远程版本库分支中的更改进行整合。 但无论是管理版本库,还是帮忙验证、审核收到的补丁,都需要同其他贡献者约定某种长期可持续的工作方式。在特性分支中工作如果你想向项目中整合一些新东西,最好将这些尝试局限在特性翻译 2016-10-10 16:26:57 · 709 阅读 · 0 评论 -
6.1 GitHub - 账户的创建和配置
GitHub 是最大的 Git 版本库托管商,是成千上万的开发者和项目能够合作进行的中心。 大部分 Git 版本库都托管在 GitHub,很多开源项目使用 GitHub 实现 Git 托管、问题追踪、代码审查以及其它事情。 所以,尽管这不是 Git 开源项目的直接部分,但如果想要专业地使用 Git,你将不可避免地与 GitHub 打交道,所以这依然是一个绝好的学习机会。本章将讨论如何高效地翻译 2016-10-10 16:41:05 · 674 阅读 · 0 评论 -
6.2 GitHub - 对项目做出贡献
对项目做出贡献账户已经建立好了,现在我们来了解一些能帮助你对现有的项目做出贡献的知识。派生(Fork)项目如果你想要参与某个项目,但是并没有推送权限,这时可以对这个项目进行“派生”。 派生的意思是指,GitHub 将在你的空间中创建一个完全属于你的项目副本,且你对其具有推送权限。NOTE在以前,“fork”是一个贬义词,指的是某个人使开源项目向不同的方向发展,或翻译 2016-10-10 16:42:12 · 740 阅读 · 0 评论 -
6.3 GitHub - 维护项目
维护项目现在我们可以很方便地向一个项目贡献内容,来看一下另一个方面的内容:创建、维护和管理你自己的项目。创建新的版本库让我们创建一个版本库来分享我们的项目。 通过点击面板右侧的“New repository”按钮,或者顶部工具条你用户名旁边的 + 按钮来开始我们的旅程。 参见 Figure 6-30。Figure 6-29. 这是 “Your repositories”翻译 2016-10-10 16:43:14 · 1308 阅读 · 0 评论 -
6.4 GitHub - 管理组织
管理组织除了个人帐户之外,GitHub 还提供被称为组织(Organizations)的帐户。 组织账户和个人账户一样都有一个用于存放所拥有项目的命名空间,但是许多其他的东西都是不同的。 组织帐户代表了一组共同拥有多个项目的人,同时也提供一些工具用于对成员进行分组管理。 通常,这种账户被用于开源群组(例如:“perl”或者“rails”),或者公司(例如:“google”或者“twitte翻译 2016-10-10 16:44:04 · 2357 阅读 · 0 评论 -
6.5 GitHub - 脚本 GitHub
脚本 GitHub所以现在我们已经介绍了 GitHub 的大部分功能与工作流程,但是任意一个小组或项目都会去自定义,因为他们想要创造或扩展想要整合的服务。对我们来说很幸运的是,GitHub 在许多方面都真的很方便 Hack。 在本节中我们将会介绍如何使用 GitHub 钩子系统与 API 接口,使 GitHub 按照我们的设想来工作。钩子GitHub 仓库管理中的钩子与服务翻译 2016-10-10 16:44:50 · 1038 阅读 · 0 评论 -
7.1 Git 工具 - 选择修订版本
现在,你已经学习了管理或者维护 Git 仓库、实现代码控制所需的大多数日常命令和工作流程。 你已经尝试了跟踪和提交文件的基本操作,并且发挥了暂存区和轻量级的分支及合并的威力。接下来你将学习一些 Git 的强大功能,这些功能你可能并不会在日常操作中使用,但在某些时候你可能会需要。选择修订版本Git 允许你通过几种方法来指明特定的或者一定范围内的提交。 了解它们并不是必需的翻译 2016-10-10 16:47:21 · 775 阅读 · 0 评论 -
7.2 Git 工具 - 交互式暂存
交互式暂存Git 自带的一些脚本可以使在命令行下工作更容易。 本节的几个互交命令可以帮助你将文件的特定部分组合成提交。 当你修改一组文件后,希望这些改动能放到若干提交而不是混杂在一起成为一个提交时,这几个工具会非常有用。 通过这种方式,可以确保提交是逻辑上独立的变更集,同时也会使其他开发者在与你工作时很容易地审核。 如果运行 git add 时使用 -i 或者 --interactiv翻译 2016-10-10 16:48:14 · 514 阅读 · 0 评论 -
7.3 Git 工具 - 储藏与清理
储藏与清理有时,当你在项目的一部分上已经工作一段时间后,所有东西都进入了混乱的状态,而这时你想要切换到另一个分支做一点别的事情。 问题是,你不想仅仅因为过会儿回到这一点而为做了一半的工作创建一次提交。 针对这个问题的答案是 git stash 命令。储藏会处理工作目录的脏的状态 - 即,修改的跟踪文件与暂存改动 - 然后将未完成的修改保存到一个栈上,而你可以在任何时候重新应用这翻译 2016-10-10 16:48:57 · 689 阅读 · 0 评论