如何优雅地让 git-svn 处理空目录?

31

我非常高兴地使用git-svn,但是我注意到当涉及到空目录时,Git与SVN有不同的处理方式。我需要解决以下特定情况:

在我的项目的SVN仓库中,我有几个空目录,它们应该保留下来不被修改。由于一些重构需求,我不得不删除另一个曾经包含文件的目录。 git svn dcommit 会删除文件,但是保留了目录。这让我感到困惑,因为Git忽略空目录的做法导致我的SVN仓库不一致。

我希望将这个特定目录从我的SVN仓库中删除。Git-svn可以做到吗?如果不能,我应该如何操作?(最终,在提交其他文件的同时,如何在同一更改集中完成此操作?)

2个回答

35

使用rmdir参数或配置参数:

--rmdir

仅与dcommit,set-tree和commit-diff命令一起使用。

如果SVN树中没有剩余文件,则从中删除目录。 SVN可以对空目录进行版本控制,如果其中没有剩余文件,则默认情况下不会将其删除。 git无法对空目录进行版本控制。启用此标志将使提交到SVN的操作类似于git。

配置键:svn.rmdir


3
启用此标志将使提交到SVN的行为类似于git,这正是我不想要的。我希望SVN能够明确指出树中是否存在空目录。我只想在SVN端删除一个特定的空目录(其中有许多现有的空目录),而不是全部删除。 - Pelle
16
如果你打开了这个参数,它将不会删除现有的空目录。但是下一次你从目录中删除最后一个文件时,“dcommit”将在一个提交中也将该目录从svn中删除。如果你想改变已经提交的svn中的空目录,你应该直接使用SVN,而“rmdir”只影响“dcommit”。 - kan
1
啊,谢谢!我用本地仓库测试了一下,它确实做到了你描述的那样。不知为何我没有从你引用的手册中学到这个(我把第一句话读成“所有空目录都将被删除”)。非常感谢! - Pelle
使用git-svn时,这个能否被配置为默认设置? - Sam Hendley
6
"config key: svn.rmdir" - 所以,只需运行git config --global svn.rmdir true - kan

13
你需要在 SVN 端将其删除:
svn delete -m "deleting empty dir" http://path/to/deleted/dir

2
+1,虽然我对此不是很满意,原因有两个:1.每次想要执行这样的操作时,我需要特别输入存储库路径,2.需要进行单独的提交才能完成。这是唯一的选择吗? - Pelle

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