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

Как перенести Git Проекты для одного проекта с подпроектами

У меня есть ряд проектов, которые находятся в отдельных хранилищах Git прямо сейчас. Они также аналогичны отдельным проектам затмения (потому что я не смог использовать родительские проекты с использованием плагина Maven в течение длительного времени из-за ошибок в плагине m2). Теперь это работает.

Итак, я объединил проекты в Maven, создав базовый проект pom, добавив, что он является родителем для других. Затем я вложил подпроекты.

Когда я пошел, чтобы выполнить базовый проект как проект Git, он решил, что подкаталоги были подмодулями, хотя в корневом каталоге не было файла .gitmodules.

Похоже, единственный способ сделать это - потерять всю историю в проектах, которые будут объединены.

Просто, чтобы быть предельно ясным, текущие имеют:

Project A (repo A)
Project B (repo B)
Project C (repo C)

Я хочу:

New Base Project D (repo D)
   /Project A
   /Project B
   /Project C

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

Повернул решение в bash script. Он предполагает, что подкиды, которые вы хотите добавить, находятся в подкаталогах на одном уровне с родителем. Вот он:

#! /bin/bash
git remote add -f $1 ../$1
git merge -s ours --no-commit $1/master
git read-tree --prefix=$1 -u $1/master
git commit -m "Added project $1"

Git удивительно..

4b9b3361

Ответ 1

Вы можете сделать что-то, называемое "слиянием поддерева", чтобы объединить несколько репозиториев в один. Предположим, что мы хотим объединить ~/projects/alpha и ~/projects/beta в новый проект, ~/projects/multi:

$ cd ~/projects/multi
$ git init

Слияние в проекте "alpha"...

$ git remote add -f alpha ~/projects/alpha
$ git merge -s ours --no-commit alpha/master
$ git read-tree --prefix=alpha -u alpha/master
$ git commit -m "Added project alpha"

Слияние в "бета-проекте" аналогично. Если изменение является постоянным, вы можете удалить альфа-удаленный доступ в новом проекте. Если в альфа-репо все еще есть развитие, вы можете не только сохранить историю, но и внести новые изменения.

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

Ответ 2

У меня недостаточно репутации, чтобы прокомментировать ваш вопрос истории, поэтому я должен написать ответ.

Используйте --follow with log

--follow
       Continue listing the history of a file beyond renames (works only
       for a single file).

Ответ 3

Что бы я делал, это пойти на подмодули. Но если вы действительно хотите объединить репозитории, сделайте следующее:

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