在尝试使用标准布局使用git-svn克隆现有Subversion存储库时,我收到了一堆W: -empty_dir
(和W: +empty_dir
)警告。克隆的git存储库似乎正在工作,即我可以执行常规的git操作并且dcommit到SVN存储库。
真正的问题是,初始克隆和rebase会创建一些空目录,这些目录在SVN存储库中不存在,位于存储库的顶部(以及trunk中的其他目录)。这些目录不包含文件,只包含其中的一些空目录。似乎“W:-empty_dir”警告对应于这些空目录。
我通过使用SVN检出整个存储库来查找空目录,但是没有空目录。我还通过SVN检查了存储库是否包含具有特殊属性的文件,但除了“可执行”和“mime-type”之外没有任何其他文件。
现有的存储库最初并未遵循标准布局,但我将其清理干净,以便顶级目录只是“trunk”,“tags”和“branches”。
什么可能导致创建Subversion下不存在的这些空目录?
答案 0 :(得分:18)
在不知道这些空目录的确切位置的情况下,您可以使用git-svn
命令行选项或--rmdir
配置选项告诉svn.rmdir
删除它们。
请参阅git-svn
OPTIONS手册页和
如果没有留下文件,则从SVN树中删除目录 SVN可以对空目录进行编辑,如果没有文件,则默认情况下不会删除它们。 git无法对空目录进行版本化 启用此标志将使提交到SVN的行为类似于git。
警告来自git-svn不支持的SVN标签(“目录”),如“git svn
interrupted, then I lost all the tags, how to fix it?”。
From this thread:
SVN跟踪目录,git不跟踪,因此空目录无法在git中表示 对文件的这些警告似乎告诉你哪些文件被删除,导致空目录留在原地,在那个特定的
svn commit
被导入。
-empty_dir
和+empty_dir
之间的区别在于空目录在SVN回购中的显示方式:
-empty_dir
删除一堆文件,将目录(分支或标记)留空。
+empty_dir
刚刚导入的SVN修订版中创建了一个空分支或标记,git-svn
将不会导入空目录。
答案 1 :(得分:8)
git的一个原因是它不跟踪目录。这都是关于git中的内容(文件)。所以空目录几乎要留在当地的回购中。摆脱本地仓库中空目录的最佳方法是执行git clean -d。
结帐男人git clean以获取更多信息。
答案 2 :(得分:4)
关于标题中的问题(这是吸引谷歌关注此页面的问题),根据我的发现,使用git-svn 1.7.1或git 1.8.5:警告W: -empty_dir: x/y/z
意味着文件或文件夹x / y / z已在SVN变更集中删除。除非您指定了-q(--quiet),否则该事实已报告为D x/y/z
。我认为它试图说的是,因此,文件夹x / y 可能变空,因此从git视图中删除。更常见的是,x / y没有变空,没有什么特别的事情发生。
实际上,如果删除x / y / z会使x / y为空,那么你可能已经删除了SVN变更集中的整个x / y,并且甚至不能删除x / y / z单独报道。所以你不会得到那个警告,而是W: -empty_dir: x/y
警告你x可能已经变空了,你知道它没有,因为那时你会删除x ...
另一方面,如果你确实留下了空目录并希望保留它们,我猜你会使用--preserve-empty-dirs而且我也没有看到警告中的任何一点(如果它仍然出现在那里情况)。
简而言之,忽略它。与W: +empty_dir
不同,这是一个不同的故事。