如何克隆带有空目录的 CVS 仓库

6

我使用以下命令将CVS存储库转换为Git存储库:

$ git cvsimport -vaikd :pserver:thillaiselvan@192.168.1.11:2401/ -C IVR-GUI GIT

然而,Git会忽略CVS存储库中的空目录。但我希望克隆存储库时包括这些空目录。我该如何让Git做到这一点?
1个回答

5
Git不能跟踪空目录,因此它们在CVS-Git转换中不会被带过来。 根据Git FAQ中的说明:“添加文件时,目录会自动添加。”由于Git没有跟踪其中任何内容,因此您的目录不会出现。
如何跟踪空的Git仓库:
一种解决跟踪空目录的方法是在每个空目录中放置一个空文件,例如.gitkeep(按照惯例使用.gitkeep,但可以将此文件命名为任何您想要的名称)。 跟踪这些文件,然后就可以克隆空目录了。 有几种其他方法可以将空目录添加到Git存储库中
手动从现有CVS存储库复制空文件: 以下命令将复制cvs存储库中的所有空目录到您的Git存储库中(请更换虚拟目录路径)。
$ find ~/cvs_repo -type d -empty -exec cp -r {} ~/git_repo/ \;

您可以选择喜欢的方法将这些空目录添加到项目中,并使用类似于 $git commit -m "Add empty directories to repository" 的命令进行跟踪。

使用cvsimport自动化该过程?

我认为cvsimport应该可以弥补版本控制系统之间(CVS可以跟踪空目录,而Git不行)的这种差异。我不了解这个工具,但是也许有一个选项可以传递给它,以便自动处理添加空目录。


实际上,我已经将 CVS 存储库转换为 Git。现在从 Git 克隆它们时,我无法获取那些空目录 :( - thillaiselvan
1
我通常会添加一个空的 .gitignore 文件。 - Milan Babuškov
1
David和Milan都是正确的,但我看到(因此使用)最常见的约定是在要保留的目录中创建一个空的.gitkeep文件。.gitkeep对Git没有任何特殊意义,但它是一个文件(因此会保留该目录),根据其名称,其目的非常明显。 - Bob Gilmore
@thillaiselvan,如果我理解正确的话,您的问题是无法在当前的 Git 存储库中获取 CVS 曾经跟踪的空目录?我添加了一个应该有所帮助的部分。如果我有误解,请告诉我。 - David Cain
@David,我已将CVS存储库转换为Git格式,命令如下:git cvsimport -v -a -i -k -d:pserver:thillaiselvan@192.168.1.11:2401/ -C IVR-GUI GIT。现在IVR-GUI存储库已成为服务器上的Git存储库。在我的工作机器上,我尝试克隆IVR-GUI存储库。它成功克隆了,但它不包含空目录,public/images被忽略了... - thillaiselvan
1
@thillaiselvan。好的!下次你应该在问题中包含这个。所以,你需要ssh进入你的服务器,使用我上面给出的find命令找到所有空目录,并手动将它们复制到你的新Git存储库中(然后使用你选择的hack添加这些目录)。在cvs-Git转换期间,我的猜测是那些空目录丢失了。你需要手动弥补Git和cvs之间的这种差异。 - David Cain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接