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

警告: 對於某些情況,匯入會導致不正確的結果。請參閱 ISSUES 部分以獲取更多參考。

絕不應該在 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

殺死關鍵字:將使用 -kk 從 CVS 歸檔中提取檔案,以避免嘈雜的變更集。強烈推薦,但預設關閉以保留與早期匯入樹的相容性。

-u

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

-s <subst>

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

-p <options-for-cvsps>

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

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

-z <fuzz>

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

-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] 套件的一部分

scroll-to-top