Git -svn W: -empty_dir предупреждения. Что они имеют в виду?
При попытке клонировать существующий репозиторий Subversion с помощью git -svn, используя стандартный макет, я получил кучу предупреждений W: -empty_dir
(и W: +empty_dir
). Клонированный репозиторий git, похоже, работает, то есть я могу выполнять обычные операции git и dcommit в репозиторий SVN.
Реальная проблема заключается в том, что начальный клон и rebase создают несколько пустых каталогов, которые не существуют в репозитории SVN, в верхней части репозитория (вместе с другими каталогами в trunk). Эти каталоги не содержат файла, а только некоторые пустые каталоги внутри них. Кажется, что предупреждения "W: -empty_dir" соответствуют этим пустым каталогам.
Я искал пустые каталоги, проверяя весь репозиторий с помощью SVN, но пустого каталога нет. Я также проверил SVN, если у репозитория есть файлы со специальными свойствами, но не было ничего, кроме "исполняемого" и "mime-type".
Существующий репозиторий не изначально следовал за стандартным макетом, но я очистил его так, чтобы верхние каталоги были просто "туловищем", "тегами" и "ветками".
Что может вызвать создание этих пустых каталогов, которые не существуют в Subversion?
Ответы
Ответ 1
Не зная, откуда взялись эти пустые каталоги, вы можете сказать git-svn
удалить их с помощью параметра командной строки --rmdir
или svn.rmdir
.
См. git-svn
ОПЦИИ man page и
Удалите каталоги из дерева 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
не будет импортировать пустой каталог.
Обратите внимание, что вы можете перезапустить импорт после этого предупреждения.
Ответ 2
Одна из вещей с git заключается в том, что она не отслеживает каталоги. Это все о содержании (файлах) в git. Таким образом, пустые каталоги в значительной степени остаются томиться в вашем местном репо. Лучший способ избавиться от пустых каталогов в вашем локальном репо - сделать git clean -d.
Оформить заказ git для получения дополнительной информации.
Ответ 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 пустым, вы, вероятно, удалили бы все x/y в наборе изменений SVN, и удаление x/y/z даже не было бы сообщается отдельно. Поэтому вы не получите этого предупреждения, но вместо этого W: -empty_dir: x/y
предупреждает вас, что x, возможно, стал пустым, и вы знаете, что это не так, потому что тогда вы бы удалили x...
Если, с другой стороны, вы оставили пустые каталоги и хотите сохранить их, я думаю, вы использовали бы -preserve-empty-dirs, и я тоже не вижу смысла в предупреждении (если он все еще появляется в этом случай).
Короче говоря, игнорируйте это. В отличие от W: +empty_dir
, это совсем другая история.