directory search
Guides gitattributes giteveryday gitglossary gitignore gitmodules gitrevisions gittutorial gitworkflows Administration git archive git bundle git clean git filter-branch git fsck git gc git instaweb git reflog Basic Snapshotting git add git commit git diff git mv git reset git rm git status Branching and Merging git branch git checkout git log git merge git mergetool git stash git tag Debugging git bisect git blame git grep Email git am git format-patch git request-pull git send-email External Systems git fast-import git svn Getting and Creating Projects git clone git init Git git annotate git archimport git bisect-lk2009 git check-attr git check-mailmap git check-ref-format git checkout-index git cherry git citool git column git credential git credential-cache git credential-store git cvsexportcommit git cvsimport git cvsserver git diff-files git diff-tree git difftool git fast-export git fetch-pack git fmt-merge-msg git get-tar-commit-id git gui git http-backend git http-fetch git http-push git imap-send git index-pack git interpret-trailers git ls-remote git ls-tree git mailinfo git mailsplit git merge-file git merge-index git merge-one-file git merge-tree git mktag git mktree git name-rev git notes git p4 git pack-objects git pack-redundant git pack-refs git parse-remote git patch-id git prune git prune-packed git quiltimport git receive-pack git remote-ext git remote-fd git remote-testgit git repack git replace git rerere git send-pack git sh-i18n git sh-setup git shell git show-branch git show-index git stripspace git unpack-file git unpack-objects git upload-archive git upload-pack git var git verify-commit git verify-tag git whatchanged git worktree Inspection and Comparison git describe git shortlog git show Miscellaneous api credentials api index gitcli gitcore tutorial gitcredentials gitcvs migration gitdiffcore githooks gitk gitnamespaces gitremote helpers gitrepository layout gitsubmodules gittutorial 2 gitweb gitweb.conf pack format User Manual Patching git apply git cherry-pick git rebase git revert Plumbing Commands git cat-file git check-ignore git commit-tree git count-objects git diff-index git for-each-ref git hash-object git ls-files git merge-base git read-tree git rev-list git rev-parse git show-ref git symbolic-ref git update-index git update-ref git verify-pack git write-tree Server Admin git daemon git update-server-info Setup and Config git git config git help Sharing and Updating Projects git fetch git pull git push git remote git submodule
characters

名称

git-send-pack  - 将对象通过 Git 协议推送到另一个存储库

概要

git send-pack [--all] [--dry-run] [--force] [--receive-pack=<git-receive-pack>]                [--verbose] [--thin] [--atomic]                [--[no-]signed|--sign=(true|false|if-asked)]                [<host>:]<directory> [<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

而不是明确指定要更新哪些参考,更新所有本地存在的头。

--stdin

从 stdin 中获取参考列表,每行一个。如果除了此选项外,还在命令行中指定了引用,则 stdin 中的引用将在命令行中的引用之后进行处理。

如果--stateless-rpc与此选项一起指定,则参考列表必须采用数据包格式(pkt-line)。每个 ref 必须位于一个单独的数据包中,并且该列表必须以 flush 数据包结尾。

--dry-run

除了实际发送更新之外,请做其他事

--force

通常,该命令拒绝更新远程 ref,该远程 ref 不是用于覆盖它的本地 ref 的祖先。此标志禁用检查。这意味着远程仓库可能会失去提交; 小心使用它。

--verbose

详细地运行。

--thin

发送一个“精简”包,该包根据包中未包含的对象以分辨形式记录对象,以减少网络流量。

--atomic

使用原子事务来更新参考。如果任何一个 ref 没有更新,那么整个 push 将会失败而不改变任何 refs。

--no-signed   --sign=(true|false|if-asked)

GPG-信号 推送请求以更新接收端的 refs,以便通过钩子检查和/或记录。如果false或者--no-signed,不会尝试签名。如果true或者--signed,如果服务器不支持签名推送,推送将失败。如果设置为if-asked,则当且仅当服务器支持签名推送时签名。如果实际的调用gpg --sign失败,推送也会失败。有关接收端的详细信息,请参阅 git-receive-pack [1]。

--push-option=<string>

将指定的字符串作为推送选项传递给服务器端的挂钩使用。如果服务器不支持推送选项,则出错。有关详细信息,请参阅 git-push [1]和 githooks [5]。

<host>

一个远程主机来存放版本库。当这部分被指定时,通过ssh调用git-receive-pack

<directory>

要更新的存储库。

<ref>…

远程参考更新。

指定参考

有三种方法可以指定在远程端更新哪些参考。

使用--all标志,本地存在的所有参考将转移到远程方。如果您使用此标志,则不能指定任何<ref>内容。

如果没有--all和没有<ref>,本地和远端存在的头都会更新。

当明确指定一个或多个<ref>(无论是在命令行还是通过--stdin)时,它可以是单个模式,也可以是由冒号“:”分隔的一对这样的模式(这意味着 ref 名称不能包含冒号它)。一个模式<name>只是一个<name>:<name>简写。

每个模式对由源端(冒号前)和目标端(冒号后)组成。要推送的引用是通过找到匹配源端的匹配来确定的,并且推送的位置由目标端确定。用于匹配 ref 的规则与用于git rev-parse解析符号 ref 名称的规则相同。参见 git-rev-parse [1]。

  • 如果<src>不完全匹配一个本地引用,那是错误的。

  • 如果<dst>匹配多个远程引用,那是错误的。

  • 如果<dst>与任何远程参考不匹配

-  it has to start with "refs/"; <dst> is used as the destination literally in this case.
-  <src> == <dst> and the ref that matched the <src> must not exist in the set of remote refs; the ref matched <src> locally is used as the name of the destination.

如果没有--force,<src> ref仅在<dst>不存在的情况下存储在远程,或者<dst>是<src>的真子集(即祖先)。此检查称为“快进检查”,以避免意外覆盖远程参考并丢失其他人的提交。

与此同时--force,所有裁判都禁用快进检查。

可选地,一个<ref>参数可以带有加+号前缀以禁用仅在该 ref 上的快进检查。

Previous article: Next article: