了解什么是源代码管理,并简要了解 Git - 世界上最常用的版本控制系统。

什么是版本控制

版本控制系统 (VCS) 是跟踪文件集合更改的程序或程序集。 VCS 的一个目标是轻松撤回至单个文件或整个项目的较早版本。 另一个目标是支持多个团队成员同时处理同一个项目(甚至是相同的文件),而不会影响各自的工作。

VCS 的另一个名称是软件配置管理 (SCM) 系统。 这两个术语通常可以互换使用,实际上,Git 的官方文档位于git-scm.com。

从技术上讲,版本控制只是 SCM 中涉及的一种做法。 VCS 可用于除软件之外的项目(包括书籍和在线教程)。

你可以使用 VCS 执行以下操作:

  • 查看对项目所做的所有更改、更改时间和更改者。
  • 为每条更改添加一条消息,解释更改原因。
  • 检索整个项目或单个文件的以前版本。
  • 创建“分支”,可在其中进行试验性的更改。 通过此功能,可同时(由不同的人)处理多个不同的更改集(例如,功能或 bug 修复),而不会影响主分支。 稍后,可以将所需更改合并到主分支。
  • 将标记附加到版本 - 例如,用于标记新版本。

Git 是一种快速、通用、高度可缩放的免费开源 VCS。 它的主要作者是 Linux 的创建者 Linus Torvalds。

分布式版本控制

较早的 VCS 实例(包括 CVS,Subversion (SVN) 和 Perforce)使用集中式服务器来存储项目的历史记录。 这种集中意味着一台服务器也可能是单一故障点。

Git 是分布式的,这意味着项目的完整历史记录同时存储在客户端和服务器上。 可以在没有网络连接的情况下编辑文件、在本地签入文件,并在连接可用时与服务器同步。 如果服务器出现故障,你仍拥有该项目的本地副本。 从技术上讲,你甚至不必拥有服务器。 更改可以通过电子邮件传递或使用可移动媒体共享,但实际上没有人这样使用 Git。

Git术语

要了解 Git,必须了解相关术语。 以下是 Git 用户常用的术语的简短列表。

  • 工作树:包含正在处理的项目的嵌套目录和文件集。

  • 存储库 (repo):位于工作树的顶级的目录,Git 在其中保留了项目所有的历史记录和元数据。 存储库 (Repository) 一般称为 repo。 “空存储库”不属于工作树;它用于共享或备份。 空存储库通常是名称以 .git 结尾的目录,例如 project.git。

  • 哈希:哈希函数生成的数字,它将文件或其他对象的内容表示为固定长度的数字。 Git 使用 160 位长度的哈希。 使用哈希的一个好处是,Git 可以通过对文件内容进行哈希处理并将结果与先前的哈希进行比较,从而判断文件是否已更改。 如果文件的时间日期戳已更改,但文件哈希未更改,则 Git 知道文件内容未更改。

  • 对象:一个 Git 存储库包含四种类型的“对象”,每种对象均由 SHA-1 哈希进行唯一标识。 blob 对象包含普通文件。 “树”对象表示目录;它包含名称、哈希和权限。 “提交”对象表示工作树的特定版本。 “标记”是附加到提交的名称。

  • 提交:用作动词时,“提交”的意思是生成提交对象。 此操作的名称来自对数据库的提交。 它的意思是你正在提交所做的更改,让其他人最终也可以看到它们。

  • 分支:分支是一系列已命名的关联提交。 分支上的最新提交称为“头”。 初始化存储库时创建的默认分支称为 main,在 Git 中通常名为 master。 当前分支的头称为“HEAD”。 分支是 Git 的一项非常有用的功能,因为通过它,开发人员可在分支中独立(或协同)工作,然后将其更改合并到默认分支中。

  • 远程库:远程库是对另一个 Git 存储库的已命名引用。 创建存储库时,Git 会创建一个名为“origin”的远程库,这是用于推送和拉取操作的默认远程库。

  • 命令、子命令和选项:Git 操作通过 git push 和 git pull 等命令执行。 git 是命令,push 或 pull 是子命令。 子命令指定需要 Git 执行的操作。 命令通常带有选项,这些选项使用连字符 (-) 或双连字符 (--)。 例如 git reset --hard

