簡體   English   中英

如何在 Git 中導入並保持更新的 CVS 存儲庫?

[英]How to import and keep updated a CVS repository in Git?

CVS 中有一個中央存儲庫,我想在本地將它與 Git 一起使用,然后將我的更改發送回 CVS。

我每天能完成什么?

我想完成的任務是:

  • 進口分支機構,
  • 以類似 GIT 的格式獲取歷史記錄,以及
  • 將我的更改/提交導出回中央服務器

順便說一句,我還查看了將 git 與 CVS 一起使用的最佳實踐 但它沒有用,我無法弄清楚我錯過了什么或做錯了什么。

我過去所做的是:

導入 CVS 存儲庫

使用:

$ git cvsimport -C target-cvs -r cvs -k -vA authors-file.txt -d $CVSROOT module

在哪里:

  • target-cvs是保存我的存儲庫本地副本的目錄。
  • cvs是用於引用遠程存儲庫的名稱。 所以,我將有cvs/mastercvs/HEAD等由當地指出master
  • authors-file.txt是包含 CVS account 和 Name+email 匹配的文件,每行包含userid=User Name <useremail@hostname>
  • $CVSROOT是 CVS 存儲庫服務器。 如果我使用某個 sourceforge 存儲庫中的匿名克隆,那么我將使用: :pserver:anonymous@project_name.cvs.sourceforge.net:/cvsroot/project_name
  • module是我要克隆的存儲庫內的模塊。 如果存儲庫只有一個模塊,則可能與project_name相同。

更新存儲庫

可以重復我之前寫的命令。 在那個特定的例子中,它應該在target-cvs的父目錄中運行。 為了以后更方便,您可能需要配置一些變量(您可以在如何將修訂歷史從 mercurial 或 git 導出到 cvs?的答案中閱讀更多詳細信息)

$ git cvsimport

這足以使git的本地存儲庫與 CVS 中的遠程存儲庫保持同步。

日常工作

從現在開始,每個更改都應該在本地 git 分支中進行。 一個功能,一個分支。 為此,我使用了“成功的 Git 分支模型”中描述的工作流程。 唯一的區別是master指向 CVS,但從概念上講,這里可以應用相同的工作流程。 這只是一個約定。

一旦您的提交在 CVS 中推送,它將在下一次更新 ( git cvsimport ) 中返回到 master。 然后,您可以刪除實現該功能的本地分支。

對於進行中的工作(在當地的分支機構),你應該rebase它們對主人。 因為您將功能分開,所以解決沖突應該更容易。 棘手的部分是一些分支依賴於其他分支,但仍然可以管理。 微提交有很大幫助(就像在任何 git 工作流程中一樣)。

如果每個本地分支都重新定位並且 master 從未接觸過(更新除外),那么git cvsexportcommit應該可以正常工作。 請記住,它適用於一次提交。 這有點乏味,但總比沒有好。 鑒於前面的例子,命令應該是這樣的:

$ git cvsexportcommit -vc commit-id

如果您只有遠程 CVS 的只讀訪問權限,那么您可以通過電子郵件發送補丁或公開您的 git 存儲庫,以便提交者可以獲取您的補丁來應用它們。 在這種情況下,與 CVS 的正常工作流程沒有什么不同。 同樣,在下一次更新中,您將看到master 中的更改。

由於cvsps工具不兼容,最新版本的git cvsimport已損壞。

所以你必須安裝cvsps-2.1

在 OSX 上你可以(有brew ):

brew tap homebrew/versions
brew install cvsps2
brew unlink cvsps
brew link --overwrite cvsps2

並像往常一樣導入空的 git 存儲庫,例如:

git cvsimport -C RepoName -r cvs -o master -k -v -d:pserver:anonymous@reponame.cvs.sourceforge.net:/cvsroot/path ModuleName

您還可以使用cvs2git工具將 CVS 存儲庫轉換為 git。 但是,您需要有權訪問 CVSROOT 目錄。

檢查cvs2git 文檔以了解安裝步驟。

用法示例:

cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --username=cvs2git /path/to/cvs/repo

這將創建兩個 git fast-import 格式的輸出文件。 這些文件的名稱由您的選項文件或命令行參數指定。 在示例中,這些文件被命名為cvs2git-tmp/git-blob.datcvs2git-tmp/git-dump.dat

這些文件可以通過以下方式導入到空的 git 存儲庫中:

cat git-blob.dat git-dump.dat | git fast-import

然后刪除TAG.FIXUP分支,運行gitk --all查看轉換結果。

檢查更多,通過運行: cvs2git --help

我相信在你的情況下沒有現成的食譜。 但是,您可以嘗試以下操作:

  • 使用 Git 手動同步 CVS 數據,或為此編寫腳本。 他們將從 CVS 獲取信息並將其放入 Git。 這會給你一些 Git 的歷史。 不完全干凈,不完全可用,但仍然。
  • 使用git cvsimport工具將您的 CVS 存儲庫遷移到 Git。 並使用git cvsserver要求 Git 假裝是其他開發人員的 CVS。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM