跳至内容
GitTree

课程 4 · 基础

创建您的课程存储库,然后区分克隆和打开

从 GitTree 的新标签页屏幕创建 GitTree 功能并验证其是否尚未提交。然后创建一个单独的本地克隆,看看为什么打开文件夹、初始化历史记录和复制存储库是不同的操作。

进度已保存在此浏览器中。

播放时会加载来自 YouTube 的视频(隐私增强模式)。

英文旁白 · English and Arabic 字幕

打开视频页面在 YouTube 上观看

你将学到什么

  • 使用明确的分支名称初始化 GitTree 内的第一个课程存储库。
  • 无需发明第一次提交即可识别未诞生的分支。
  • 仅将虚构身份保存在课程存储库中。
  • 将相同的空存储库克隆到单独的文件夹中并检查其来源。
  • 重新打开原始版本,无需创建或复制另一个存储库。

开始之前

从第 2 课和第 3 课结束的地方开始:Git 可用,并且不存在课程存储库。第 2 课预览了 GitTree Demo;它没有保存全局配置。您需要为课程作业保留一个现有的、可写的父文件夹。子项 gittree-features 必须是新的或空的,位于现有源签出之外。不要在此 Web 存储库或个人项目中进行初始化。

使用满足检查的 GitTree 最小值 2.39.0 的 Git。视频中的命令和屏幕是使用 Git 2.52.0 和 GitTree 2.0 在 Ubuntu 24.04 上的私人主文件夹中录制的,本文中的检查针对录制创建的存储库运行。它们未在 macOS 或 Windows 上运行。默认快捷键在 macOS 上使用 Command,在 Windows 和 Linux 上使用 Ctrl;本机文件夹选择器在每个系统上看起来都不同,并且未拍摄。

一旦您登录到 GitTree,这些本地工作流程就不需要提供程序集成、专业版或试用版:免费计划涵盖了它们。克隆使用同一计算机上的 file:// URL,而不是托管的 GitLab 或 Claude 凭据。

概念

Init 为所选目录创建 Git 存储库元数据。它不会仅仅因为存在分支名称而创建提交。一个新的普通存储库有一个工作树目录和一个最初为空的索引。在该分支有任何提交指向之前,HEAD 可以象征性地命名 refs/heads/main:unborn branch。

Clone 从源创建不同的存储库。通常,它会复制可访问的历史记录并检查所选的源分支,同时记录名为 origin 的远程。这里源故意是空的,因此没有历史或工作内容可以复制。这是一个有效的边缘情况,而不是上传失败。

Open 选择一个现有存储库以在 GitTree 中进行检查。打开选项卡并不是克隆其文件、创建提交或添加托管服务。该应用程序可以更新其最近/工作空间状态并单独执行信任检查。

这三个动词就像创建一个新笔记本,制作一个单独的副本,然后将现有笔记本放在桌子上。不要将类比扩展到权限:存储库的设置或挂钩可以执行程序,因此 GitTree 检查它们的信任,而不是将“打开”视为无条件执行权限。

本课的动作工作树/索引本地参考远程参考/配置
用 main 初始化原始新增普通工作树;没有项目文件或索引条目符号 HEAD 命名未出生的 main;没有提交提示未配置远程
保存本地演示身份文件/索引/历史内容没有更改没有参考值变化在原始存储库配置中仅写入 user.name/user.email
将原始文件克隆到单独的文件夹中副本中新的空工作树/索引仍然没有提交副本的原点指向原件;尚不存在远程跟踪分支提示
重新打开原来的选择现有的原件;没有重复没有提交/引用创建原来的仍然没有遥控器

裸存储库是没有普通工作文件的历史存储。它在后面的服务器练习中很有用,但对于构​​建此登陆页面来说是错误的选择。可选的 .gitignore/licence 模板将创建未提交的文件;拒绝他们以保留此检查点。

有关本机语义,请参阅 git-init 和 git-clone。该应用程序的空/新目标检查比本机 Git 重新初始化现有存储库的能力更严格。在不了解应用程序保护的内容的情况下,请勿使用终端来逃避应用程序的拒绝。

在 GitTree 中 — 规范的第一次初始化

actual current-source labels 是新标签卡 Init、对话框 Initialize a repository、提交 Initialize。旧计划中的“初始化存储库”是描述性的,而不是当前的按钮文本。

  1. 选择 New Tab (tab.new)、Command+T / Ctrl+T。预计有 Open、Clone 和 Init 卡。
  2. 单击Init。预计为 Initialize a repository,提交前不保存任何更改。替代方案:Command Palette… 与 Command+Shift+P / Ctrl+Shift+P → Initialize Repository… (repo.init)。没有为 Init 声明直接的默认快捷方式。
  3. 在 Location 中,键入保留的现有父目录下的新 gittree-features 目录的完整路径。您可以使用 Browse…,然后使用本机选择器 Choose where to create the repository;本机操作系统选择按钮不是在这里发明的。浏览后重新检查最终的完整位置。
  4. 将 Initial branch 设置为 main。保留Bare repository (history only, no working files) off。
  5. 加载这些模板控件时,将 .gitignore template 和 Licence 设置为 None。他们的默认设置是不选择;如果缺少控件,请不要在其他地方默默地添加文件。保留Open after creating on。
  6. 检查“位置”、“主要”、“裸露”、“无模板”和“打开后打开”。选择 Initialize 一次。期望可能通过正常的信任工作流程创建并打开存储库。等待期间请勿重复按。
  7. 如果出现 Trust this repository?,请检查其实际路径和结果。 Cancel 保持其未打开状态; Open in Restricted Mode 限制操作; Trust and Open 允许正常的存储库设置/挂钩。对于这个自行创建的沙箱,只有在了解结果后才选择“信任”和“开放”。录音中,新文件夹没有出现信任提示;不要期望每个新存储库都会显示此对话框。
  8. 确认该选项卡是原始的 gittree-features,而不是父级或类似名称的副本。它的图表还没有提交。不要创建初始“清理”提交来删除空状态。

保存存储库本地虚构身份

  1. 在原始活动状态下,打开 Preferences (app.preferences.open)、Command+, / Ctrl+,。
  2. 在存储库特定的导航部分中,选择 gittree-features。这是动态存储库名称,而不是全局配置文件页面。在窄宽度下,其页面选择器标签为 Repo-Specific: gittree-features。
  3. 查找 Name for commits(设置 repo.userName,支持 Git 密钥 user.name)。在其 Writes to 下,选择或验证 Local (this repository)。不要选择Global (every repository)。
  4. 输入 GitTree Demo 并选择该行的 Apply。或者,按该字段中的 Enter。等待 Saved,然后再继续。
  5. 对于 Email for commits(repo.userEmail,支持 user.email),验证相同的本地目标,输入 demo@example.com,然后输入 Apply 或 Enter。等待保存。
  6. 选择Exit Preferences。预计原始存储库仍处于活动状态并且其历史记录仍为空。本地配置发生了变化,而不是工作文件或图表发生了变化。

单独打字会留下草稿。脏字段中的 Escape 首先取消该草稿;这并不是一条有保证的“放弃一切”的捷径。明确的“应用/本地”目标是此步骤与第 2 课取消的预览不同的原因。

在终端中 — 验证应用程序结果

将 <course-parent> 替换为您自己保留的绝对父路径,并在路径周围保留引号。在应用程序初始化后运行这些,而不是在网络结账中:

Command · bash
cd "<course-parent>/gittree-features"
git rev-parse --is-inside-work-tree
git rev-parse --is-bare-repository
git symbolic-ref --short HEAD

观察查询结果,按顺序:

输出
true
false
main

证明不存在提交:

Command · bash
git rev-parse --verify --quiet HEAD

观察到:no stdout or stderr; exit status 1。这是预期的未出生分支结果,而不是腐败诊断。 符号 HEAD 和修订验证 回答不同的问题。

检查文件、索引和远程名称:

Command · bash
git status --short
git ls-files
git remote

