亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

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-receive-pack  - 接收推入存儲庫的內(nèi)容

概要

git-receive-pack <directory>

描述

git send-pack使用從遠(yuǎn)程端提供的信息調(diào)用并更新存儲庫。

該命令通常不由最終用戶直接調(diào)用。該協(xié)議的用戶界面位于git send-pack側(cè)面,程序?qū)χ荚谟糜趯⒏峦扑偷竭h(yuǎn)程存儲庫。對于拉操作,請參閱git-fetch-pack。

該命令允許在遠(yuǎn)端創(chuàng)建和快速轉(zhuǎn)發(fā)sha1 refs(heads/tags)(嚴(yán)格來說,這是本地最終git-receive-pack運(yùn)行,但對于坐在發(fā)送包端的用戶,它正在更新遙遠(yuǎn)的。)

在Documentation/howto目錄中還有其他一些使用update和post-update鉤子的真實(shí)例子。

git-receive-pack 尊重receive.denyNonFastForwards配置選項(xiàng),該選項(xiàng)告訴它是否應(yīng)該拒絕對ref的更新,如果它們不是快進(jìn)的。

其他一些receive.* config選項(xiàng)可用于調(diào)整其行為,請參閱git-config。

選項(xiàng)

<directory>

要同步到的存儲庫。

預(yù)接收hook

在任何ref被更新之前,如果$ GIT_DIR/hooks/pre-receive文件存在并且是可執(zhí)行文件,它將被調(diào)用一次而沒有參數(shù)。鉤子的標(biāo)準(zhǔn)輸入將被更新為每個參考線一行:

sha1-old SP sha1-new SP refname LF

refname的值是相對于$ GIT_DIR; 例如,對于主人的頭,這是“裁判/頭/主人”。每個refname前的兩個sha1值是更新之前和之后的refname的對象名稱。要創(chuàng)建的引用將具有等于0 {40}的sha1,而要刪除的引用將具有等于0 {40}的sha1-new,否則sha1-old和sha1-new應(yīng)該是存儲庫中的有效對象。

當(dāng)接受一個簽名推送(參見git-push [1])時,簽名推送證書存儲在一個blob中,并且GIT_PUSH_CERT可以查詢其對象名稱的環(huán)境變量。有關(guān)post-receive示例,請參閱hook的說明。另外,使用GPG驗(yàn)證證書,并使用以下環(huán)境變量導(dǎo)出結(jié)果:

GIT_PUSH_CERT_SIGNER

簽名推送證書的密鑰所有者的名稱和電子郵件地址。

GIT_PUSH_CERT_KEY

簽署推送證書的密鑰的GPG密鑰ID。

GIT_PUSH_CERT_STATUS

GPG驗(yàn)證推送證書的狀態(tài),使用與命令系列%G?格式相同的助記符git log(請參閱git-log)。

GIT_PUSH_CERT_NONCE

進(jìn)程要求簽名者將其包含在推送證書中的隨機(jī)數(shù)字符串。如果這與推送證書中的“隨機(jī)數(shù)”頭中記錄的值不匹配,則可能表明證書是從單獨(dú)的“git推送”會話重播的有效證書。

GIT_PUSH_CERT_NONCE_STATUS

UNSOLICITED

當(dāng)我們沒有要求它發(fā)送一個時,“git push --signed”發(fā)送了一個隨機(jī)數(shù)。

MISSING

“git push --signed”沒有發(fā)送任何隨機(jī)頭。

BAD

“git push -signed”發(fā)送了一個偽造的隨機(jī)數(shù)。

OK

“git push --signed”發(fā)送了我們要求它發(fā)送的隨機(jī)數(shù)。

SLOP

“git push --signed”發(fā)送了一個與我們現(xiàn)在要求它發(fā)送的不同,但是在之前的會話中。查看GIT_PUSH_CERT_NONCE_SLOP環(huán)境變量。

GIT_PUSH_CERT_NONCE_SLOP

“git push --signed”發(fā)送了一個與我們要求它現(xiàn)在發(fā)送的不同的隨機(jī)數(shù),但是在一個不同的會話中,其起始時間與當(dāng)前會話相差很多秒。只有在GIT_PUSH_CERT_NONCE_STATUS說時才有意義SLOP。receive.certNonceSlop在git-config中閱讀有關(guān)變量。

在更新任何refname之前和執(zhí)行任何快進(jìn)檢查之前調(diào)用此鉤子。

如果預(yù)接收hook以非零退出狀態(tài)退出,則不會執(zhí)行更新,更新,接收后和更新后鉤子也不會被調(diào)用。如果更新不被支持,這可以快速救助。

請參閱下面的隔離環(huán)境注意事項(xiàng)。

更新hook

在更新每個ref之前,如果$ GIT_DIR/hooks/update文件存在并且是可執(zhí)行文件,則每個ref都會調(diào)用一次,其中包含三個參數(shù):

$GIT_DIR/hooks/update refname sha1-old sha1-new

