# 项目分享与更新
在 Git 中没有多少访问网络的命令,几乎所以的命令都是在操作本地的数据库。 当你想要分享你的工作,或者从其他地方拉取变更时,这有几个处理远程仓库的命令。
## git fetch
`git fetch` 命令与一个远程的仓库交互,并且将远程仓库中有但是在当前仓库的没有的所有信息拉取下来然后存储在你本地数据库中。
我们开始在 [从远程仓库中抓取与拉取](http://git-scm.com/book/zh/v2/1-git-basics/_fetching_and_pulling) 一节中介绍了此命令,然后我们在 [远程分支](http://git-scm.com/book/zh/v2/1-git-branching/_remote_branches) 中看到了几个使用示例。
我们在 [向一个项目贡献](http://git-scm.com/book/zh/v2/1-distributed-git/_contributing_project) 一节中有几个示例中也都有使用此命令。
在 [合并请求引用](http://git-scm.com/book/zh/v2/1-github/_pr_refs) 我们用它来抓取一个在默认空间之外指定的引用,在 [打包](http://git-scm.com/book/zh/v2/1-git-tools/_bundling) 中,我们了解了怎么从一个包中获取内容。
在 [引用规格](http://git-scm.com/book/zh/v2/1-git-internals/_refspec) 章节中我们设置了高度自定义的 `refspec` 以便 `git fetch` 可以做一些跟默认不同的事情。
## git pull
`git pull` 命令基本上就是 `git fetch` 和 `git merge` 命令的组合体,Git 从你指定的远程仓库中抓取内容,然后马上尝试将其合并进你所在的分支中。
我们在 [从远程仓库中抓取与拉取](http://git-scm.com/book/zh/v2/1-git-basics/_fetching_and_pulling) 一节中快速介绍了此命令,然后在 [查看远程仓库](http://git-scm.com/book/zh/v2/1-git-basics/_inspecting_remote) 一节中了解了如果你运行此命令的话,什么将会合并。
我们也在 [用变基解决变基](http://git-scm.com/book/zh/v2/1-git-branching/_rebase_rebase) 一节中了解了如何使用此命令来来处理变基的难题。
在 [检出冲突](http://git-scm.com/book/zh/v2/1-git-tools/_checking_out_conflicts) 一节中我们展示了使用此命令如何通过一个 URL 来一次性的拉取变更。
最后,我们在 [签署提交](http://git-scm.com/book/zh/v2/1-git-tools/_signing_commits) 一节中我们快速的介绍了你可以使用 `--verify-signatures` 选项来验证你正在拉取下来的经过 GPG 签名的提交。
## git push
`git push` 命令用来与另一个仓库通信,计算你本地数据库与远程仓库的差异,然后将差异推送到另一个仓库中。 它需要有另一个仓库的写权限,因此这通常是需要验证的。
我们开始在 [推送到远程仓库](http://git-scm.com/book/zh/v2/1-git-basics/_pushing_remotes) 一节中介绍了 `git push` 命令。 在这一节中主要介绍了推送一个分支到远程仓库的基本用法。 在 [推送](http://git-scm.com/book/zh/v2/1-git-branching/_pushing_branches) 一节中,我们深入了解了如何推送指定分支,在 [跟踪分支](http://git-scm.com/book/zh/v2/1-git-branching/_tracking_branches) 一节中我们了解了如何设置一个默认的推送的跟踪分支。 在 [删除远程分支](http://git-scm.com/book/zh/v2/1-git-branching/_delete_branches) 一节中我们使用 `--delete` 标志和 `git push` 命令来在删除一个在服务器上的分支。
在 [向一个项目贡献](http://git-scm.com/book/zh/v2/1-distributed-git/_contributing_project) 一整节中,我们看到了几个使用 `git push` 在多个远程仓库分享分支中的工作的示例。
在 [共享标签](http://git-scm.com/book/zh/v2/1-git-basics/_sharing_tags) 一节中,我们知道了如何使用此命令加 `--tags` 选项来分享你打的标签。
在 [发布子模块改动](http://git-scm.com/book/zh/v2/1-git-tools/_publishing_submodules) 一节中,我们使用 `--recurse-submodules` 选项来检查是否我们所有的子模块的工作都已经在推送子项目之前已经推送出去了,当使用子模块时这真的很有帮助。
在 [其它客户端钩子](http://git-scm.com/book/zh/v2/1-customizing-git/_other_client_hooks) 中我们简单的提到了 `pre-push` 挂钩(hook),它是一个可以用来设置成在一个推送完成之前运行的脚本,以检查推送是否被允许。
最后,在 [引用规格推送](http://git-scm.com/book/zh/v2/1-git-internals/_pushing_refspecs) 一节中,我们知道了使用完整的 refspec 来推送,而不是通常使用的简写形式。 这对我们精确的指定要分享出去的工作很有帮助。
## git remote
`git remote` 命令是一个是你远程仓库记录的管理工具。 它允许你将一个长的 URL 保存成一个简写的句柄,例如 `origin` ,这样你就可以不用每次都输入他们了。 你可以有多个这样的句柄,`git remote` 可以用来添加,修改,及删除它们。
此命令在 [远程仓库的使用](http://git-scm.com/book/zh/v2/1-git-basics/_remote_repos) 一节中做了详细的介绍,包括列举、添加、移除、重命名功能。
几乎在此书的后续章节中都有使用此命令,但是一般是以 `git remote add <name> <url>` 这样的标准格式。
## git archive
`git archive` 命令用来创建项目一个指定快照的归档文件。
我们在 [准备一次发布](http://git-scm.com/book/zh/v2/1-distributed-git/_preparing_release) 一节中,使用 `git archive` 命令来创建一个项目的归档文件用于分享。
## git submodule
`git submodule` 命令用来管理一个仓库的其他外部仓库。 它可以被用在库或者其他类型的共享资源上。 `submodule` 命令有几个子命令, 如(`add`、`update`、`sync` 等等)用来管理这些资源。
只在 [子模块](http://git-scm.com/book/zh/v2/1-git-tools/_git_submodules) 章节中提到和详细介绍了此命令。
- 前言
- Scott Chacon 序
- Ben Straub 序
- 献辞
- 贡献者
- 引言
- 1. 起步
- 1.1 关于版本控制
- 1.2 Git 简史
- 1.3 Git 基础
- 1.4 命令行
- 1.5 安装 Git
- 1.6 初次运行 Git 前的配置
- 1.7 获取帮助
- 1.8 总结
- 2. Git 基础
- 2.1 获取 Git 仓库
- 2.2 记录每次更新到仓库
- 2.3 查看提交历史
- 2.4 撤消操作
- 2.5 远程仓库的使用
- 2.6 打标签
- 2.7 Git 别名
- 2.8 总结
- 3. Git 分支
- 3.1 分支简介
- 3.2 分支的新建与合并
- 3.3 分支管理
- 3.4 分支开发工作流
- 3.5 远程分支
- 3.6 变基
- 3.7 总结
- 4. 服务器上的 Git
- 4.1 协议
- 4.2 在服务器上搭建 Git
- 4.3 生成 SSH 公钥
- 4.4 配置服务器
- 4.5 Git 守护进程
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 第三方托管的选择
- 4.10 总结
- 5. 分布式 Git
- 5.1 分布式工作流程
- 5.2 向一个项目贡献
- 5.3 维护项目
- 5.4 总结
- 6. GitHub
- 6.1 账户的创建和配置
- 6.2 对项目做出贡献
- 6.3 维护项目
- 6.4 管理组织
- 6.5 脚本 GitHub
- 6.6 总结
- 7. Git 工具
- 7.1 选择修订版本
- 7.2 交互式暂存
- 7.3 储藏与清理
- 7.4 签署工作
- 7.5 搜索
- 7.6 重写历史
- 7.7 重置揭密
- 7.8 高级合并
- 7.9 Rerere
- 7.10 使用 Git 调试
- 7.11 子模块
- 7.12 打包
- 7.13 替换
- 7.14 凭证存储
- 7.15 总结
- 8. 自定义 Git
- 8.1 配置 Git
- 8.2 Git 属性
- 8.3 Git 钩子
- 8.4 使用强制策略的一个例子
- 8.5 总结
- 9. Git 与其他系统
- 9.1 作为客户端的 Git
- 9.2 迁移到 Git
- 9.3 总结
- 10. Git 内部原理
- 10.1 底层命令和高层命令
- 10.2 Git 对象
- 10.3 Git 引用
- 10.4 包文件
- 10.5 引用规格
- 10.6 传输协议
- 10.7 维护与数据恢复
- 10.8 环境变量
- 10.9 总结
- A. 其它环境中的 Git
- A1.1 图形界面
- A1.2 Visual Studio 中的 Git
- A1.3 Eclipse 中的 Git
- A1.4 Bash 中的 Git
- A1.5 Zsh 中的 Git
- A1.6 Powershell 中的 Git
- A1.7 总结
- B. 将 Git 嵌入你的应用
- A2.1 命令行 Git 方式
- A2.2 Libgit2
- A2.3 JGit
- C. Git 命令
- A3.1 设置与配置
- A3.2 获取与创建项目
- A3.3 快照基础
- A3.4 分支与合并
- A3.5 项目分享与更新
- A3.6 检查与比较
- A3.7 调试
- A3.8 补丁
- A3.9 邮件
- A3.10 外部系统
- A3.11 管理
- A3.12 底层命令