10

我正在使用 cvs2svn-2.4.0 进行 CVS 到 Git 的迁移。这不包括 .cvsignore 到 .gitignore 的转换。如何将 .cvsignore 文件转换为 .gitignore 文件?

4

5 回答 5

8

这是一个 Bash 脚本,它将查看目录树中的 .cvsignore 文件并将它们的模式添加到顶级 .gitignore 文件中。它期望 .cvsignore 文件每行只包含一个模式(显然 .cvsignore 文件允许在一行中有多个模式):

for f in `find . -name .cvsignore | sort `; do
    dir=`dirname $f | sed -r 's:^\.::'`
    cat $f | awk '{print "'$dir'/"$1}' >> .gitignore
done

此外,您必须从http://ximbiot.com/cvs/manual/cvs-1.11.23/cvs_18.html#SEC191添加默认的 CVS 忽略模式。

于 2014-06-03T13:31:48.693 回答
3

您不能只复制.cvsignore.gitignore- 格式不相同(除非它是顶层目录中的简单文件列表。

例如,查看Eclipse 的迁移到 Git 指南

.cvsignore 和 .gitignore 之间的语义存在细微差别,因此在迁移到 Git 时不应只重命名这些文件。至少在 .gitignore 中的每一行前面加上一个“/”,以确保模式在所有子文件夹中都不匹配。

好的做法是直接在 Git 存储库的顶级文件夹中创建一个 .gitignore 并添加 / /bin/ 或 / /*/bin/ (取决于 repo 布局)。然后,您可以从项目级忽略文件中删除 bin 条目(如果这是唯一的条目,还可以删除忽略文件)。

于 2014-06-03T11:07:10.290 回答
1

find 命令应该直接重命名,虽然格式有些相同,但还是有一些细微差别,稍后您需要更改

总的来说,从 CVS 迁移到 GIT 时,这是一个好的开始,至少从一开始就是这样。我有数百个这样的 .cvsignore 文件,我在 cvs2git 转换后执行了这个操作

find . -name '*.cvsignore' -print -exec rename ".cvsignore" ".gitignore" {}  \;

不要忘记 CVS 在 CVSROOT 模块中有一个全局忽略文件,所以你可能会错过一些你在 CVS 中通过转换本地 .cvsignore 的文件

你可以通过做得到那些全球性的

cvs checkout CVSROOT 你会在哪里找到,那些在“cvsignore”文件中

checkoutlist  config  cvsignore    editinfo  modules  rcsinfo  verifymsg
commitinfo    CVS     cvswrappers  loginfo   notify   taginfo

然后我建议将这些全局文件放入根文件夹 .gitignore

注意:有不同版本的 rename (kernel,perl) 如果 rename 是基于 perl 的正则表达式版本,命令将失败,请确保您使用正确的 rename

于 2017-09-09T07:43:24.160 回答
0

您可能会看一下我编写的用于转换 cvsignore,v RCSFiles 的小型 python 脚本。所以提交历史不会被修改,也不会创建额外的提交。它有它的局限性,但在我们公司做得很好。我把它放在github上:

https://github.com/stroeter/cvsignore2gitignore

于 2017-03-15T07:43:54.500 回答
-3

只需在终端控制台中使用以下命令:

find . -name .cvsignore -prune -exec mv {} .gitignore \;

于 2015-01-14T13:44:25.900 回答