每个命令都会在装置中生成 no output and exited 0。这些查询本身并不能证明每个被忽略的文件都不存在。在文件管理器中,检查保留文件夹,其中隐藏项目可见:它应包含存储库元数据 .git,但还没有项目文件。不要编辑 .git 内的任何内容。

只读取两个显式本地身份字段:

Command · bash
git config --local --get user.name
git config --local --get user.email

观察到:

输出
GitTree Demo
demo@example.com

不需要个人/全局配置转储。

本机初始化替代方案 - 不是第二个规范启动

对于 separate disposable comparison copy 或不使用应用程序学习 Git 的人来说,本机等效项是:

Command · bash
cd "<course-parent>"
git init --quiet --initial-branch=main --template= gittree-features

它没有打印输出并在隔离夹具中退出 0。 Do not rerun it on the original already created in GitTree. 空的原生模板选项控制 Git 的模板目录;它不是应用程序的可选 .gitignore/licence 选择器。在普通计算机上,仍然必须检查继承的模板/设置。

如果通过本机路径而不是应用程序行设置身份,请首先选择新存储库并故意仅写入本地配置:

Command · bash
cd "<course-parent>/gittree-features"
git config --local user.name "GitTree Demo"
git config --local user.email demo@example.com

在隔离的验证副本中,两次写入都是静默成功操作。它们是应用程序写入的替代方案,而不是跳过验证应用程序读取的借口。

克隆一个单独的本地副本

这个小练习使用同一个项目,而不是第二个演示应用程序。 original stays the course checkpoint 必须在第 5 课之前再次激活。它不是添加到原始遥控器中的遥控器。

在GitTree

  1. 打开新选项卡,然后打开 Clone。替代调色板:Clone Repository… (repo.clone)。期待Clone a repository。
  2. 选择Clone with URL。在 Repository URL 中,输入原始的绝对本地 URL,例如 file:///absolute/course-parent/gittree-features,将该示例替换为您的实际保留路径。应用程序的 URL 解析器接受绝对文件 URL;原始本地路径不是其支持的输入。对于第一个练习,使用不带空格的简单沙箱路径; URL 编码和 Windows 驱动语法需要各自的平台重新检查。
  3. 在 Parent folder 中,选择相同的现有课程父级。在 Folder name 中,明确输入 gittree-features-copy。检查 Clones into 指向副本 not the original。
  4. 将 Depth 留空以获取完整历史记录;保持 Also clone submodules、Sparse checkout: only the top-level files at first, then the folders you choose 和 Download file contents only when they are needed (blobless) 关闭。保持 Open after cloning 开启。
  5. 选择 Clone 一次。预计此空本地源的实际克隆进度或快速完成,然后通过任何所需的信任审查打开副本。对于如此小的操作,不要坚持每个进度阶段都是可见的。
  6. 检查副本的空图表并使用下面的终端检查。它的 origin 属于 the copy,指向原始的。配置的源不是现有的远程跟踪分支或托管提供程序。
  7. 要返回,请从新选项卡中选择 Open 或 Open Repository… (repo.open)、Command+O / Ctrl+O,选择原始 gittree-features 文件夹并查看任何所需的信任提示。录制内容改为使用新选项卡上 Recent 中原始行上的 Open 按钮,以相同的方式打开它;系统选择器没有被拍摄。或者,将该原始文件夹放到新选项卡的文件夹放置表面上(未拍摄)。期望原来选择/打开;不承诺当前构建是否重用选项卡或创建另一个选项卡。
  8. 保持补充副本不变。您无需删除它即可继续。在第5课之前确认原件仍然没有远程和本地演示身份。

原生比较和结果

来自保留父级,在 separate take where the destination does not exist 中:

Command · bash
git clone --quiet "file://<absolute-source-path>" gittree-features-copy

这里,<absolute-source-path> 在 macOS 记录上以 / 开头,在 file: 后面形成一个带有三个斜杠的网址。替换占位符;不要键入尖括号。尽管成功退出 0,但观察到的确切值是 stderr:

输出
warning: You appear to have cloned an empty repository.

现在查询副本:

