Git
英文 ▾ 主題 ▾ 最新版本 ▾ git-cvsimport 最後更新於 2.43.1

名稱

git-cvsimport - 從另一個人們不喜歡的 SCM 中搶救您的資料

概要

git cvsimport [-o <branch-for-HEAD>] [-h] [-v] [-d <CVSROOT>]
	      [-A <author-conv-file>] [-p <options-for-cvsps>] [-P <file>]
	      [-C <git-repository>] [-z <fuzz>] [-i] [-k] [-u] [-s <subst>]
	      [-a] [-m] [-M <regex>] [-S <regex>] [-L <commit-limit>]
	      [-r <remote>] [-R] [<CVS-module>]

描述

警告: git cvsimport 使用 cvsps 版本 2,該版本被視為已過時;它不適用於 cvsps 版本 3 及更高版本。如果您要執行 CVS 儲存庫的一次性匯入,請考慮使用 cvs2gitcvs-fast-export

將 CVS 儲存庫匯入 Git。 它將建立一個新的儲存庫,或以增量方式匯入到現有的儲存庫中。

將 CVS 日誌分割成修補程式集是由 cvsps 完成的。至少需要 2.1 版本。

警告:在某些情況下,匯入會導致不正確的結果。 請參閱 問題 章節以取得進一步參考。

絕對不要在由 git cvsimport 建立的分支上執行任何您自己的工作。 預設情況下,初始匯入將從 CVS 儲存庫的主分支建立並填入 "master" 分支,您可以自由使用;之後,您需要自行 git merge 增量匯入或任何 CVS 分支。 建議透過 -r 指定已命名的遠端,以隔離並保護傳入的分支。

如果您打算建立所有開發人員都可以讀/寫的共享公共儲存庫,或者您想使用 git-cvsserver[1],那麼您可能需要建立匯入儲存庫的裸複製,並將該複製用作共享儲存庫。 請參閱 gitcvs-migration[7]

選項

-v

詳細程度:讓 cvsimport 報告它正在執行的動作。

-d <CVSROOT>

CVS 封存的根目錄。 可能是本機 (簡單路徑) 或遠端;目前僅支援 :local:、:ext: 和 :pserver: 存取方法。 如果未給定,git cvsimport 將嘗試從 CVS/Root 讀取它。 如果不存在此類檔案,它會檢查 CVSROOT 環境變數。

<CVS-module>

您要匯入的 CVS 模組。 相對於 <CVSROOT>。 如果未給定,git cvsimport 會嘗試從 CVS/Repository 讀取它。

-C <目標目錄>

要匯入的 Git 儲存庫。 如果該目錄不存在,則會建立它。 預設為目前目錄。

-r <遠端>

要將此 CVS 儲存庫匯入到的 Git 遠端。 將所有 CVS 分支移動到 remotes/<遠端>/<分支>,類似於 git clone 預設使用 origin 的方式。

-o <HEAD 分支>

當未指定遠端 (透過 -r) 時,CVS 中的 HEAD 分支會匯入到 Git 儲存庫中的 origin 分支,因為 HEAD 對於 Git 而言已經具有特殊含義。 當指定遠端時,HEAD 分支會命名為 remotes/<遠端>/master,以鏡像 git clone 行為。 如果您要匯入到不同的分支,請使用此選項。

使用 -o master 來繼續最初由舊 cvs2git 工具完成的匯入。

-i

僅匯入:匯入後不執行簽出。 此選項可確保工作目錄和索引保持不變,且如果它們不存在,則不會建立它們。

-k

移除關鍵字:將使用 -kk 從 CVS 封存中擷取檔案,以避免雜訊變更集。 強烈建議,但預設為關閉,以保留與早期匯入樹狀結構的相容性。

-u

將標籤和分支名稱中的底線轉換為點。

-s <subst>

將分支名稱中的字元 "/" 替換為 <subst>

-p <cvsps 選項>

cvsps 的其他選項。 選項 -u-A 是隱含的,不應在此處使用。

如果您需要傳遞多個選項,請以逗號分隔它們。

-z <fuzz>

以秒為單位將時間戳模糊因子傳遞給 cvsps。 如果未設定,cvsps 預設為 300 秒。

-P <cvsps 輸出檔案>

不要呼叫 cvsps,而是讀取提供的 cvsps 輸出檔案。 這對於除錯或在 cvsimport 外部處理 cvsps 時很有用。

-m

嘗試根據提交訊息偵測合併。 此選項將啟用預設的正規表示式,嘗試從提交訊息中擷取來源分支名稱。

-M <正規表示式>

嘗試根據帶有自訂正規表示式的提交訊息偵測合併。 它可以使用 -m 來同時啟用預設的正規表示式。 您必須逸出正斜線。

正規表示式必須在 $1 中擷取來源分支名稱。

此選項可以多次使用,以提供多個偵測正規表示式。

-S <正規表示式>

略過符合正規表示式的路徑。

-a

匯入所有提交,包括最近的提交。 預設情況下,cvsimport 會略過時間戳記少於 10 分鐘前的提交。

-L <限制>

限制匯入的提交數。 解決 cvsimport 洩漏記憶體的情況。

-A <作者轉換檔案>

預設情況下,CVS 在撰寫其提交記錄時使用 Unix 使用者名稱。 使用此選項和 author-conv-file 會將 CVS 中記錄的名稱對應到作者姓名、電子郵件和選用的時區

	exon=Andreas Ericsson <ae@op5.se>
	spawn=Simon Pawn <spawn@frog-pond.org> America/Chicago

git cvsimport 將使其看起來像這些作者一直都已正確設定其 GIT_AUTHOR_NAME 和 GIT_AUTHOR_EMAIL。 如果指定了時區,則 GIT_AUTHOR_DATE 將套用對應的偏移量。

為了方便起見,每次提供 -A 選項時,此資料都會儲存到 $GIT_DIR/cvs-authors,並且每次執行 git cvsimport 時都會從同一個檔案讀取。

如果您打算稍後使用 git cvsexportcommit 將變更匯出回 CVS,則不建議使用此功能。

-R

產生一個 $GIT_DIR/cvs-revisions 檔案,其中包含從 CVS 修訂版本號碼到新建立的 Git 提交 ID 的對應。 產生的檔案將為每個匯入的 (檔案名稱、修訂版本) 配對包含一行;每行看起來像這樣

src/widget.c 1.1 1d862f173cdc7325b6fa6d2ae1cfd61fd1b512b7

如果修訂資料已存在,則會將其附加到該檔案,以便在執行增量匯入時使用。

如果您在提交訊息、錯誤追蹤系統、電子郵件封存等中儲存了 CVS 修訂版本號碼,則此選項可能很有用。

-h

列印簡短的使用訊息並結束。

輸出

如果指定了 -v,腳本會報告它正在執行的動作。

否則,成功會以 Unix 方式指示,即僅以零結束狀態結束。

問題

與時間戳記相關的問題

  • 如果 CVS 儲存庫中提交的時間戳記不夠穩定,無法用於對提交進行排序,則變更可能會以錯誤的順序顯示。

  • 如果任何檔案被 "cvs import" 過多次 (例如,匯入多個供應商版本),則 HEAD 包含錯誤的內容。

  • 如果不同檔案的時間戳記順序跨越提交比對時間視窗內的修訂版本順序,則提交的順序可能會錯誤。

與分支相關的問題

  • 未執行任何提交的分支不會匯入。

  • 即使從未在 CVS 中新增,也會將分支點的所有檔案新增到分支。

  • 這適用於在建立子分支之後,才新增至來源分支的檔案:如果先前未在子分支上進行任何提交,這些檔案在 Git 中會被錯誤地新增至子分支。

與標籤相關的問題

  • 同一個修訂版本上的多個標籤不會被匯入。

如果您懷疑您想要匯入的儲存庫可能存在任何這些問題,請考慮使用 cvs2git

  • cvs2git (cvs2svn 的一部分), https://subversion.dev.org.tw/

GIT

屬於 git[1] 套件的一部分

scroll-to-top