# 項目分享與更新
在 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 底層命令