Command · bash
cd "<course-parent>/gittree-features-copy"
git remote
git symbolic-ref --short HEAD
git config --local --get user.name

前两个观察到的输出:

输出
origin
main

最后一个查询不打印任何内容并退出 1:克隆没有复制原始的本地 user.name 配置。外部全局设置仍然可以在您的真实机器上提供有效的身份; local 查询故意只回答此克隆包含的内容。不要读取相机上的所有全局配置。我们不在副本内提交。

结果

在本课结束时,原始存储库是一个普通存储库,具有符号未出生的 main、没有提交、没有项目文件、空逻辑索引、没有远程和本地身份 GitTree Demo / demo@example.com。可选的补充克隆有起源但没有历史;它位于持续项目检查点之外。

该图在设计上保持为空。第 5 课创建 README.md 和 index.html 并进行第一次有意提交。

常见错误

  • Choosing the parent instead of the new child: 在写入任何配置之前验证位置和活动选项卡。
  • Choosing bare mode: 裸存储库不提供登陆页面的普通工作文件。
  • Adding templates:他们引入了不属于这个空检查点的未跟踪文件。
  • 初始化后立即执行没有提交的 Treating unborn HEAD as corrupt: 符号 main 是正常的。
  • Cloning onto the original: 目标必须是单独的新/空文件夹。
  • Assuming clone copies local identity: 它复制存储库历史记录,而不是原始的本地 user.name/user.email。
  • Continuing in the copy: 其起源使其状态与规范原始状态不同。

如果出现问题

非空目标拒绝意味着 GitTree 保护现有文件夹。选择一个新的空孩子;不要删除其内容来消除错误。 “应该包含它的文件夹不存在”意味着您必须在重试之前故意创建/选择保留的父级。

如果存储库已存在,请 open it 并检查它;不要重新初始化它以使课程看起来新鲜。如果是不相关的工作,则保持不变并选择单独的课程文件夹。

如果克隆失败,请读取实际错误和清理结果。 GitTree 区分已删除的克隆拥有的文件夹、保留的预先存在的文件夹、意外的额外内容和清理失败。 Cancel Clone 请求取消;这并不能证明每个字节都消失了。在删除任何内容之前检查保留的内容。空源警告本身并不是失败。

如果信任结果不熟悉,请选择取消或限制模式。不要完全信任任意存储库来完成课程。受限模式禁用网络操作并可能限制工作树操作。

检查你的理解情况

回答每个问题,然后阅读原因。标记为“必填”的问题将有助于完成本课程。

  1. 第 1 题,共 6 题

    课程存储库已存在于磁盘上。哪个操作会显示它而不复制它?

    选择一个答案。

  2. 第 2 题,共 6 题

    哪些选择保留了预期的原始检查点?

    选择每个适用的答案。

  3. 第 3 题,共 6 题
    必填

    Symbolic-ref 打印 main; verify --quiet HEAD 在初始化后静默退出 1。这意味着什么?

    选择一个答案。

  4. 第 4 题,共 6 题
    必填

    在单独的全新初始化中,选择 trunk 而不是 main 而不提交。 symbolic-ref --short HEAD 打印什么?

    选择一个答案。

  5. 第 5 题,共 6 题

    克隆空原始文件成功,但出现空源警告。哪些说法是正确的?

    选择每个适用的答案。

  6. 第 6 题,共 6 题
    必填

    返回原始并仅检查指定的查询。哪些证据必须一致?

    选择每个适用的答案。

0 个(共 6 个)正确

正确回答所需的问题以完成课程。

在此浏览器中检查。

练习

通过 Open Repository… 或文件夹拖放重新打开原始文件。运行三个状态查询,验证缺少的 HEAD 提交、空状态/索引/远程查询和两个本地标识值。解释为什么 main 在没有提交的情况下可见,以及为什么补充副本(如果创建)有来源,但原始副本没有。

Changed-input prediction: 如果单独的新初始化使用 Initial branch = trunk,则预测 git symbolic-ref --short HEAD。它打印 trunk;它仍然没有创建任何提交。这是在另一个独立的本机夹具中检查的。不要重命名继续课程的主分支来执行预测。

