2011-01-21 3 views
5

Я пишу fast-export/fast-import для Plastic SCM, но у меня возникают проблемы с каталогами и файлами, содержащими пробелы в их именах.git fast-export формат и пробелы

Например, git fast-export что-то вроде:

git mv "new directory" "second directory" 

заканчивается экспортируются как:

D new directory/hello.c 
M 100644 :1 second directory/hello.c 

вместо "move" (R) операции. То же самое происходит с файлом с пробелами в имени.

Есть ли способ справиться с этим правильно?
Означает ли это, что Git не может обрабатывать переименования на дорожках с пробелами?

Отредактирован с реальным примером ниже:

Я что-то вроде этого на коммит:

R src/samples/sampledata src/samples/samplebase 
* R src/samples/samplebase/Test.Workflow.xml src/samples/samplebase/new/Test.Workflow.xml 

и терпит неудачу импортирование говоря

fatal: Path src/samples/samplebase/Test.Workflow.xml not in branch 

Итак, я понимаю, это Безразлично 't поддерживает перемещение каталога, а затем перемещение файла внутри него ... Это немного странно, не так ли?

ответ

2

git fast-import упоминает в разделе «Handling rename»:

При импорте переименованного файла или каталога, просто удалите старое имя (ена) и изменить новое имя (ы) в течение соответствующего фиксации. Git выполняет переименование после факта, а не явно во время фиксации.

Так что ваш пример, похоже, следует этой логике.

Не забывайте, что Git не поддерживает каталоги версий, только blob (то есть содержимое файла с соответствующим путем).


Чтобы добавить в отредактированном вопрос:

  • движение из каталога означает, если они ввозятся в Git, что источник (каталог) должны быть удалены после все файлы были обработано (т.е. импортировано, переименовано или нет)
  • перемещение файла при импорте в Git является классическим git mv.

В 2011 году ОП has posted a question on the old gmane list.
И вопрос currently (2017) discussed in Git for Windows (git-for-windows/git issue 908).

+0

Это сбивает с толку, поскольку также поддерживается операция «переименования»: filerename Переименовывает существующий файл или подкаталог в другое место в ветке. Существующий файл или каталог должны существовать. Если место назначения существует, оно будет заменено исходным каталогом. 'R' SP SP LF – pablo

+0

@pablo: Я отредактировал свой ответ, чтобы обсудить ваш сценарий. Вы не перемещаете каталог при импорте в Git. Вы просто удаляете его после обработки всех файлов. – VonC

+0

@vonc: хорошо, значит, это означает, что вы не можете использовать «move», делая git-import ?? Это не то, что говорит документация, но я сейчас пытаюсь сделать это, и это не работает, делая шаги. Проблема в том, что она выглядит довольно случайной: каталог переименовывается из верхнего регистра в нижний регистр, затем 1000 завершает последующий сбой одного файла, а другие были успешно изменены и импортированы между этими двумя коммитами. Кажется, что «движение» поддерживается при быстром импорте git, поэтому другие SCM, правильно работающие с ходами, могут легко экспортироваться, но (если у меня здесь что-то не так), на самом деле это не работает. – pablo

Смежные вопросы