15

我有一个特定的问题,我在这里或其他任何地方都没有找到解决方案。我有一个 Subversion 存储库,我正在使用 git-svn 访问它并对其进行处理。

前段时间,Subversion 存储库中有一些空目录(空的,只有子文件夹)。Git 不跟踪这些。然后它们被从 Subversion 存储库中删除。但即使在运行此命令后我仍然拥有它们:

git svn rebase

当我手动删除它们时,它们会在下一个命令期间重新创建:

git svn rebase

我怎样才能摆脱它们?

我使用纯 Subversion 进行了检查,它们不在存储库中。

4

4 回答 4

16

我想你会在这篇博文中找到答案。

[...]

如果没有留下任何文件,则从 SVN 树中删除目录。SVN 可以对空目录进行版本控制,如果其中没有文件,默认不会删除它们。git 无法对空目录进行版本控制。启用此标志将使对 SVN 的提交像 git 一样。config key: svn.rmdir

要解决问题的根源,请全局设置 git config:

git config --global svn.rmdir true

[...]

于 2013-07-31T10:17:45.640 回答
4

告诉git svn它不应该尝试重新创建空目录:

git config svn-remote.svn automkdirs false

这是手册页的相关部分:

svn-remote.<名称>.automkdirs

通常,“git svn clone”和“git svn rebase”命令会尝试重新创建 Subversion 存储库中的空目录。如果此选项设置为“false”,则只有在显式运行“git svn mkdirs”命令时才会创建空目录。如果未设置,git svn 假定此选项为“true”。

请注意,很容易将此主题与向 SVN 提交/不提交空目录的主题混淆(这是什么svn.rmdir)。

于 2016-04-05T09:32:54.417 回答
3

通过https://spin.atomicobject.com/2014/08/17/git-svn-empty-directories/回答:

修改您的~/.gitconfig以将此添加为默认行为。

  [svn]
  # push empty directory removals back to svn as directory deletes
  rmdir = true

这将使删除目录成为默认值。

于 2018-05-22T13:52:47.890 回答
1

这有点粗糙,但我发现以下解决了我的问题:

rm .git/svn/refs/remotes/trunk/unhandled.log
git clean -df

任何后续

git svn rebase

不会重新创建任何东西。

由于我不知道如何在不重新克隆 repo 的情况下重新生成此文件,我建议先对其进行备份。它是一个文本文件,所以我想您也可以编辑它的内容以删除最终创建的条目

于 2014-09-12T10:30:24.220 回答