Git命令行

有一系列可用于 Git 的不同 GUI,包括 GitHub Desktop。

仅通过 GUI 查看 Git 的开发人员有时会遇到无法解决的错误消息,因此他们必须使用命令行才能解决问题。

Git和GitHub

Git 是一种分布式版本控制系统 (DVCS),多名开发人员和其他参与者可通过它共同处理同一项目。 它提供了一种方法来处理一个或多个本地分支,然后将它们推送到远程存储库。

GitHub 是将 Git 用作其核心技术的云平台。 GitHub 简化了协作处理项目的过程,提供了网站、更多命令行工具,以及可使开发人员和用户一起工作的总体流程。 GitHub 充当先前提到的“远程存储库”。

GitHub 提供的主要功能包括:

  • 问题
  • 讨论
  • 拉取请求
  • 通知
  • 标签
  • 操作
  • 前叉
  • 项目

试用Git

在创建第一个存储库之前,必须确保已安装并配置 Git。

配置Git

在 Cloud Shell 中,要再次确认已安装 Git,请键入 git --version

git --version

应当会看到与以下示例类似的输出:

git version 2.37.3.windows.1

要配置 Git,必须定义一些全局变量:user.name 和 user.email。 这两者都是进行提交所必需的。

在 Cloud Shell 中,用以下命令设置你的名称。 将 <USER_NAME> 替换为要使用的用户名。

git config --global user.name "<USER_NAME>"

使用此命令创建 user.email 配置变量,并将 <USER_EMAIL> 替换为使用电子邮件地址:

git config --global user.email "<USER_EMAIL>"

运行以下命令以检查更改是否成功:

git config --list

确认输出包含类似以下示例的两行。 你的用户名和电子邮件地址将与示例中显示的内容不同。

user.name=User Name
user.email=user-name@contoso.com

设置Git存储库

Git 的工作方式是:检查特定文件夹内文件的更改。 我们会创建一个文件夹作为“工作树”(项目目录),并将其告知 Git,以便可以开始跟踪更改。 我们将 Git 存储库初始化到该文件夹中来告知 Git 开始跟踪更改。

首先为项目创建一个空文件夹,然后在该文件夹内初始化 Git 存储库。

创建名为“Cats”的文件夹。 此文件夹将为项目目录(也称为“工作树”)。 项目目录是存储所有与项目有关的文件的位置。

mkdir Cats

使用 cd 命令切换到项目目录:

cd Cats

现在,初始化新存储库,并将默认分支的名称设置为 main

如果运行的是 Git 版本 2.28.0 或更高版本,请使用以下命令:

git init --initial-branch=main
git init -b main

对于 Git 的较早版本,请使用以下命令:

git init
git checkout -b main

运行初始化命令后,应当会看到与以下示例类似的输出:

Initialized empty Git repository in /home/<user>/Cats/.git/Switched to a new branch 'main'

现在使用 git status 命令以显示工作树的状态:

git status

Git 用此输出进行响应,这表示 master 为当前分支。 (它也是唯一分支。)到目前为止,一切顺利。

On branch masterNo commits yetnothing to commit (create/copy files and use "git add" to track)

使用 ls 命令以显示工作树的内容:

ls -a

确认目录包含一个名为“.git”的子目录。 (将 -a 选项与 ls 结合使用非常重要,因为 Linux 通常会隐藏以句点开头的文件和目录名称。)此文件夹为 Git 存储库 - Git 用于存储工作树的元数据和历史记录的目录。

在工作树的状态发生更改时,Git 会更新元数据,以跟踪文件中的更改。

从Git获取帮助

