путаница в написании git filter-branch для перемещения всех файлов в подкаталог - PullRequest
2 голосов
/ 12 марта 2012

Я считаю, что git filter-branch может позволить мне сделать это, но я не могу понять, нужно ли мне использовать --subdirectory-filter или мне нужно использовать индексный фильтр.

Но, скажем, у меня есть репозиторий с именем repo, и структура выглядит примерно так:

repo/fileA
repo/fileB
repo/dir1/fileC

Что я хочу сделать, это переместить все в каталог с именем dir2, так что результат будет:

repo/dir2/fileA
repo/dir2/fileB
repo/dir2/dir1/fileC

Я хочу использовать фильтр-ветку, чтобы она выглядела с самого рождения этого хранилища, все всегда делалось в dir2. Для этого более уместно использовать файл подкаталога или индексный фильтр?

Ответы [ 2 ]

2 голосов
/ 12 марта 2012

Дерево фильтра. Должно работать что-то вроде следующего:

git filter-branch --tree-filter 'test -e fileA && mkdir dir2 && mkdir dir2/dir1 && mv fileA fileB dir2/ && mv dir1/fileC dir2/dir1/ || echo "no op"' HEAD

Однако это предполагает, что fileA, fileB и fileC были добавлены одновременно (поскольку мы используем test -e для fileA), и это может быть не так. Если это не так, вы должны выполнить несколько циклов для каждого из файлов.

1 голос
/ 12 марта 2012

Вероятно, древовидный фильтр.

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