Удаление определенных папок из репо

У меня есть репозиторий, который я клонировал локально из TFS, и собираюсь отправить его в наш новый экземпляр VSTS.

Структура папок такая;

\A\AA1234\
\A\AA1235\
\A\AA1236\
\A\AAB237\
\A\AAB238\
\A\AAB239\
\B\BA1234\
\B\BA1235\
\B\BAG236\
\B\BAG237\
\B\BAG238\
\C\...
...

Я бы хотел удалить все проекты формата 2 буквы, за которыми следуют цифры, и оставить те, которые содержат 3 буквы, за которыми следуют цифры (регулярное выражение ниже).

Я использовал следующую команду, которую я нашел здесь, для удаления отдельных папок;

git filter-branch --force --index-filter "git rm --cached --ignore-unmatch -r FOLDERTOREMOVE" --prune-empty --tag-name-filter cat -- --all 

Проблема в том, что это не работает для вложенных папок. Я мог бы заменить «FOLDERTOREMOVE» выше на «A», и это сработает (я тестировал это с меньшим, тестовым репо). Но похоже, что эта команда работает только с папками верхнего уровня. Я безуспешно пробовал следующее:

AA1234
\AA1234
\A\AA1234
A\AA1234

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

Вариант 2, когда дело доходит до git push -u origin master, заключается в том, чтобы каким-то образом указать, чтобы не включать список папок / регулярное выражение.

Вариант 3, я использовал git-tfs для клонирования из TFS. Есть команда --ignore-regex, которую я пробовал (ниже), но она, похоже, все сносит. Я готов перезапустить клон, если мне это удастся, чтобы вытащить только те папки, которые мне нужны.

git-tfs clone --ignore-regex = "/[a-zA-Z]{1}/[a-zA-Z]{2}\d" http://tfs:1234/MyTFS "$/MyTFSPath" --branches=none

REGEX

\\.\\[a-zA-Z]{3}.*?\\
\\.\\[a-zA-Z]{2}[^a-zA-Z].*?\\

Любая помощь будет принята с благодарностью.


1
79
1

Ответ:

Решено

Поверьте, я обнаружил проблему с регулярным выражением, не работающим в моем первоначальном клоне из TFS. Похоже, GIT TFS использует другой вид регулярных выражений, чем я ожидал.

Пока я использовал;

git-tfs clone --ignore-regex = "/[a-zA-Z]{1}/[a-zA-Z]{2}\d" http://tfs:1234/MyTFS "$/MyTFSPath" --branches=none

Это должно было быть на самом деле;

git-tfs clone --ignore-regex = "/[a-zA-Z]{1}/[a-zA-Z]{2}\d" http://tfs:1234/MyTFS "$/MyTFSPath" --branches=none

Обратите внимание, что '/' не нужно экранировать с помощью '\', как я ожидал. Из моих тестов это регулярное выражение затем работает, чтобы исключить файлы / папки, которые вы не хотите включать в свой клон.