【问题标题】:Git-svn W: -empty_dir warnings. What do they mean?Git-svn W:-empty_dir 警告。他们的意思是什么?
【发布时间】:2014-08-05 05:39:15
【问题描述】:

在尝试使用标准布局使用 git-svn 克隆现有 Subversion 存储库时,我收到了一堆 W: -empty_dir(和 W: +empty_dir)警告。克隆的 git 存储库似乎正在工作,即我可以执行通常的 git 操作并 dcommit 到 SVN 存储库。

真正的问题是初始克隆和变基创建了一些在 SVN 存储库中不存在的空目录,位于存储库的顶部(以及主干中的其他目录)。这些目录不包含文件,但其中只有一些空目录。似乎“W:-empty_dir”警告对应于这些空目录。

我通过使用 SVN 检查整个存储库来查找空目录,但没有空目录。我还通过 SVN 检查了存储库是否有具有特殊属性的文件,但除了“可执行文件”和“mime-type”之外没有其他文件。

现有存储库最初并未遵循标准布局,但我对其进行了清理,以便顶部目录仅是“主干”、“标签”和“分支”。

什么可能导致创建这些在 Subversion 下不存在的空目录?

【问题讨论】:

  • git config svn-remote.svn.automkdirs false 可能会阻止 git svn 重新创建目录。

标签: git git-svn


【解决方案1】:

在不知道这些空目录的确切来源的情况下,您可以使用--rmdir 命令行选项或svn.rmdir 配置选项告诉git-svn 删除它们。

参见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 repo中的显示方式

-empty_dir

一堆文件被删除,留下一个目录(分支或标签)为空。

+empty_dir

在导入的 SVN 版本中刚刚创建了一个空的分支或标签,git-svn 不会导入一个空目录。


注意你can restart the import after that warning

【讨论】:

  • 感谢您的回答,但 --rmdir 选项似乎会在您 dcommit 时删除空目录。如果 git-svn 没有在顶级目录(主干)中创建这些空目录,这将很有帮助。
  • @Barum: 是否有可能在 SVN 端删除它们,以便git-svn 无需在dcommit 步骤上处理它们即可运行?
  • 好吧,我想删除它们,但问题是我在 SVN 存储库中找不到那些空目录。 (至少在当前快照中。)我不完全知道 git-svn 是如何工作的,但它可能是由历史中的空目录引起的?
  • @Barum:您的 SVN 结帐工作区中有什么?你做结帐'/'? (里面有trunkbranchestags?)。如果你做了 checkout '/',清理它然后创建 git-svn,你可以尝试重新检查当前清理的 SVN '/' repo,然后重做 git-svn 以查看问题是否仍然存在。跨度>
  • --preserve-empty-dirs 选项可用于跟踪其他空目录。由于 git 跟踪文件而不是目录,它会在目录中创建一个空的虚拟文件(默认为 .gitignore)以强制目录存在。
【解决方案2】:

git 的一个特点是它不跟踪目录。这都是关于 git 中的内容(文件)的。因此,空目录几乎可以在您的本地存储库中消失。摆脱本地仓库中空目录的最佳方法是执行 git clean -d。

结帐 man git clean 了解更多信息。

【讨论】:

  • 是的,空目录可能是原因。但是,如果我没记错的话,目录在 subversion repo 中不再存在。我最好的猜测是,当 git 通过导入所有提交来建立历史记录时,那里的空目录不知何故不会被清理。可能是 git-svn 中的一个错误。
【解决方案3】:

关于标题中的问题(这是引起 google 关注此页面的原因),根据我的发现,使用 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,那是另一回事。

【讨论】:

    猜你喜欢
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    相关资源
    最近更新 更多