与大多数命令行工具一样,Git 具有内置的帮助功能,可用于查找命令和关键字。

键入以下命令,获取 Git 相关的操作帮助

git --help

此命令显示以下输出:

usage: git [--version] [--help] [-C <path>] [-c name=value][--exec-path[=<path>]] [--html-path] [--man-path] [--info-path][-p | --paginate | --no-pager] [--no-replace-objects] [--bare][--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]<command> [<args>]These are common Git commands used in various situations:start a working area (see also: git help tutorial)clone      Clone a repository into a new directoryinit       Create an empty Git repository or reinitialize an existing onework on the current change (see also: git help everyday)add        Add file contents to the indexmv         Move or rename a file, a directory, or a symlinkreset      Reset current HEAD to the specified staterm         Remove files from the working tree and from the indexexamine the history and state (see also: git help revisions)bisect     Use binary search to find the commit that introduced a buggrep       Print lines matching a patternlog        Show commit logsshow       Show various types of objectsstatus     Show the working tree statusgrow, mark and tweak your common historybranch     List, create, or delete branchescheckout   Switch branches or restore working tree filescommit     Record changes to the repositorydiff       Show changes between commits, commit and working tree, etcmerge      Join two or more development histories togetherrebase     Forward-port local commits to the updated upstream headtag        Create, list, delete or verify a tag object signed with GPGcollaborate (see also: git help workflows)fetch      Download objects and refs from another repositorypull       Fetch from and integrate with another repository or a local branchpush       Update remote refs along with associated objects'git help -a' and 'git help -g' list available subcommands and some
concept guides. See 'git help <command>' or 'git help <concept>'
to read about a specific subcommand or concept.

基本Git命令

Git 的工作方式是记住对文件所做的更改,就像它对文件系统拍摄快照一样。

git status

首先是最常用的 Git 命令 git status

git status 显示工作树的状态。 利用它可查看 Git 当前正在跟踪哪些更改,以便决定是否指示 Git 再拍摄一个快照。

git add

git add 命令用于指示 Git 开始跟踪某些文件中的更改。

此操作的技术术语是“暂存”这些更改。 将使用 git add 来暂存更改以准备提交。 已添加但尚未提交的文件中的所有更改都存储在“暂存区域”中。

git commit

暂存要提交的某些更改后,可以通过调用 git commit 命令将工作保存到快照。

“提交”是动词也是名词。 在“提交到计划”或“将更改提交到数据库”中,“提交”的含义本质上是相同的。 作为动词,提交更改意味着将文件、目录或其他内容的副本作为新版本放置到存储库中。 作为名词,提交是一小部分数据,它为所提交的更改提供了唯一标识。 保存在提交中的数据包括作者姓名和电子邮件地址、日期、有关所执行操作(以及原因)的注释、可选数字签名和先前提交的唯一标识符。

git log

使用 git log 命令,可查看先前提交的相关信息。 每个提交都附加有一条消息(提交消息),git log 命令输出有关最新提交的信息,如其时间戳、作者和提交消息。 此命令有助于跟踪你执行的操作和已保存的更改。

git help

利用此命令,可以轻松获取到目前为止已了解的所有命令的相关信息和其他命令信息。

可以通过键入 git <command> --help 找到这些帮助页。 例如,git commit --help 会调出一个页面,其中包含有关 git commit 命令及其使用方法的详细信息。

