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