赞
踩
做软件开发的小伙伴肯定少不了跟Git打交道,本专栏主要介绍什么是Git、Git的优势以及如何来使用Git,部分介绍参考于《progit》一书,有需要的小伙伴欢迎关注点赞收藏!
版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。其主要功能包括追踪文件的变更,记录何时、何人更改了文件的什么内容,并在每次文件改变时增加版本号。此外,版本控制还具备并行开发的能力,使得团队成员可以共享和协同开发代码,提高沟通效率,避免代码冲突和错误。
通过版本控制系统,团队成员可以方便地查看其他成员的修改,增强了代码管理和追踪能力,使得在出现bug或错误时能够迅速定位并修复,从而提高代码的稳定性和可维护性。同时,版本控制系统还可以保证代码的安全性,通过权限管理机制确保代码只能被授权的人员访问和修改,并防止代码丢失。
许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。 这么做唯一的好处就是简单,但是特别容易犯错。 有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。
常见的本地版本控制系统工具有RCS(Revision Control System),RCS 的工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。
如何让在不同系统上的开发者协同工作? 于是,集中化的版本控制系统应运而生,集中化的版本控制系统是一种将代码库集中存储在一个中央服务器上的版本控制方法。在这种系统中,所有的文件版本和变更历史都保存在服务器上,团队成员通过客户端连接到服务器,进行代码的获取、修改和提交等操作。
这类系统,诸如 CVS、Subversion 以及Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
这种做法带来了许多好处,特别是相较于老式的本地 VCS 来说。 现在,每个人都可以在一定程度上看到项目中的其他人正在做些什么。 而管理员也可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。
然而,集中化的版本控制系统也存在一些缺点。中央服务器成为了系统的单点故障,如果服务器发生故障或网络问题导致无法连接,所有的团队成员将无法提交、拉取或共享新的代码版本,工作可能停滞。此外,对于大型项目或分布式团队来说,网络依赖和性能问题也可能成为挑战。
于是分布式版本控制系统(Distributed Version Control System,简称 DVCS)面世了。它允许每个开发者在本地计算机上拥有完整的代码库,包括项目的所有历史记录和文件。与集中化的版本控制系统不同,分布式版本控制系统并不依赖于中央服务器来存储版本历史。相反,每个开发者的本地仓库都包含完整的版本历史,使得开发者可以随时随地访问和更新代码库。
分布式版本控制系统的主要优点包括灵活性、速度和安全性。由于每个开发者都有自己的本地仓库,因此可以非常灵活地进行工作流的定制和协作。同时,大多数操作都在本地进行,无需频繁地与中央服务器交互,从而大大提高了开发效率。此外,由于数据是本地化的,不会受到中央服务器的审查和控制,因此可以更好地保护用户的数据安全。
在分布式版本控制系统中,更改可以轻松地合并到其他开发者的系统中,这有助于实现高效的团队协作。此外,分支和合并操作也变得更为简单和直接,使得开发者可以更加灵活地管理和追踪不同的代码版本。
总的来说,分布式版本控制系统为开发者提供了一种更加灵活、高效和安全的版本控制方法,使得团队协作和代码管理变得更加简单和直接。
Git的发展过程可以追溯到Linux内核开源项目的早期阶段。那时,项目组开始使用一个叫做BitKeeper的专有分布式版本控制系统来管理和维护代码。然而,到了2005年,BitKeeper的商业公司收回了Linux内核社区免费使用BitKeeper的权力,这促使了Linux内核的缔造者Linus Torvalds决定亲自开发一个新的版本控制系统。
Linus Torvalds从头开始,没有借鉴其他的系统,在开发过程中遇到了许多挑战和困难,但他坚持不懈地努力,最终于2005年发布了Git的第一个正式版本。Git的设计理念和先进的功能使得它迅速获得了广泛的关注和使用,成为了许多开发者的首选版本控制系统。
自2005年以来,Git经历了不断的改进和扩展。在2006年,Git成为了开源项目并迅速获得广泛关注和支持。2010年,Git的推出成为Linux内核的主要版本控制系统,这标志着Git已经成为了一个可靠且广泛使用的工具。
至今,Git已经成为了全球数百万开发者的首选版本控制系统,涵盖了各种规模的组织和项目。Git的设计目标是速度很快、设计简单、对非线性开发模式的强力支持、完全分布式,以及有能力高效管理类似Linux内核一样的超大规模项目。
总的来说,Git的发展是一个不断演进和改进的过程,它已经成为了现代软件开发中不可或缺的一部分,为开发者提供了强大的版本追踪与协作工具。
那么,Git 究竟是怎样的一个系统呢? Git是一个开源的分布式版本控制系统,主要功能包括版本控制、分支管理、协同合作、提交与撤销、远程仓库交互,以及可扩展性。通过Git,用户可以记录文件的每一次修改,并允许在不同版本之间进行切换、比较和恢复。同时,Git支持创建多个分支,使开发者可以在不同的分支上并行工作,并通过合并分支来解决冲突。Git还允许多个开发者在同一个项目上协同工作,通过远程仓库的方式共享代码,并支持团队成员之间的代码审查和合并请求。
Git 和其它版本控制系统的主要差别在于 Git 对待数据的方式:
从概念上来说,其它大部分系统以文件变更列表的方式存储信息,这类系统(CVS、Subversion、Perforce 等)将它们存储的信息看作是一组基本文件和每个文件随时间逐步累积的差异 。
Git 不按照以上方式对待或保存数据。反之,Git 更像是把数据看作是对小型文件系统的一系列快照。 在 Git中,每当你提交更新或保存项目状态时,它基本上就会对当时的全部文件创建一个快照并保存这个快照的索引。为了效率,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个 快照流。
这是 Git 与几乎所有其它版本控制系统的重要区别。 因此 Git 重新考虑了以前每一代版本控制系统延续下来的诸多方面。 Git 更像是一个小型的文件系统,提供了许多以此为基础构建的超强工具,而不只是一个简单的 VCS。
在 Git 中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息。
举个例子,要浏览项目的历史,Git 不需外连到服务器去获取历史,然后再显示出来——它只需直接从本地数据库中读取。 你能立即看到项目历史。如果你想查看当前版本与一个月前的版本之间引入的修改, Git 会查找到一个月前的文件做一次本地的差异计算,而不是由远程服务器处理或从远程服务器拉回旧版本文件再来本地处理。
Git 中所有的数据在存储前都计算校验和,然后以校验和来引用。 这意味着不可能在 Git 不知情时更改任何文件内容或目录内容。 这个功能建构在 Git 底层,是构成 Git 哲学不可或缺的部分。 若你在传送过程中丢失信息或损坏文件,Git 就能发现。
Git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。这是一个由 40 个十六进制字符(0-9 和 a-f)组成的字符串,基于 Git 中文件的内容或目录结构计算出来的:
24b9da6552252987aa493b52f8696cd6d3b00373
Git 中使用这种哈希值的情况很多,你将经常看到这种哈希值。 实际上,Git 数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。
执行的 Git 操作,几乎只往 Git 数据库中 添加 数据。 很难使用 Git 从数据库中删除数据,也就是说 Git 几乎不会执行任何可能导致文件不可恢复的操作。 同别的 VCS 一样,未提交更新时有可能丢失或弄乱修改的内容。
但是一旦提交快照到 Git 中, 就难以再丢失数据,特别是如果定期的推送数据库到其它仓库的话
Git 有三种状态:
1. 已提交(committed):表示数据已经安全地保存在本地数据库中;
2. 已修改(modified):表示修改了文件,但还没保存到数据库中;
3. 已暂存(staged):表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
这会让 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录
如果 Git 目录中保存着特定版本的文件,就属于 “已提交” 状态。 如果文件已修改并放入暂存区,就属于 “已暂存” 状态。 如果自上次检出后,作了修改但还没有放到暂存区域,就是 “已修改” 状态。
下载地址为:Git 官网
如果想在 Linux 上用二进制安装程序来安装基本的 Git 工具,可以使用发行版包含的基础软件包管理工具来安装,以 Fedora 为例,可以使用 dnf:
$ sudo dnf install git-all
在 Mac 上安装 Git 有多种方式。 最简单的方法是安装 Xcode Command Line Tools。 Mavericks (10.9) 或更高版本的系统中,在 Terminal 里尝试首次运行 ‘git’ 命令即可。
$ git --version
在 Windows 上安装 Git 也有几种安装方法,
安装成功后,可以在开始菜单看到如下的画面:
Git Bash 是基于 CMD 的,在 CMD 的基础上增添一些新的命令与功能,是最常用的:
Git CMD 和 cmd 几乎完全一样,但功能少得可怜:
Git FAQs 是 Git Frequently Asked Questions(常问问题):
Git GUI 是 Git 的图形化界面:
建议:还是用命令行学习 Git
Git Release Note 是 Git 的版本说明:
Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:
git config
时带上--system
选项,那么它就会读写该文件中的配置变量。 (由于它是系统配置文件,因此你需要管理员或超级用户权限来修改它。);--global
选项让 Git读写此文件,这会对你系统上 所有 的仓库生效。--local
选项让 Git 强制读写此文件,虽然默认情况下用的就是它。每一个级别会覆盖上一级别的配置,所以 .git/config
的配置变量会覆盖 /etc/gitconfig
中的配置变量。
$ git config --list --show-origin
安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。 这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改:
$ git config --global user.name "xxx"
$ git config --global user.email xxxxx@xx.com
设置完用户信息,可以配置默认文本编辑器了,当 Git 需要你输入信息时会调用它。 如果未配置,Git 会使用操作系统默认的文本编辑器
如果你想Emacs,可以这样做:
$ git config --global core.editor emacs
如果在 Windows 系统上,想要使用别的文本编辑器,那么必须指定可执行文件的完整路径。 它可能随你的编辑器的打包方式而不同。
$ git config --global core.editor "'C:/ProgramFiles/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"
git config --list
也可以输入 git config <key>
,来检查 Git 的某一项配置:
$ git config user.name
Git 提供了三种方法,可以获取Git 命令的综合手册(manpage):
$ git help <verb>
$ git <verb> --help
$ man git-<verb>
例如,要想获得 git config 命令的手册,执行:
$ git help config
此外,如果不需要全面的手册,只需要可用选项的快速参考,那么可以用 -h
选项获得更简明的输出:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。