2022年3月19日:有关版本控制与 Git 结合使用的简介--Git介绍相关推荐

  1. 周计划周记录:2022年6月13日-2022年6月19日

    1. 一周醒言 游戏规则就是这样的:人际关系就是等价交易,没人愿意与一个毫无价值的人交朋友. 过去如何,不影响我现在/未来成为谁,只要自己坚定前行! 自己想要的,就去问,动手要!不要寄希望于别人! 受 ...

  2. 2022年9月19日学习内容

    面向对象程序开发 JavaScript中的对象 属性:属性是指对象包含的值,使用"对象名.属性名"的方式进行操作 如:document.myfrom.first.value 方法: ...

  3. 始祖双碳新闻 | 2022年7月19日碳中和行业早知道

    始祖碳中和研究中心推出系列始祖双碳新闻--与第一缕阳光一起了解行业发展实施动态,你所关心的都在这.   1 政策权威发布 江西省人民政府近日发布关于<江西省碳达峰实施方案> <江西省 ...

  4. 2022年9月19日--9月25日(ue4热更新视频教程为主,本周10小时。合计1592小时,剩余8408小时)

    目前进行到mysql(7.1),tf1(2.3),oss(12.1),蓝图反射(1.7),ue4 pak(10.3), 从上周看,很不理想,原以为上班时间能学习下,结果会议室人来人往,不能指望这个了, ...

  5. 2022年3月14日-2022年3月19日(按照方案A,本周10小时,合计1219小时,剩8781小时。)

    根据规划,全面进行. 想学ue4了,慢慢看,这周按照方案A进行. 上周ue4视频教程mysql(1.1),tf1(2.1),oss(4.2),simpleThread(1.2),editor1(2.1 ...

  6. 2022年1月19日

    题目描述 输入一串二叉树,输出其前序遍历. 输入格式 第一行为二叉树的节点数 nn.(1 \leq n \leq 261≤n≤26) 后面 nn 行,每一个字母为节点,后两个字母分别为其左右儿子. 空 ...

  7. 【历史上的今天】7 月 19 日:IMAP 协议之父出生;Project Kotlin 公开亮相;CT 成像实现新突破

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 7 月 19 日,在 2010 年的今天,亚马逊发布了一份新闻稿,提到它现在销售的 Kindle 书 ...

  8. 【历史上的今天】2 月 19 日:Hacker News 上线;Adob​​e Photoshop 诞生;DVD 退出历史舞台

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 2 月 19 日,在技​​术史上的这一天,1987 年 2 月 19 日,互联网域名 apple.c ...

  9. 【历史上的今天】6 月 19 日:iPhone 3GS 上市;帕斯卡诞生;《反恐精英》开始测试

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 6 月 19 日,在 1997 年的今天,由国防科技大学计算机研究所研制的"银河-III& ...

最新文章

  1. 解决push的时候有时候会卡一下的问题
  2. hadoop实战--搭建开发环境及编写Hello World
  3. python需要学数据结构吗_Python新手学习基础之数据结构-对数据结构的认知
  4. 反卷积在神经网络可视化上的成功应用
  5. UESTC 电子科大专题训练 DP-N
  6. php中颜色的索引值,计算PHP中两种颜色之间的平均颜色,使用索引号作为参考值...
  7. $.each()、$.map()区别浅谈
  8. 二叉排序树的删除操作
  9. Oracle使用sys用户exp备份数据
  10. linux ps命令使用详解
  11. 建立SAP Router后,开放SAP访问的步骤
  12. Selenium之Action Chains类
  13. Visio—如何导出文件为图片?
  14. super()的作用
  15. 如果unity双击无法打开怎么办
  16. 网络分析工具-Mtr
  17. Springboot定时任务、Quartz表达式
  18. Word中标题段前设置了值却不显示的解决办法
  19. ABC162 D RGB Triplets
  20. 2010Excel分列操作的一些问题进行分享

热门文章

  1. 新人工智能技术,以光速识别物体
  2. 华为mate30epro和华为mate30pro有什么区别 华为mate30epro和华为mate30pro参数对比
  3. 2021年化工自动化控制仪表考试试卷及化工自动化控制仪表复审考试
  4. Http头信息(二)——请求头信息(一)
  5. BUUCTF 密码题 old-fashion 小心猪圈
  6. python数据分析,用python对excel表格操作
  7. 2019 wps是否可以替代office
  8. 2023美国大学生数学建模竞赛选题建议
  9. DevOps成就卓越
  10. python控制手机拨号_Appium+Python-模拟手机按键操作