章节 ▾ 第二版

A3.5 附录 C:Git 命令 - 分享和更新项目

共享和更新项目

Git 中很少有命令会访问网络,几乎所有的命令都作用于本地数据库。当你准备好分享你的工作或从其他地方拉取更改时,有几个命令是用来处理远程仓库的。

git fetch

git fetch 命令会与远程仓库通信,并下载你当前仓库中没有的该远程仓库中的所有信息,并将其存储在你的本地数据库中。

我们首先在 从远程仓库获取和拉取 中介绍这个命令,并在 远程分支 中继续看它的使用示例。

我们也在 贡献项目 的几个示例中使用它。

我们在 拉取请求引用 中使用它来获取默认空间之外的单个特定引用,并在 打包 中了解如何从包中获取。

我们在 引用规范 中设置了高度自定义的引用规范,以便让 git fetch 执行与默认值略有不同的操作。

git pull

git pull 命令基本上是 git fetchgit merge 命令的组合,Git 会从你指定的远程仓库获取,然后立即尝试将其合并到你当前的分支中。

我们在 从远程仓库获取和拉取 中快速介绍它,并展示如何在 检查远程仓库 中查看它将合并的内容。

我们还将在 Rebase When You Rebase 中了解如何使用它来帮助解决 Rebase 的困难。

我们将在 检出远程分支 中展示如何使用 URL 以一次性的方式拉取更改。

最后,我们在 提交签名 中简要提到,你可以使用 --verify-signatures 选项来验证你拉取的提交是否经过 GPG 签名。

git push

git push 命令用于与另一个仓库通信,计算出你的本地数据库中有而远程仓库中没有的内容,然后将差异推送到另一个仓库。它需要对另一个仓库的写访问权限,所以通常会经过某种身份验证。

我们首先在 推送到远程仓库 中介绍 git push 命令。在这里,我们涵盖了将分支推送到远程仓库的基础知识。在 推送 中,我们更深入地了解了推送特定分支,在 跟踪分支 中,我们了解了如何设置跟踪分支以自动推送。在 删除远程分支 中,我们使用 --delete 标志通过 git push 在服务器上删除分支。

在整个 贡献项目 中,我们看到了几个使用 git push 通过多个远程仓库分享分支上工作的示例。

我们在 分享标签 中使用 --tags 选项来分享你创建的标签。

发布子模块更改 中,我们使用 --recurse-submodules 选项来检查我们所有的子模块工作都已发布,然后再推送主项目,这在使用子模块时可能非常有用。

其他客户端钩子 中,我们简要讨论了 pre-push 钩子,这是一个我们可以在推送完成之前运行的脚本,以验证推送是否应该被允许。

最后,在 推送引用规范 中,我们研究了使用完整的引用规范进行推送,而不是通常使用的通用快捷方式。这可以帮助你非常具体地指定你想分享的工作。

git remote

git remote 命令是用于管理远程仓库记录的管理工具。它允许你将长 URL 保存为简短的句柄,例如“origin”,这样你就不用每次都输入它们了。你可以有几个这样的句柄,git remote 命令用于添加、更改和删除它们。

这个命令在 使用远程仓库 中有详细介绍,包括列出、添加、删除和重命名它们。

它在本书几乎随后的每个章节中都会用到,但总是以标准的 git remote add <name> <url> 格式。

git archive

git archive 命令用于创建一个项目特定快照的归档文件。

我们在 准备发布 中使用 git archive 为项目创建一个 tarball 以供分享。

git submodule

git submodule 命令用于管理普通仓库中的外部仓库。这可以是库或其他类型的共享资源。submodule 命令有几个子命令(addupdatesync 等)用于管理这些资源。

这个命令仅在 子模块 中提及并完全涵盖。