你的第一个仓库


通常有两种方式会让你来到这里。一种是你已经有一个项目文件夹,比如你一直在本地构建的 weather-app,现在想让 Git 开始记录它的历史。另一种是别人已经建立了项目,它存在于 GitHub 上,你想在你的机器上获得一份工作副本。两种情况都从三个简单命令开始,到本章结束时,你将真正使用过所有三个命令。不过首先,有一个只需十秒的检查:确认你的机器上是否安装了 Git。
你安装了 Git 吗?
本手册中的一切都在终端中进行,所以第一步是打开一个。**终端**是一个应用程序,你可以在其中输入文本命令,程序用文本回复。它已经在你的计算机上了:
- macOS: 应用程序叫做终端。按 Cmd+Space,输入"terminal",然后按 Enter。
- Windows: 现在打开 PowerShell(在开始菜单中搜索"powershell")。下面安装的 Git 还会添加 Git Bash,一个为此专门构建的终端,两者都可以运行相同的 Git 命令。
- Linux: 查找名为 Terminal 或 Console 的应用程序;在许多发行版上,Ctrl+Alt+T 可以打开它。
Git 本身是一个命令行程序:它没有自己的窗口,你通过输入以 git 开头的命令来使用它,并阅读它打印的内容。这也是阅读本手册中每个代码块的方式:以 $ 开头的行是你要输入的命令(不包括 $ 本身),下面的行是 Git 的回复。
所以,进行检查。在你的终端中输入以下内容并按 Enter:
$ git --version
git version 2.45.1返回的版本号意味着 Git 已安装,你已准备好。 你的版本号可能与这个不同,这是可以的。如果你看到"command not found"或"git is not recognized",Git 还没有安装在你的机器上,安装它是一次性的工作:
- macOS: 运行
git --version通常会打开一个对话框,提供安装 Apple 的命令行工具。接受它,macOS 将为你安装 Git。 - Windows: 从 git-scm.com/downloads 下载 Git for Windows 并运行安装程序。默认设置都是合理的选择,它会在安装过程中添加 Git Bash。
- Linux: 使用你发行版的包管理器安装
git包,例如在 Ubuntu 和 Debian 上使用sudo apt install git。
安装完成后,关闭你的终端,打开一个新的,然后再次运行 git --version。返回的版本号意味着你已完成一次性设置;本手册的其余部分不需要任何安装。
git --version 告诉你它是否在你的机器上:版本号意味着你已准备好,"command not found"意味着从 git-scm.com 或你系统的安装程序安装它。你只需要执行这部分一次。设置是任何手册中最无趣的部分,所以做得很好! 将文件夹转变为仓库
打开一个终端,使用 cd("change directory"的缩写)进入你的项目文件夹,然后运行一个命令 git init:
$ cd weather-app
$ git init
Initialized empty Git repository in /Users/mara/projects/weather-app/.git/该文件夹现在是一个**仓库**:Git 监视的项目,准备在你工作时记录它的快照。git init 每次都做同样的事情。它查找一个隐藏的 .git 文件夹,如果它缺失,就创建一个,从那时起该文件夹就在 Git 的监视下。
新仓库的默认分支被命名为 main。 如果你遇到较旧的教程、较旧的仓库或几年前录制的课程,你会看到 master 被用于完全相同的事情:它是同一第一个分支的较旧名称。本手册总是使用 main。
什么是分支?
分支是你的提交所在的单独的历史线,main 是每个新仓库都从它开始的。分支涵盖创建和在它们之间切换。
git init 将任何文件夹转变为 Git 仓库,准备好让 Git 开始跟踪它。在项目文件夹中运行一次,你就完成了,以后再运行也不会造成伤害。新仓库默认分支叫做 main,虽然你在野外找到的较旧仓库通常叫 master 以表示相同的东西。 告诉 Git 你是谁
在你的第一次提交之前,Git 想知道是谁在进行提交。设置两个值一次,Git 会在你在这台机器上进行的每次提交中记住它们:
$ git config --global user.name "陈玲"
$ git config --global user.email "[email protected]"你创建的每一次提交都会用那个名称和电子邮件打上时间戳。跳过这一步,Git 会退回到从你的计算机用户名和主机名猜测的东西,所以你的提交会带有你从未选择过的身份。
在你的第一次提交之前设置你的名称和电子邮件。 先提交,然后再设置,这个错误会烤进该提交的历史中。更糟的是,一些主机(包括 GitHub)通过电子邮件将提交匹配到你的账户,所以在错误的地址或猜测的地址下进行的提交会显示为匿名陌生人的工作,而不是你的。
git config --global user.name 和 git config --global user.email 设置 Git 在你进行的每次提交上打上时间戳的名称和电子邮件。在你的第一次提交之前设置它们,因为在你设置电子邮件之前进行的提交会被归属于猜测的身份,像 GitHub 这样的主机可能根本不会将其与你的账户相连。执行一次,你机器上的每个仓库都会记住它。 使用 git clone 复制现有项目
有时项目已经存在于其他地方,你想在你的机器上获得一份工作副本。git clone 用一个命令就可以做到:
$ git clone https://github.com/octocat/Hello-World.git
Cloning into 'Hello-World'...
remote: Enumerating objects: 13, done.
remote: Total 13 (delta 0), reused 0 (delta 0), pack-reused 13
Receiving objects: 100% (13/13), done.Git 创建一个名为 Hello-World 的新文件夹,将项目的完整历史下载到其中,并将其文件放在文件夹中,以便你可以立即开始阅读或编辑。不需要单独的 git init 步骤。克隆作为下载的一部分为你设置仓库。
git clone <url> 下载某人的仓库,包括完整的历史,放入以项目命名的新文件夹。当项目已经存在于某个地方时使用它;当你从头开始时使用 git init。克隆完成后,你有一份完整的工作副本,准备好查看或添加。 隐藏的 .git 文件夹内有什么
每个仓库,无论你是通过 git init 还是 git clone 到达的,在其根目录都有一个名为 .git 的隐藏文件夹。它默认是隐藏的,所以向终端询问完整的列表,使用 ls -a(ls 列出文件夹的内容,-a 包括隐藏条目)以看到它与你的普通项目文件并排:
$ ls -a
. .. .git README.md src该文件夹是真正的仓库。它保存你进行的每一次提交、你的分支和来自上面部分的配置设置。删除 .git 文件夹,项目就会丧失其整个历史,变回 Git 不再跟踪的普通文件夹。项目中的一切其他东西都是 .git 保存的工作副本。
.git 文件夹,该文件夹是真正的仓库:你的整个历史和它的设置都存在于那里。在项目中运行 ls -a 可以看到它,因为它默认是隐藏的。除非你真的想抹除项目的整个历史,否则永远不要删除它,因为删除它会将文件夹变回 Git 不再跟踪的普通文件夹。 如果术语仓库和提交仍然感到模糊,什么是 Git 涵盖这些命令构建的心智模型,词汇表对本章中的每一个词汇都有简短的定义。一旦你的身份被设置,你有一个要使用的仓库,提交循环涵盖你从现在开始会不断使用的编辑、暂存和提交的日常循环。

