我正在使用 cvs2svn-2.4.0 进行 CVS 到 Git 的迁移。这不包括 .cvsignore 到 .gitignore 的转换。如何将 .cvsignore 文件转换为 .gitignore 文件?
5 回答
这是一个 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 忽略模式。
您不能只复制.cvsignore
到.gitignore
- 格式不相同(除非它是顶层目录中的简单文件列表。
例如,查看Eclipse 的迁移到 Git 指南:
.cvsignore 和 .gitignore 之间的语义存在细微差别,因此在迁移到 Git 时不应只重命名这些文件。至少在 .gitignore 中的每一行前面加上一个“/”,以确保模式在所有子文件夹中都不匹配。
好的做法是直接在 Git 存储库的顶级文件夹中创建一个 .gitignore 并添加 / /bin/ 或 / /*/bin/ (取决于 repo 布局)。然后,您可以从项目级忽略文件中删除 bin 条目(如果这是唯一的条目,还可以删除忽略文件)。
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
您可能会看一下我编写的用于转换 cvsignore,v RCSFiles 的小型 python 脚本。所以提交历史不会被修改,也不会创建额外的提交。它有它的局限性,但在我们公司做得很好。我把它放在github上:
只需在终端控制台中使用以下命令:
find . -name .cvsignore -prune -exec mv {} .gitignore \;