Git
English ▾ 主題 ▾ 最新版本 ▾ git-send-pack 最後更新於 2.43.0

名稱

git-send-pack - 透過 Git 協定將物件推送到另一個儲存庫

概要

git send-pack [--mirror] [--dry-run] [--force]
		[--receive-pack=<git-receive-pack>]
		[--verbose] [--thin] [--atomic]
		[--[no-]signed | --signed=(true|false|if-asked)]
		[<host>:]<directory> (--all | <ref>…​)

描述

通常你會想要使用 git push,它是此命令的更高層級包裝。請參閱 git-push[1]

在可能為遠端的儲存庫上調用 git-receive-pack,並從目前的儲存庫更新它,同時傳送已命名的 refs。

選項

--receive-pack=<git-receive-pack>

遠端上的 git-receive-pack 程式的路徑。當透過 ssh 推送到遠端儲存庫,並且你的程式不在預設的 $PATH 目錄中時,有時會很有用。

--exec=<git-receive-pack>

與 --receive-pack=<git-receive-pack> 相同。

--all

不要明確指定要更新哪些 refs,更新所有本地存在的 heads。

--stdin

從 stdin 取得 refs 清單,每行一個。如果除了此選項之外,命令列上還有指定 refs,則 stdin 中的 refs 會在命令列上的 refs 之後處理。

如果 --stateless-rpc 與此選項一起指定,則 refs 清單必須採用封包格式 (pkt-line)。每個 ref 必須在單獨的封包中,並且清單必須以 flush 封包結尾。

--dry-run

執行所有操作,除了實際傳送更新。

--force

通常,此命令會拒絕更新不是用於覆蓋它的本地 ref 之祖先的遠端 ref。此旗標會停用此檢查。這表示遠端儲存庫可能會遺失 commit;請謹慎使用。

--verbose

以詳細模式執行。

--thin

傳送一個「精簡」封包,它會根據未包含在封包中的物件,以差異形式記錄物件,以減少網路流量。

--atomic

使用原子交易來更新 refs。如果任何 refs 更新失敗,則整個推送將失敗,而不會變更任何 refs。

--[no-]signed
--signed=(true|false|if-asked)

對推送請求進行 GPG 簽署,以更新接收端的 refs,使其可以由 hooks 檢查和/或記錄。如果為 false--no-signed,則不會嘗試簽署。如果為 true--signed,如果伺服器不支援簽署的推送,則推送將會失敗。如果設定為 if-asked,則僅當伺服器支援簽署的推送時才簽署。如果實際呼叫 gpg --sign 失敗,則推送也會失敗。請參閱 git-receive-pack[1] 以取得接收端的詳細資訊。

--push-option=<string>

傳遞指定的字串作為推送選項,以供伺服器端的 hooks 使用。如果伺服器不支援推送選項,則會發生錯誤。請參閱 git-push[1]githooks[5] 以取得詳細資訊。

<host>

託管儲存庫的遠端主機。當指定此部分時,將透過 ssh 調用 git-receive-pack

<directory>

要更新的儲存庫。

<ref>…​

要更新的遠端 refs。

指定 Refs

有三種方法可以指定要更新遠端上的哪些 refs。

使用 --all 旗標,所有本地存在的 refs 都會傳輸到遠端。如果使用此旗標,則不能指定任何 <ref>

在沒有 --all 和任何 <ref> 的情況下,本地端和遠端都存在的 heads 會被更新。

當明確指定一個或多個 <ref> 時(無論是在命令列上還是透過 --stdin),它可以是單一模式,也可以是由冒號 ":" 分隔的成對模式(這表示 ref 名稱中不能有冒號)。單一模式 <name> 只是 <name>:<name> 的簡寫。

每個模式對都由來源端(冒號之前)和目的地端(冒號之後)組成。要推送的 ref 是透過尋找與來源端匹配的匹配項來確定,並且它是推送到哪裡是透過使用目的地端來確定。用於匹配 ref 的規則與 git rev-parse 用於解析符號 ref 名稱的規則相同。請參閱 git-rev-parse[1]

  • 如果 <src> 沒有完全匹配本地 refs 中的一個,則會發生錯誤。

  • 如果 <dst> 匹配多個遠端 ref,則會發生錯誤。

  • 如果 <dst> 不匹配任何遠端 ref,則

    • 它必須以 "refs/" 開頭;在這種情況下,<dst> 將按字面意義用作目的地。

    • <src> == <dst>,且匹配 <src> 的 ref 不得存在於遠端 refs 集中;本地匹配 <src> 的 ref 將用作目的地的名稱。

在沒有 --force 的情況下,只有在 <dst> 不存在,或者 <dst> 是 <src> 的正確子集(即祖先)時,<src> ref 才會儲存在遠端。此檢查(稱為「快速轉發檢查」)的執行目的是為了避免意外覆寫遠端 ref 並從那裡遺失其他人的 commit。

使用 --force 時,會停用所有 refs 的快速轉發檢查。

選擇性地,可以在 <ref> 參數前面加上加號 + 符號,以僅針對該 ref 停用快速轉發檢查。

GIT

屬於 git[1] 套件的一部分

scroll-to-top