课程 4 · 基础
创建您的课程存储库,然后区分克隆和打开
从 GitTree 的新标签页屏幕创建 GitTree 功能并验证其是否尚未提交。然后创建一个单独的本地克隆,看看为什么打开文件夹、初始化历史记录和复制存储库是不同的操作。
- 级别: 初学者
- 阅读 4 分钟
- 6 分钟的视频
- 已更新
- 在这节课之前: 安装 Git 并预览安全提交身份, 预测您的下一次提交将包含什么内容
进度已保存在此浏览器中。
播放时会加载来自 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。旧计划中的“初始化存储库”是描述性的,而不是当前的按钮文本。
- 选择 New Tab (
tab.new)、Command+T / Ctrl+T。预计有 Open、Clone 和 Init 卡。 - 单击Init。预计为 Initialize a repository,提交前不保存任何更改。替代方案:Command Palette… 与 Command+Shift+P / Ctrl+Shift+P → Initialize Repository… (
repo.init)。没有为 Init 声明直接的默认快捷方式。 - 在 Location 中,键入保留的现有父目录下的新
gittree-features目录的完整路径。您可以使用 Browse…,然后使用本机选择器 Choose where to create the repository;本机操作系统选择按钮不是在这里发明的。浏览后重新检查最终的完整位置。 - 将 Initial branch 设置为
main。保留Bare repository (history only, no working files) off。 - 加载这些模板控件时,将 .gitignore template 和 Licence 设置为 None。他们的默认设置是不选择;如果缺少控件,请不要在其他地方默默地添加文件。保留Open after creating on。
- 检查“位置”、“主要”、“裸露”、“无模板”和“打开后打开”。选择 Initialize 一次。期望可能通过正常的信任工作流程创建并打开存储库。等待期间请勿重复按。
- 如果出现 Trust this repository?,请检查其实际路径和结果。 Cancel 保持其未打开状态; Open in Restricted Mode 限制操作; Trust and Open 允许正常的存储库设置/挂钩。对于这个自行创建的沙箱,只有在了解结果后才选择“信任”和“开放”。录音中,新文件夹没有出现信任提示;不要期望每个新存储库都会显示此对话框。
- 确认该选项卡是原始的
gittree-features,而不是父级或类似名称的副本。它的图表还没有提交。不要创建初始“清理”提交来删除空状态。
保存存储库本地虚构身份
- 在原始活动状态下,打开 Preferences (
app.preferences.open)、Command+, / Ctrl+,。 - 在存储库特定的导航部分中,选择 gittree-features。这是动态存储库名称,而不是全局配置文件页面。在窄宽度下,其页面选择器标签为 Repo-Specific: gittree-features。
- 查找 Name for commits(设置
repo.userName,支持 Git 密钥user.name)。在其 Writes to 下,选择或验证 Local (this repository)。不要选择Global (every repository)。 - 输入
GitTree Demo并选择该行的 Apply。或者,按该字段中的 Enter。等待 Saved,然后再继续。 - 对于 Email for commits(
repo.userEmail,支持user.email),验证相同的本地目标,输入demo@example.com,然后输入 Apply 或 Enter。等待保存。 - 选择Exit Preferences。预计原始存储库仍处于活动状态并且其历史记录仍为空。本地配置发生了变化,而不是工作文件或图表发生了变化。
单独打字会留下草稿。脏字段中的 Escape 首先取消该草稿;这并不是一条有保证的“放弃一切”的捷径。明确的“应用/本地”目标是此步骤与第 2 课取消的预览不同的原因。
在终端中 — 验证应用程序结果
将 <course-parent> 替换为您自己保留的绝对父路径,并在路径周围保留引号。在应用程序初始化后运行这些,而不是在网络结账中:
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证明不存在提交:
git rev-parse --verify --quiet HEAD观察到:no stdout or stderr; exit status 1。这是预期的未出生分支结果,而不是腐败诊断。 符号 HEAD 和修订验证 回答不同的问题。
检查文件、索引和远程名称:
git status --short
git ls-files
git remote每个命令都会在装置中生成 no output and exited 0。这些查询本身并不能证明每个被忽略的文件都不存在。在文件管理器中,检查保留文件夹,其中隐藏项目可见:它应包含存储库元数据 .git,但还没有项目文件。不要编辑 .git 内的任何内容。
只读取两个显式本地身份字段:
git config --local --get user.name
git config --local --get user.email观察到:
GitTree Demo
demo@example.com不需要个人/全局配置转储。
本机初始化替代方案 - 不是第二个规范启动
对于 separate disposable comparison copy 或不使用应用程序学习 Git 的人来说,本机等效项是:
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 选择器。在普通计算机上,仍然必须检查继承的模板/设置。
如果通过本机路径而不是应用程序行设置身份,请首先选择新存储库并故意仅写入本地配置:
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
- 打开新选项卡,然后打开 Clone。替代调色板:Clone Repository… (
repo.clone)。期待Clone a repository。 - 选择Clone with URL。在 Repository URL 中,输入原始的绝对本地 URL,例如
file:///absolute/course-parent/gittree-features,将该示例替换为您的实际保留路径。应用程序的 URL 解析器接受绝对文件 URL;原始本地路径不是其支持的输入。对于第一个练习,使用不带空格的简单沙箱路径; URL 编码和 Windows 驱动语法需要各自的平台重新检查。 - 在 Parent folder 中,选择相同的现有课程父级。在 Folder name 中,明确输入
gittree-features-copy。检查 Clones into 指向副本 not the original。 - 将 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 开启。
- 选择 Clone 一次。预计此空本地源的实际克隆进度或快速完成,然后通过任何所需的信任审查打开副本。对于如此小的操作,不要坚持每个进度阶段都是可见的。
- 检查副本的空图表并使用下面的终端检查。它的
origin属于 the copy,指向原始的。配置的源不是现有的远程跟踪分支或托管提供程序。 - 要返回,请从新选项卡中选择 Open 或 Open Repository… (
repo.open)、Command+O / Ctrl+O,选择原始gittree-features文件夹并查看任何所需的信任提示。录制内容改为使用新选项卡上 Recent 中原始行上的 Open 按钮,以相同的方式打开它;系统选择器没有被拍摄。或者,将该原始文件夹放到新选项卡的文件夹放置表面上(未拍摄)。期望原来选择/打开;不承诺当前构建是否重用选项卡或创建另一个选项卡。 - 保持补充副本不变。您无需删除它即可继续。在第5课之前确认原件仍然没有远程和本地演示身份。
原生比较和结果
来自保留父级,在 separate take where the destination does not exist 中:
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.现在查询副本:
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 请求取消;这并不能证明每个字节都消失了。在删除任何内容之前检查保留的内容。空源警告本身并不是失败。
如果信任结果不熟悉,请选择取消或限制模式。不要完全信任任意存储库来完成课程。受限模式禁用网络操作并可能限制工作树操作。
检查你的理解情况
回答每个问题,然后阅读原因。标记为“必填”的问题将有助于完成本课程。
0 个(共 6 个)正确
正确回答所需的问题以完成课程。
在此浏览器中检查。
练习
通过 Open Repository… 或文件夹拖放重新打开原始文件。运行三个状态查询,验证缺少的 HEAD 提交、空状态/索引/远程查询和两个本地标识值。解释为什么 main 在没有提交的情况下可见,以及为什么补充副本(如果创建)有来源,但原始副本没有。
Changed-input prediction: 如果单独的新初始化使用 Initial branch = trunk,则预测 git symbolic-ref --short HEAD。它打印 trunk;它仍然没有创建任何提交。这是在另一个独立的本机夹具中检查的。不要重命名继续课程的主分支来执行预测。
您自己的确认:该网站无法看到您的计算机。
要完成本课程,请正确回答所需的问题并确认实践练习。
回顾
- Init 创建存储库元数据;克隆创建一个单独的副本; open 选择现有数据。
- 新的 main 可能是未诞生的:并不意味着第一次提交。
- 将本地身份和补充克隆状态与全局设置和规范项目分开。
有关的
术语表介绍
初始化 — ཀག་ར;克隆 — 斯图安斯图;存储库 — 存储库;分支 — فря;远程 — ¡工作树 — ????????????集结区 — 集结区。 “未出生分支”是指没有第一次提交的分支名称; HEAD 和 origin 仍然是文字标识符。
视频文字记录
视频的旁白,逐条提示。
显示成绩单
- 创建课程存储库,然后 将克隆与打开分开。
- 使用外部保留的父文件夹 现有的源存储库。
- 初始化新的历史记录,克隆一个单独的 存储库,或打开现有的存储库。
- 从GitTree内部开始 在新标签页屏幕上。
- 选择初始化。查看对话框 在创建任何东西之前。
- 输入完整路径 新的 gittree-features 文件夹。
- 本机文件夹选择器是 替代方案;重新检查最终位置。
- 明确选择 main 依赖机器默认值。
- 保持裸模式关闭,因为这 项目需要工作文件。
- 拒绝两个可选模板 保留空检查点。
- 创建后保持打开状态启用, 然后审查每一个选择。
- 初始化一次,等待 实际的存储库结果。
- 如果出现信任审核,请阅读 授予信任之前的调查结果。
- 原来的存在,但是 它的第一次提交没有。
- HEAD 可以在前面命名 main main 有一个提交指向。
- 打开此存储库的首选项 页面,而不是全局配置文件页面。
- 之前检查写入目标 输入虚构的身份。
- 应用 GitTree 演示如下 存储库的提交名称。
- 应用虚构的电子邮件 在同一局部范围内。
- Enter 也可以应用字段。退出 只有在两次写入都成功之后。
- 检查您是否在里面 原始工作树。
- 裸存储库检查一定是错误的。
- 象征性的分支 检查应该打印 main.
- 尚未解决任何提交。沉默 此处预计有出口一。
- 这三项检查 不应产生任何输出。
- 只读取两个本地身份 值,而不是私有全局设置。
- Native Git 也可以初始化,但不可以 重新初始化应用程序创建的原始版本。
- 现在复制这个相同的空存储库 到一个单独的本地文件夹中。
- 打开克隆并使用 URL 路径 而不是提供者帐户列表。
- 使用绝对文件 URL 原始路径,而不是原始本地路径。
- 明确指定目的地 并确认不是原件。
- 保留完整历史默认值并 关闭高级克隆选项。
- 运行克隆并让 实际进度完成。
- 空源会生成一个没有副本的副本 承诺;那仍然可以成功。
- 空存储库警告 其本身并不是失败。
- 副本有起源和未出生的 main,而不是托管管道。
- 克隆并没有复制原始的 本地提交名称设置。
- 原产地属于复制品。的 原来没有获得遥控器。
- 再次打开原版 在继续课程之前。
- 删除现有文件夹是 另一种打开它的方式,而不是克隆它。
- 再检查一下原件:没有遥控器, 没有提交,以及本地演示身份。
- 与 trunk 单独初始化 报告主干,仍然没有提交。
- 目的地拒绝保护 现有内容。选择一个新文件夹。
- 如果克隆失败或被取消, 阅读清理实际保留的内容。
- 撤消和重新记录不承诺回滚 用于初始化或身份设置。
- Init 创建元数据,clone 创建元数据 复制,然后打开选择现有数据。
- 验证原件的状态 在添加第一个文件之前。
- 接下来,创建英雄并制作 第一次刻意的承诺。