您自己的确认:该网站无法看到您的计算机。

要完成本课程,请正确回答所需的问题并确认实践练习。

回顾

  • Init 创建存储库元数据;克隆创建一个单独的副本; open 选择现有数据。
  • 新的 main 可能是未诞生的:并不意味着第一次提交。
  • 将本地身份和补充克隆状态与全局设置和规范项目分开。

术语表介绍

初始化 — ཀག་ར;克隆 — 斯图安斯图;存储库 — 存储库;分支 — فря;远程 — ¡工作树 — ????????????集结区 — 集结区。 “未出生分支”是指没有第一次提交的分支名称; HEAD 和 origin 仍然是文字标识符。

视频文字记录

视频的旁白,逐条提示。

显示成绩单
  1. 创建课程存储库,然后 将克隆与打开分开。
  2. 使用外部保留的父文件夹 现有的源存储库。
  3. 初始化新的历史记录,克隆一个单独的 存储库,或打开现有的存储库。
  4. 从GitTree内部开始 在新标签页屏幕上。
  5. 选择初始化。查看对话框 在创建任何东西之前。
  6. 输入完整路径 新的 gittree-features 文件夹。
  7. 本机文件夹选择器是 替代方案;重新检查最终位置。
  8. 明确选择 main 依赖机器默认值。
  9. 保持裸模式关闭,因为这 项目需要工作文件。
  10. 拒绝两个可选模板 保留空检查点。
  11. 创建后保持打开状态启用, 然后审查每一个选择。
  12. 初始化一次,等待 实际的存储库结果。
  13. 如果出现信任审核,请阅读 授予信任之前的调查结果。
  14. 原来的存在,但是 它的第一次提交没有。
  15. HEAD 可以在前面命名 main main 有一个提交指向。
  16. 打开此存储库的首选项 页面,而不是全局配置文件页面。
  17. 之前检查写入目标 输入虚构的身份。
  18. 应用 GitTree 演示如下 存储库的提交名称。
  19. 应用虚构的电子邮件 在同一局部范围内。
  20. Enter 也可以应用字段。退出 只有在两次写入都成功之后。
  21. 检查您是否在里面 原始工作树。
  22. 裸存储库检查一定是错误的。
  23. 象征性的分支 检查应该打印 main.
  24. 尚未解决任何提交。沉默 此处预计有出口一。
  25. 这三项检查 不应产生任何输出。
  26. 只读取两个本地身份 值,而不是私有全局设置。
  27. Native Git 也可以初始化,但不可以 重新初始化应用程序创建的原始版本。
  28. 现在复制这个相同的空存储库 到一个单独的本地文件夹中。
  29. 打开克隆并使用 URL 路径 而不是提供者帐户列表。
  30. 使用绝对文件 URL 原始路径,而不是原始本地路径。
  31. 明确指定目的地 并确认不是原件。
  32. 保留完整历史默认值并 关闭高级克隆选项。
  33. 运行克隆并让 实际进度完成。
  34. 空源会生成一个没有副本的副本 承诺;那仍然可以成功。
  35. 空存储库警告 其本身并不是失败。
  36. 副本有起源和未出生的 main,而不是托管管道。
  37. 克隆并没有复制原始的 本地提交名称设置。
  38. 原产地属于复制品。的 原来没有获得遥控器。
  39. 再次打开原版 在继续课程之前。
  40. 删除现有文件夹是 另一种打开它的方式,而不是克隆它。
  41. 再检查一下原件:没有遥控器, 没有提交,以及本地演示身份。
  42. 与 trunk 单独初始化 报告主干,仍然没有提交。
  43. 目的地拒绝保护 现有内容。选择一个新文件夹。
  44. 如果克隆失败或被取消, 阅读清理实际保留的内容。
  45. 撤消和重新记录不承诺回滚 用于初始化或身份设置。
  46. Init 创建元数据,clone 创建元数据 复制,然后打开选择现有数据。
  47. 验证原件的状态 在添加第一个文件之前。
  48. 接下来,创建英雄并制作 第一次刻意的承诺。