Как использовать git -filter-repo для объединения одного репо в качестве подкаталога в другой - PullRequest
4 голосов
/ 25 апреля 2020

При попытке использовать git filter-branch для объединения репо с использованием этого gist . Добавляя только соответствующий фрагмент кода:

git filter-branch -f --prune-empty --tree-filter '
        mkdir -p "${REPO_NAME}_tmp"
        git ls-tree --name-only $GIT_COMMIT | xargs -I{} mv {} "${REPO_NAME}_tmp"
        mv "${REPO_NAME}_tmp" "$REPO_NAME"
    '

Я получил предупреждение от git о следующем:

WARNING: git-filter-branch has a glut of gotchas generating mangled history
     rewrites.  Hit Ctrl-C before proceeding to abort, then use an
     alternative filtering tool such as 'git filter-repo'
     (https://github.com/newren/git-filter-repo/) instead.  See the
     filter-branch manual page for more details; to squelch this warning,
     set FILTER_BRANCH_SQUELCH_WARNING=1.

Итак, я посмотрел на git filter-repo, description гласит следующее:

реструктуризация макета файла (например, перемещение всех файлов в подкаталог при подготовке к объединению с другим репо, ...

Это показало, что эту проблему можно решить с помощью git filter-repo, но даже после проверки документации и приведенных примеров я не смог найти способ добиться этого. Может кто-нибудь, пожалуйста, помогите мне с тем же.

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Замените команду filter-branch в скрипте

git filter-branch -f --prune-empty --tree-filter '
        mkdir -p "${REPO_NAME}_tmp"
        git ls-tree --name-only $GIT_COMMIT | xargs -I{} mv {} "${REPO_NAME}_tmp"
        mv "${REPO_NAME}_tmp" "$REPO_NAME"
    '

этим

git filter-repo --to-subdirectory-filter "$REPO_NAME"

См. Ярлыки путей раздел здесь

- фильтр подкаталога <directory>

Рассматривать проект root как находящийся под <directory>

Эквивалентно использованию --path-rename :<directory>/

1 голос
/ 25 апреля 2020

Это выглядит как переименование пути, как часть фильтров на основе пути :

cd  $REPO_DIR_TMP
git filter-repo  --path-rename /:${REPO_NAME}_tmp/

Это переписало бы историю второго репо в подпапке (внутри Второй репо)

Затем вы можете добавить его в качестве удаленного из первого репо, получить и объединить, как в вашем Gitst.

...