Игнорировать каталоги в git-svn (добавление каталогов в разреженную проверку)
При использовании git svn, редкая проверка центрального хранилища может быть достигнута чем-то вроде
git clone -s URL-to-root --include-paths 'dir1|dir2|dir3'
После использования этой настройки в течение некоторого времени я хотел бы добавить еще один каталог dir4 для отслеживаемых. Этот каталог существовал во многих коммитах, которые я уже проверил. Редактирование переменной svn-remote.svn.include-paths с помощью команды
git config --edit
не оказывает желаемого эффекта на git fetch
(только файлы, измененные в будущих коммитах, будут извлечены при их изменении; не сразу), и следующее также не проверяет dir4:
git svn fetch --include-paths dir4
Я думаю, что следующее будет работать, но будет очень неэффективно из-за повторной установки всех ревизий, начиная с первой ревизии, в которой dir4 появился впервые (назовем это REV):
git svn reset -r REV
git svn fetch --include-paths dir4
git svn rebase
Каков будет лучший способ отслеживания dir4? Что делать, если меня не волнует история dir4?
Есть ли лучший способ сделать начальную разреженную проверку с помощью git-svn, если я подозреваю, что позже захочу изменить список отслеживаемых каталогов? Я также попытался начать с перечисления directoreis, которые не нужно извлекать в исходном коммите, но я не знаю, как их игнорировать позже:
git svn fetch --ignore-paths dir4
Но как мне сказать Git перестать игнорировать dir4
когда я решу, что тоже хочу это проверить?
1 ответ
reset
В разделе справочной страницы git-svn https://git-scm.com/docs/git-svn/1.9.1#git-svn-emresetem говорится следующее:
... если вы измените опцию --ignore-paths, выборка может завершиться ошибкой с "not found in commit" (файл не виден ранее) или "несоответствие контрольной суммы" (пропущено изменение). Если проблемный файл нельзя игнорировать вечно (с --ignore-paths), единственный способ восстановить репозиторий - использовать сброс.
Я думаю, причина в следующем: Git создает отдельный коммит git (определяемый его контрольной суммой) для каждого коммита svn в истории svn. Добавляя каталог в историю, контрольные суммы обязательно должны измениться, поэтому нет другого пути, кроме как перестроить всю историю.
Каталог не может быть добавлен даже без воссоздания истории. Коммит, добавляющий его, должен быть создан локально, и при попытке svn dcommit
это, есть ошибка Item already exists in filesystem...