0

操作系统和工具信息:我在 Windows 7 上使用 Cygwin 的 mintty Unix bash 的最新(2/11/2015)更新。

我正在努力将 CVS 存储库转换为使用 Git,并且需要从 tarball 中恢复文件。提取文件后,我尝试使用“cvs checkout”并获得了一些文件,但大多数文件都在阁楼目录中并且没有被签出,即使我将它们全部移到一个目录中,所以他们不像这个 gnu 论坛中所建议的那样在阁楼中这不起作用之后,我尝试了无法解决的 cvs2svn。最后我尝试使用常规的 RCS co,它创建了我需要的大部分文件。

但是,从顶层目录中的 Attic 子目录中转换的所有文件都是空的 (0kb)。即使将 ,v 文件移至更高级别,它们也无法正确提取。

代码(rcs co 应该为以下工作)

$ pwd
/tmp/test/repo/<working-directories>/
$ find . -type f -wholename "*Attic/**,v" -exec rcs co {} \;
$ find . -type f -name "*,v" -exec rcs co {} \;

$ cd /tmp/test/repo/<trouble-directory>
$ find . -type f -name "*,v" ! -wholename "*Attic/**,v" -exec rcs co {} \;

但是,对于以下命令,rcs 无法正常工作并创建 0kb 大小的文件

$ pwd
/tmp/test/repo/<trouble-directory>
$ find . -type f -wholename "*Attic/**,v" -exec rcs co {} \;

移动到顶层不起作用

$ pwd
/tmp/test/repo/<trouble-directory>
$ find . -type f -wholename "*Attic/**,v" -exec mv {} . \;
$ find . -maxdepth 1 -type f -name "*,v" -exec rcs co {} \;

即使移动到工作目录也不起作用

$ pwd
/tmp/test/repo/<trouble-directory>
$ find . -type f -wholename "*Attic/**,v" -exec mv {} ../<working-directory> \;
$ cd /tmp/test/repo/<working-directory>
$ find . -maxdepth 1 -type f -name "*,v" -exec rcs co {} \;

什么可以解释 rcs co 的这种行为?其他文件具有相似的大小和扩展名。我似乎无法在存储库的文档中找到任何不同的方式来处理此特定目录中的阁楼文件,而且我无法在任何配置中找到确凿的证据。有任何想法吗?

4

2 回答 2

0

一些开发人员签入一个大小为零的文件以表明它已被删除。或者,他们可以依赖版本标签并从该标签中省略文件。

如果这样做了,rlog 将显示更改(并且通常带有注释说文件已被删除)。

此外,可以使用 rlog 显示的tip/head 版本编写脚本,以倒计时一个修订版并获取文件的最后一个非空版本。当然,这更复杂——但由于问题是为什么,而不是如何,一个合适的脚本将是一个单独的答案。

于 2015-02-11T23:45:59.870 回答
0

文件在阁楼中的原因是它们已被删除或以其他方式不可用。这种文件的最新版本可以合理地用一个空文件或根本没有文件来表示。

如果您想从 Attic 检索早期版本,我想您可以;但是,您正在引入项目历史中的不一致之处。

我没有什么经验git cvsimport,但如果我是你,这是我会尝试的第一件事。你并不是第一个想从 CVS 迁移到 Git 的人。

于 2015-02-12T10:34:41.040 回答