簡體中文 ▾ 主題 ▾ 最新版本 ▾ 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 <target-dir>

要匯入到的 Git 儲存庫。如果目錄不存在,它將被建立。預設為當前目錄。

-r <remote>

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

-o <branch-for-HEAD>

當沒有指定遠端(透過 -r)時,CVS 的 HEAD 分支被匯入到 Git 儲存庫內的 origin 分支,因為 HEAD 對於 Git 已經有特殊含義。當指定了遠端時,HEAD 分支被命名為 remotes/<remote>/master,映象 git clone 的行為。如果你想匯入到不同的分支,請使用此選項。

使用 -o master 繼續最初由舊的 cvs2git 工具進行的匯入。

-i

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

-k

刪除關鍵字:將從 CVS 存檔中提取 -kk 檔案,以避免不必要的更改集。強烈推薦,但預設關閉以保持與早期匯入樹的相容性。

-u

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

-s <subst>

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

-p <options-for-cvsps>

cvsps 的附加選項。選項 -u-A 是隱式的,不應在此處使用。

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

-z <fuzz>

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

-P <cvsps-output-file>

不呼叫 cvsps,而是讀取提供的 cvsps 輸出檔案。用於除錯或當 cvsps 由 cvsimport 外部處理時。

-m

嘗試根據提交訊息檢測合併。此選項將啟用預設的正則表示式,這些正則表示式會嘗試從提交訊息中捕獲源分支名稱。

-M <regex>

嘗試根據提交訊息和自定義正則表示式檢測合併。它也可以與 -m 一起使用以啟用預設的正則表示式。你必須轉義斜槓。

正則表示式必須捕獲源分支名稱在 $1 中。

此選項可以多次使用以提供多個檢測正則表示式。

-S <regex>

跳過與正則表示式匹配的路徑。

-a

匯入所有提交,包括最近的提交。cvsimport 預設會跳過時間戳在 10 分鐘前的提交。

-L <limit>

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

-A <author-conv-file>

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.apache.org/

GIT

Git[1] 套件的一部分