Подтвердить что ты не робот

Как объединить репозиторий git с подмодулями в другой с слиянием поддерева?

У меня есть репозиторий dotfiles. Я хочу объединить еще один с подмодулями (prezto), поэтому я могу удобно иметь все в одном репозитории без неудобств подмодулей.

Как я могу поддерево слить prezto в мой репозиторий dotfiles со всеми его подмодулями?

Я могу использовать подмодули, я могу разделить и слить поддеревья либо "старомодным" способом, либо с помощью нового инструмента поддерева git.

Я просто не знаю, как это сделать.

4b9b3361

Ответ 1

Александр Михайлян создал script, чтобы преобразовать все подмодули в поддеревьях, вы сможете адаптировать их к вашему делу.

Представляем здесь шаги:

cat .gitmodules |while read i
do
  if [[ $i == \[submodule* ]]; then
    mpath=$(echo $i | cut -d\" -f2)
    read i; read i;
    murl=$(echo $i|cut -d\  -f3)
    mcommit=`eval "git submodule status ${mpath} |cut -d\  -f2"`
    mname=$(basename $mpath)
    echo -e "$name\t$mpath\t$murl\t$mcommit"
    git submodule deinit $mpath
    git rm -r --cached $mpath
    rm -rf $mpath
    git remote add $mname $murl
    git fetch $mname
    git branch _$mname $mcommit
    git read-tree --prefix=$mpath/ -u _$mname
fi
done
git rm .gitmodules

Я думаю, что самым простым путем для вас было бы применить script в репо prezto, а затем сделать repo поддеревом в репозитории dotfiles.

После выполнения script в репозитории prezto вы будете использовать следующие шаги для создания поддерева:

  • Добавьте новый удаленный URL-адрес, указывающий на repo prezto в dotfiles.

    git remote add -f prezto [email protected]:path/prezto.git
    
  • Слейте проект prezto в локальный проект dotfiles. Это не изменяет ни один из ваших файлов локально, но он готовит Git для следующего шага.

    git merge -s ours --no-commit prezto/master
    
  • Создайте новый каталог с именем prezto-subdir (или как вам нравится) и скопируйте в него Git историю проекта prezto.

    git read-tree --prefix=prezto-subdir/ -u prezto/master
    
  • Зафиксируйте изменения, чтобы они были в безопасности.

    git commit -m "Subtree merged in prezto"