LINUX.ORG.RU

git заменить подкаталог

 


0

2

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

Как это сделать чтобы при очередном merge не огрести проблем?

Точнее так: хотелось бы чтобы при merge все что в этом каталоге было конфликтом.

про git submodule слышал, но пока небыло нужды использовать.

★★★★★

Из моих записей (вроде похожая история):


Попал в суперигру. Сделал ветку feature-xxx, в ней удалил одну директорию, на месте этой директории сделал субмодуль. Всё проверил, надо вливать в ветку develop. Пытаюсь переключиться на develop, и вижу: git checkout develop error: The following untracked working tree files would be overwritten by checkout: src/calc/calc.h Please move or remove them before you can switch branches. Aborting

Решение:

  1. Перед переключением на ветку, которая не содержит модуля, надо вручную удалить из модуля все файлы;
  2. Переключиться на ветку;
  3. Слить с веткой, содержащей субмодуль;
  4. Вручную сделать git submodule update.
Beewek ★★
()
Ответ на: комментарий от Syncro

Правильно ли я понял про симлинк:

1. удаляем каталог средствами git

2. добавляем линк на каталог

3. делаем commit в проект.

Идея интересная...

vel ★★★★★
() автор топика

Есть большой проект в котором нужно удалить один из подкаталогов и заменить его на отдельный гит-проект.

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

FishHook
()

С submodule проблем и конфликтов вообще не будет. submodule это по сути ссылка на другой репозиторий, когда ты заменишь каталог сабмодулем ты по сути снесёшь весь контент из этого каталога и добавишь в метаданные запись о том что в этот каталог должен быть сабмодулем скачен другой репозиторий. История изменений тут прерывается и выкидывается.

Когда кто-то сделает pull, у него также просто снесётся весь контент в этом каталоге. Если у него были изменения внутри этого каталога, то конечно будут конфликты, но они тривиально и автоматически разрешаются. Потом ему разве что нужно будет сделать git submodule init && git submodule update чтобы притащить новый контент.

В целом submodule это норм решение, если нет возможности использовать этот код как зависимость из системы.

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

anonymous
()
  • submodule, просто ссылка на другую репу. Не очень удобно управлять. Непрозрачная история — тебе придётся прыгать по репам и ревизиям, чтобы построить общую историю — особенно проявляется на код ревью.
  • subtree, копирует один репозиторий внутрь другого.

Из твоего описания выглядит, что подходят оба, но subtree вероятно ляжет 1:1 на ваши процессы.

anonymous
()