refname參數(shù)是相對于$ GIT_DIR; 例如,對于主人的頭,這是“refs/heads/master”。這兩個sha1參數(shù)是更新之前和之后refname的對象名稱。請注意,鉤子在更新refname之前被調(diào)用,所以sha1-old是0 {40}(意味著還沒有這樣的ref),或者它應(yīng)該匹配在refname中記錄的內(nèi)容。

如果要禁止更新指定的參考值,則hook應(yīng)該以非零狀態(tài)退出。否則它應(yīng)該以零退出。

hook的成功執(zhí)行(零退出狀態(tài))并不能確保引用實(shí)際上會被更新,它只是一個先決條件。因此,從這個hook發(fā)送通知(例如電子郵件)并不是一個好主意??紤]使用post-receive hook來代替。

接收后hook

在所有ref被更新(或試圖更新)之后,如果任何ref更新成功,并且$ GIT_DIR/hooks/post-receive文件存在并且是可執(zhí)行文件,則它將被調(diào)用一次而沒有參數(shù)。鉤子的標(biāo)準(zhǔn)輸入對于每個成功更新的ref都是一行:

sha1-old SP sha1-new SP refname LF

refname的值是相對于$ GIT_DIR; 例如,對于主人的頭,這是“refs/heads/master”。每個refname前的兩個sha1值是更新之前和之后的refname的對象名稱。創(chuàng)建的Ref將具有等于0 {40}的sha1等號,而被刪除的ref將具有等于0 {40}的sha1-new,否則sha1-old和sha1-new應(yīng)該是存儲庫中的有效對象。

GIT_PUSH_CERT*環(huán)境變量可以被檢查,就如同在pre-receivehook,接受簽字推后。

使用這個hook,很容易生成描述存儲庫更新的郵件。此示例腳本每次發(fā)送一條郵件消息,列出推送到存儲庫的提交,并將具有良好簽名的簽名推送推送證書記錄到記錄器服務(wù):

#!/bin/sh
# mail out commit update information.while read oval nval refdo        if expr "$oval" : '0*$' >/dev/null
        then
                echo "Created a new ref, with the following commits:"
                git rev-list --pretty "$nval"        else
                echo "New commits:"
                git rev-list --pretty "$nval" "^$oval"
        fi |
        mail -s "Changes to ref $ref" commit-list@mydomain
done
# log signed push certificate, if anyif test -n "${GIT_PUSH_CERT-}" && test ${GIT_PUSH_CERT_STATUS} = Gthen        (
                echo expected nonce is ${GIT_PUSH_NONCE}
                git cat-file blob ${GIT_PUSH_CERT}        ) | mail -s "push certificate from $GIT_PUSH_CERT_SIGNER" push-log@mydomain
fi
exit 0

此hook調(diào)用的退出代碼將被忽略,但非零退出代碼將生成錯誤消息。

請注意,當(dāng)此hook運(yùn)行時,refname可能不會有sha1-new。如果其他用戶在更新后修改了ref git-receive-pack,但在鉤子能夠評估之前,這很容易發(fā)生。建議鉤子依賴于sha1-new而不是refname的當(dāng)前值。

更新后的hook

經(jīng)過所有其他處理后,如果至少更新了一個ref,并且$ GIT_DIR/hooks/post-update文件存在并且是可執(zhí)行文件,則更新后將使用已更新的ref列表調(diào)用。這可以用來實(shí)現(xiàn)任何存儲庫范圍的清理任務(wù)。

該hook調(diào)用的退出代碼被忽略;git-receive-pack無論如何,唯一要做的就是退出。

例如,git update-server-info如果存儲庫已打包并通過啞傳輸進(jìn)行服務(wù),則可以使用此掛接。

#!/bin/sh
exec git update-server-info

隔離環(huán)境

當(dāng)receive-pack接收對象時,它們被放置到目錄中的臨時“隔離”目錄中,$GIT_DIR/objects并且只有在pre-receive鉤子完成后才遷移到主對象存儲中。如果在此之前推送失敗,則完全移除臨時目錄。

這有幾個用戶可見的效果和注意事項(xiàng):

  1. 推送由于傳入包,缺少對象或pre-receive掛鉤問題而失敗的內(nèi)容不會留下任何磁盤上的數(shù)據(jù)。這通常有助于防止重復(fù)的失敗推送填滿磁盤,但可能會使調(diào)試更具挑戰(zhàn)性。

  2. pre-receive掛鉤創(chuàng)建的任何對象都將在隔離目錄中創(chuàng)建(只有在成功時才進(jìn)行遷移)。

  3. pre-receive鉤子不得更新任何指向隔離對象的參考。訪問存儲庫的其他程序?qū)o法看到對象(并且如果預(yù)接收掛鉤失敗,則這些引用會損壞)。為了安全起見,任何來自內(nèi)部的ref更新都會pre-receive被自動拒絕

另請參閱

git-send-pack[1], gitnamespaces[7]

Previous article: Next article: