?
This document uses PHP Chinese website manual Release
git-fast-export - Git 數(shù)據(jù)導(dǎo)出器
git fast-export [options] | git fast-import
該程序?qū)⑦m當(dāng)?shù)男抻喴赃m合于git fast-import
管理的形式轉(zhuǎn)儲(chǔ)。
您可以將其用作人可讀的包替換(請(qǐng)參閱 git-bundle [1]),或作為一種交互式git filter-branch
。
--progress=<n>
每個(gè)<n>對(duì)象插入progress
語(yǔ)句,在導(dǎo)入期間以git fast-import
顯示。
--signed-tags=(verbatim|warn|warn-strip|strip|abort)
指定如何處理簽名標(biāo)簽。由于導(dǎo)出后的任何轉(zhuǎn)換都可以更改標(biāo)簽名稱(chēng)(排除修訂時(shí)也可能發(fā)生),因此簽名將不匹配。
當(dāng)詢(xún)問(wèn)abort
(這是默認(rèn)值)時(shí),遇到簽名標(biāo)簽時(shí)該程序?qū)?huì)死亡。使用時(shí)strip
,標(biāo)簽將被無(wú)聲簽名,使用warn-strip
,它們將被做成未簽名的,但會(huì)顯示一條警告,使用verbatim
,它們將被靜靜地導(dǎo)出,使用warn
,并且將被導(dǎo)出,但您會(huì)看到警告。
--tag-of-filtered-object=(abort|drop|rewrite)
指定如何處理其標(biāo)簽對(duì)象被濾除的標(biāo)簽。由于修改和導(dǎo)出的文件可能會(huì)受到路徑的限制,因此標(biāo)記的對(duì)象可能會(huì)被完全過(guò)濾。
當(dāng)詢(xún)問(wèn)abort
(這是默認(rèn)值)時(shí),遇到這樣的標(biāo)簽時(shí)該程序?qū)?huì)死亡。因?yàn)?code>drop它會(huì)從輸出中省略這些標(biāo)簽。使用rewrite
,如果帶標(biāo)簽的對(duì)象是提交,它將重寫(xiě)標(biāo)簽以標(biāo)記祖先提交(通過(guò)父級(jí)重寫(xiě);請(qǐng)參閱 git-rev-list [1])
-M -C
按照 git-diff [1]手冊(cè)頁(yè)中所述執(zhí)行移動(dòng)和/或復(fù)制檢測(cè),并使用它在輸出轉(zhuǎn)儲(chǔ)中生成重命名和復(fù)制命令。
請(qǐng)注意,如果您提供了這些選項(xiàng),則此命令的早期版本不會(huì)發(fā)出抱怨并產(chǎn)生不正確的結(jié)果。
--export-marks=<file>
完成后將內(nèi)部標(biāo)記表轉(zhuǎn)儲(chǔ)到<file>。標(biāo)記每行寫(xiě)成一個(gè):markid SHA-1
。只有修改標(biāo)記才會(huì)被拋棄; 斑點(diǎn)的標(biāo)記被忽略。后端可以使用此文件在導(dǎo)入完成后驗(yàn)證導(dǎo)入,或跨增量運(yùn)行保存標(biāo)記表。由于<file>僅在完成時(shí)打開(kāi)并截?cái)?,因此可以將同一路徑安全地分配給--import-marks。如果沒(méi)有新的對(duì)象被標(biāo)記/導(dǎo)出,該文件將不會(huì)被寫(xiě)入。
--import-marks=<file>
在處理任何輸入之前,請(qǐng)加載<文件>中指定的標(biāo)記。輸入文件必須存在,必須可讀,并且必須使用與--export-marks 相同的格式。
任何已經(jīng)被標(biāo)記的提交都不會(huì)再被導(dǎo)出。如果后端使用類(lèi)似的--import-marks文件,則允許通過(guò)使標(biāo)記在運(yùn)行中保持相同來(lái)增量式雙向?qū)С龃鎯?chǔ)庫(kù)。
--fake-missing-tagger
一些舊版本庫(kù)的標(biāo)簽沒(méi)有標(biāo)簽??焖賹?dǎo)入?yún)f(xié)議對(duì)此非常嚴(yán)格,并且不允許這樣做。所以假冒一個(gè)標(biāo)簽器可以快速導(dǎo)入輸出。
--use-done-feature
用feature done
節(jié)開(kāi)始流,并用done
命令終止它。
--no-data
跳過(guò) blob 對(duì)象的輸出,而是通過(guò)其原始 SHA-1散列引用 blob。當(dāng)重寫(xiě)存儲(chǔ)庫(kù)的目錄結(jié)構(gòu)或歷史記錄而不觸及單個(gè)文件的內(nèi)容時(shí),這非常有用。請(qǐng)注意,生成的流只能由已包含必要對(duì)象的存儲(chǔ)庫(kù)使用。
--full-tree
此選項(xiàng)將導(dǎo)致快速導(dǎo)出為每個(gè)提交發(fā)出“deleteall”指令,后跟提交中所有文件的完整列表(而不僅僅列出與提交的第一個(gè)父代不同的文件)。
--anonymize
匿名化存儲(chǔ)庫(kù)的內(nèi)容,同時(shí)仍保留歷史記錄和存儲(chǔ)樹(shù)的形狀。請(qǐng)參閱ANONYMIZING
下面的部分。
--refspec
將指定的 refspec 應(yīng)用于每個(gè)導(dǎo)出的 ref。它們中的多個(gè)可以被指定。
<git-rev-list-args>…
一個(gè)參數(shù)的列表,可以接受git rev-parse
和git rev-list
,指定特定對(duì)象,并引用到出口。例如,master~10..master
導(dǎo)致當(dāng)前主引用與自第10個(gè)祖先提交后添加的所有對(duì)象一起導(dǎo)出。
$ git fast-export --all | (cd /empty/repository && git fast-import)
這將導(dǎo)出整個(gè)存儲(chǔ)庫(kù)并將其導(dǎo)入現(xiàn)有的空存儲(chǔ)庫(kù)。除了重新編碼未使用UTF-8的提交之外,它將是一對(duì)一的鏡像。
$ git fast-export master~5..master | sed "s|refs/heads/master|refs/heads/other|" | git fast-import
這使得從master~5..master
一個(gè)新的分支調(diào)用other
(即如果master
有線性歷史記錄,它將采取最后5個(gè)提交)。
請(qǐng)注意,這假定該修訂范圍引用的 blob 和提交消息都不包含該字符串refs/heads/master
。
如果--anonymize
給出該選項(xiàng),git 將嘗試從存儲(chǔ)庫(kù)中刪除所有標(biāo)識(shí)信息,同時(shí)仍保留足夠的原始樹(shù)和歷史記錄模式以重現(xiàn)一些錯(cuò)誤。目標(biāo)是在私有存儲(chǔ)庫(kù)中發(fā)現(xiàn)的
git 錯(cuò)誤將存儲(chǔ)在匿名存儲(chǔ)庫(kù)中,后者可以與 git 開(kāi)發(fā)人員共享以幫助解決該錯(cuò)誤。
使用這個(gè)選項(xiàng),git 會(huì)用匿名數(shù)據(jù)替換輸出中的所有 refnames、路徑、blob內(nèi)容,提交和標(biāo)記消息,名稱(chēng)和電子郵件地址。相同字符串的兩個(gè)實(shí)例將被等同替換(例如,兩個(gè)同一作者的提交將在輸出中具有相同的匿名作者,但與原作者字符串沒(méi)有相似之處)。保留提交,分支和標(biāo)簽之間的關(guān)系以及提交時(shí)間戳(但提交消息和引用名與原始文件不相似)。保留樹(shù)的相對(duì)構(gòu)成(例如,如果您有一棵具有10個(gè)文件和3棵樹(shù)的根樹(shù),輸出也是如此),但是它們的名稱(chēng)和文件內(nèi)容將被替換。
如果你認(rèn)為你已經(jīng)發(fā)現(xiàn)了一個(gè) git bug,你可以從導(dǎo)出整個(gè)存儲(chǔ)庫(kù)的匿名流開(kāi)始:
$ git fast-export --anonymize --all >anon-stream
然后確認(rèn)該錯(cuò)誤依然存在于從該流創(chuàng)建的存儲(chǔ)庫(kù)中(很多錯(cuò)誤不會(huì),因?yàn)樗鼈兇_實(shí)取決于確切的存儲(chǔ)庫(kù)內(nèi)容):
$ git init anon-repo $ cd anon-repo $ git fast-import <../anon-stream $ ... test your bug ...
如果匿名存儲(chǔ)庫(kù)顯示該錯(cuò)誤,則可能值得anon-stream
與常規(guī)錯(cuò)誤報(bào)告一起共享。請(qǐng)注意,匿名流壓縮得很好,所以鼓勵(lì)它。如果您想檢查流以查看它不包含任何私人數(shù)據(jù),則可以在發(fā)送之前直接仔細(xì)閱讀它。您可能還想嘗試:
$ perl -pe 's/\d+/X/g' <anon-stream | sort -u | less
它顯示了所有的獨(dú)特行(將數(shù)字轉(zhuǎn)換為“X”,將“用戶(hù)0”,“用戶(hù)1”等折疊為“用戶(hù)X”)。這會(huì)產(chǎn)生更小的輸出,并且通常很容易快速確認(rèn)流中沒(méi)有私人數(shù)據(jù)。
由于git fast-import
不能標(biāo)記樹(shù),因此它將不能完全導(dǎo)出 linux.git 存儲(chǔ)庫(kù),因?yàn)樗脴?shù)而不是提交的標(biāo)記。