Git-svn W: -empty_dir предупреждения.Что они имеют в виду? - PullRequest
36 голосов
/ 10 ноября 2010

При попытке клонировать существующее хранилище Subversion с использованием git-svn с использованием стандартной компоновки я получил кучу предупреждений W: -empty_dirW: +empty_dir). Клонированный git-репозиторий, похоже, работает, то есть я могу выполнять обычные git-операции и dcommit в SVN-репозиторий.

Реальная проблема заключается в том, что начальный клон и ребаз создает некоторые пустые каталоги, которых нет в SVN-хранилище, в верхней части хранилища (вместе с другими каталогами в транке). Эти каталоги не содержат файлов, а содержат только несколько пустых каталогов внутри них. Похоже, что предупреждения "W: -empty_dir" соответствуют этим пустым каталогам.

Я искал пустые каталоги, проверив весь репозиторий с помощью SVN, но нет пустого каталога. Я также проверил через SVN, есть ли в хранилище файлы со специальными свойствами, но не было ничего, кроме «исполняемый» и «mime-type».

Существующий репозиторий изначально не соответствовал стандартному макету, но я его очистил, чтобы верхние каталоги были просто "trunk", "tags" и "branch".

Что может быть причиной создания этих пустых каталогов, которые не существуют в Subversion?

Ответы [ 3 ]

18 голосов
/ 24 ноября 2010

Не зная точно, откуда взялись эти пустые каталоги, вы могли бы git-svn удалить их, используя параметр командной строки --rmdir или параметр конфигурации svn.rmdir.

См. git-svn OPTIONS man-страница и

Удаление каталогов из дерева SVN, если не осталось файлов.
SVN может создавать версии пустых каталогов, и они не удаляются по умолчанию, если естьв них не осталось файлов.git не может создавать версии пустых каталогов.
Включение этого флага приведет к тому, что коммит SVN будет действовать как git.


Предупреждение исходит от тегов SVN (которые являются "каталогами"), которые не поддерживаютсяgit-svn, как в "git svn прервано, тогда я потерял все теги, как это исправить? ".
Из этой темы :

SVN отслеживает каталоги, git - нет, поэтому пустые каталоги не могут быть представлены в git.
Эти предупреждения о файлах, похоже, говорят вам, какие файлы были удалены, в результате чего пустой каталог остается на месте, вэтот конкретный svn commit импортируется.

Разница между -empty_dir и +empty_dir составляет примерно , как пустой каталог появляется в репозитории SVN :

-empty_dir

Группа файлов удаляется, оставляя каталог (ветку или тег) пустым.

+empty_dir

Только что была пустая ветка или тегсоздается в импортируемой ревизии SVN, и git-svn не будет импортировать пустой каталог.


Обратите внимание, что вы можете возобновить импорт после этого предупреждения .

8 голосов
/ 15 февраля 2012

Одной из особенностей git является то, что он не отслеживает каталоги. Все дело в контенте (файлах) в git. Таким образом, пустые каталоги в значительной степени остаются в вашем локальном репо. Лучший способ избавиться от пустых каталогов в вашем локальном репозитории - это сделать git clean -d.

Checkout man git clean для получения дополнительной информации.

4 голосов
/ 04 декабря 2013

Что касается вопроса в заголовке (именно это привлекает внимание 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 / z оставило бы x / y пустым, вы, вероятно, удалили бы все x / y в наборе изменений SVN, а удаление x / y / z даже не было бы сообщается отдельно. Таким образом, вы не получите это предупреждение, но вместо этого W: -empty_dir: x/y предупреждает вас, что x мог бы стать пустым, а вы знаете, что этого не произошло, потому что тогда вы удалили бы x ...

Если, с другой стороны, вы оставили пустые каталоги и хотите их сохранить, я думаю, вы бы использовали --preserve-empty-dirs, и я тоже не вижу смысла в предупреждении (если оно все еще появляется в этом случай).

Короче, игнорируй это. В отличие от W: +empty_dir, это другая история.

...