Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Git-svn W: -empty_dir warnings. What do they mean?

Tags:

git

git-svn

While trying to clone an existing Subversion repository using git-svn using standard layout, I got a bunch of W: -empty_dir (and W: +empty_dir) warnings. The cloned git repository seems to be working, i.e. I can do usual git operations and dcommit to SVN repository.

The real problem is that the initial clone and rebase create some empty directories that do not exist in SVN repository, at the top of the repository (along with other directories in trunk). These directories contain no file but just some empty directories inside them. It seems that the "W: -empty_dir" warnings correspond to these empty directories.

I looked for empty directories by checking out the whole repository using SVN, but there is no empty directory. I also checked through SVN if the repository has files with special properties, but there was not any other than "executable" and "mime-type".

The existing repository was not originally following the standard layout, but I cleaned it up so that the top directories are just "trunk", "tags", and "branches".

What can be causing the creation of these empty directories that do not exist under Subversion?

like image 374
Barum Rho Avatar asked Nov 10 '10 17:11

Barum Rho


2 Answers

Without knowing exactly where those empty directories came from, you could tell git-svn to remove them by using the --rmdir command line option or svn.rmdir configuration option.

See git-svn OPTIONS man page and

Remove directories from the SVN tree if there are no files left behind.
SVN can version empty directories, and they are not removed by default if there are no files left in them. git cannot version empty directories.
Enabling this flag will make the commit to SVN act like git.


The warning comes from SVN tags (which are "directories") not supported by git-svn, as in "git svn interrupted, then I lost all the tags, how to fix it?".
From this thread:

SVN tracks directories, git doesn't, so empty directories cannot be represented in git.
Those warnings on files seem to tell you which files that got deleted, causing an empty directory to be left in place, in that particular svn commit being imported.

The difference between -empty_dir and +empty_dir is about how the empty directory appears in the SVN repo:

-empty_dir

A bunch of files are deleted, leaving a directory (branch or tag) empty.

+empty_dir

An empty branch or tag has just been created in the SVN revision being imported, and git-svn won't import an empty directory.


Note that you can restart the import after that warning.

like image 194
VonC Avatar answered Sep 21 '22 21:09

VonC


One of the things with git is that it does not track directories. It is all about content (files) in git. So empty directories are pretty much left to languish in your local repo. The best way to get rid of empty directories in your local repo is to do git clean -d.

Checkout man git clean for more info.

like image 43
JNovice Avatar answered Sep 21 '22 21:09

JNovice