Итак, у меня большой проект (с закрытым исходным кодом), и в контексте этого проекта я создал библиотеку, которая также может быть полезна в других местах.
Теперь я хочу разделить библиотеку в своем собственном проекте, который мог бы стать открытым исходным кодом на github или подобном. Конечно, библиотека (и ее история там) не должна содержать следов нашего проекта.
git-subtree кажется здесь решением, но оно не совсем подходит.
Моя структура каталогов выглядит примерно так (поскольку это проект Java):
- фехтовальная игра (git workdir)
- ЦСИ
- де
- fencing_game
- транспорт (моя библиотека)
- протокол (часть библиотеки)
- Ограждение (часть основного проекта, взаимодействующего с библиотекой)
- клиент (часть основного проекта, взаимодействующего с библиотекой)
- сервер (часть основного проекта, взаимодействующая с библиотекой)
- клиент (часть основного проекта)
- сервер (часть основного проекта)
- ... (часть основного проекта)
- другие файлы и каталоги (система сборки, сайт и т. П. - часть основного проекта)
После разделения я хочу, чтобы макет каталога библиотеки выглядел следующим образом (включая любые файлы непосредственно в полужирных каталогах):
- my-library (имя будет уточнено)
- ЦСИ
- де
- fencing_game
- транспорт (моя библиотека)
- протокол (часть библиотеки)
История также должна содержать только часть истории основного проекта, которая касается этой части хранилища.
Первый взгляд показал мне git-subtree split --prefix=src/de/fencing_ame/transport
, но это будет
- дайте мне дерево с корнями в
transport
(которое не будет компилироваться) и
- включает каталоги
transport/client
, transport/server
и transport/fencing
.
Первый момент можно смягчить, используя git subtree add --prefix=src/de/fencing_ame/transport <commit>
на принимающей стороне, но я не думаю, что git-subtree может многое сделать против экспорта также этих подкаталогов. (Идея в том, чтобы просто иметь возможность поделиться полным деревом здесь).
Должен ли я использовать git filter-branch
здесь?
После разделения я хочу иметь возможность импортировать обратно библиотеку в моем основном проекте, используя git-subtree или git-submodule, в отдельном подкаталоге, а не там, где он сейчас находится. Я представляю себе макет таким образом
- фехтовальная игра (git workdir)
- ЦСИ
- де
- fencing_game
- транспорт (пусто)
- ограждение (часть основного проекта, взаимодействующего с библиотекой)
- клиент (часть основного проекта, взаимодействующего с библиотекой)
- сервер (часть основного проекта, взаимодействующая с библиотекой)
- клиент (часть основного проекта)
- сервер (часть основного проекта)
- ... (часть основного проекта)
- моя библиотека
- ЦСИ
- де
- fencing_game
- транспорт (моя библиотека)
- протокол (часть библиотеки)
- другие файлы и каталоги (система сборки, сайт и т. П. - часть основного проекта)
Какой самый безболезненный способ сделать это? Существуют ли другие инструменты, кроме git-subtree и git-filter-branch для этой цели?