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

目錄 搜索
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
文字

名稱

git-receive-pack  - 接收推入存儲(chǔ)庫(kù)的內(nèi)容

概要

git-receive-pack <directory>

描述

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

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

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

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

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

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

選項(xiàng)

<directory>

要同步到的存儲(chǔ)庫(kù)。

預(yù)接收hook

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

sha1-old SP sha1-new SP refname LF

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

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

GIT_PUSH_CERT_SIGNER

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

GIT_PUSH_CERT_KEY

簽署推送證書(shū)的密鑰的GPG密鑰ID。

GIT_PUSH_CERT_STATUS

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

GIT_PUSH_CERT_NONCE

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

GIT_PUSH_CERT_NONCE_STATUS

UNSOLICITED

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

MISSING

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

BAD

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

OK

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

SLOP

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

GIT_PUSH_CERT_NONCE_SLOP

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

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

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

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

更新hook

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

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

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

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

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

接收后hook

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

sha1-old SP sha1-new SP refname LF

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

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

使用這個(gè)hook,很容易生成描述存儲(chǔ)庫(kù)更新的郵件。此示例腳本每次發(fā)送一條郵件消息,列出推送到存儲(chǔ)庫(kù)的提交,并將具有良好簽名的簽名推送推送證書(shū)記錄到記錄器服務(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)用的退出代碼將被忽略,但非零退出代碼將生成錯(cuò)誤消息。

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

更新后的hook

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

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

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

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

隔離環(huán)境

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

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

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

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

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

另請(qǐng)參閱

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

上一篇: 下一篇: