Я пытаюсь переместить подкаталог в моем репозитории git, чтобы он стал новым репозиторием (с сохранением существующей истории).
Следуя различным онлайн-предложениям для этого, я клонировал существующее репо, удалил пульт и теперь хочу использовать команду git filter-branch, чтобы удалить все из нового репо, кроме нужного мне каталога. Но когда я запускаю команду, я получаю ошибку.
$ git filter-branch --subdirectory-filter myDirectory -- --all
C:\Program Files (x86)\Git/libexec/git-core\git-filter-branch: line 269: /libexe
c/git-core/git: Bad file number
Could not get the commits
Я использую git-bash в Windows.
Глядя на исходный код git-filter-branch, кажется, что проблема заключается в попытке запустить эту команду:
git rev-list --reverse --topo-order --default HEAD \
--parents --simplify-merges $rev_args "$@" > ../revs ||
die "Could not get the commits"
Я могу запустить эту команду без проблем - в зависимости от того, что я заменяю для значения $ rev_args. Когда я передаю одиночные коммиты, все в порядке. Но в сценарии это происходит отсюда:
rev_args=$(git rev-parse --revs-only "$@")
Если я выполню эту команду, я верну строку с множеством тысяч идентификаторов фиксации.
Поэтому я подозреваю, что проблема просто в том, что команда, которую пытается запустить сценарий, слишком длинна для обработки оболочкой, что привело к появлению загадочного сообщения об ошибке, которое я увидел.
Правильный ли этот анализ? Если да, то что мне делать?
Я нашел один обходной путь, который я опубликую ниже, но он кажется довольно хакерским, и я надеюсь, что кто-то знает способ получше.