У меня есть проект под git
. Однажды я переместил все файлы проекта из текущего каталога в foo/bar/
по проекту. Я сделал это, используя git mv
. Затем я добавил еще несколько файлов и внес некоторые изменения в уже существующие файлы.Как переписать историю, чтобы все файлы, кроме тех, которые я уже переместил, находятся в подкаталоге?
В результате теперь, когда я смотрю на историю foo/bar/file.c
, я могу видеть изменения, которые я сделал после того, как переместил файл.
Я попытался исправить это различными способами (filter-branch
с фильтром подкаталогов и т. Д.), Но ничего не помогло, поэтому я довольно сложен здесь. Буду признателен за любую помощь, которую вы можете мне дать. Спасибо!
@ Александр: Вы можете попробовать поставить однострочный (все в одинарных кавычках) в реальном скрипте с линией bash shebang. Я думаю, что 'filter-branch', вероятно, пытается запустить это в' sh', а не 'bash'. – Cascabel
Я сделал некоторый прогресс. Кажется, что двойные скобки в выражении if вызывают эту ошибку. Одиночные скобки работают лучше, но все равно не работают. Проблема в том, что до того, как я переместил все в foo/bar /, у меня был каталог с именем foo с некоторым контентом в проекте. Так что теперь он жалуется, что «не может переместить' foo »в подкаталог сам по себе,' foo/bar/foo '. –
@Alexander: Вам просто нужно настроить сценарий соответственно. Что-то вроде: 'if [[! -e foo/bar]]; затем mkdir -p foo/bar; git ls-tree - имя-только $ GIT_COMMIT | grep -v^foo $ | xargs -I файлы mv файлы foo/bar; fi' Использует grep для фильтрации 'foo' из списка файлов, которые нужно переместить. Обратите внимание, что я также предполагаю, что подкаталог 'bar' никогда не существовал, пока вы не переместили все под ним. Если это не так, тогда вам также нужно будет учитывать это в скрипте. –