wyodrebnienie historii biblioteki jako zewnetrzne repozytorium git

0
 project
  ├─ lib
  │  └─koza
  │     └─ koza.cpp 
  ├─ src
  │  └─ main.cpp
  └─ other_file.txt

jest jakiś automat który dla zadanej ścieżki w repozytorium np. lib/koza
stworzy nowe repozytorium z historią zmian w wybranym folderze np. lib/koza
oraz prze-mapuje ścieżki np. lib/koza/koza.cpp ==> source/koza.cpp

chciałbym wybraną bibliotekę użyć w kilku projektach i teraz używać jej jako submodules

2

https://github.com/newren/git-filter-repo . Możesz przenieść pliki do danego podkatalogu i usunąć resztę. Historia repo wygląda tak jakby nic poza tą scieżką się nie wydarzyło tj. commity, które nie zawierają plików ze ścieżki znikają.

Operacja wygląda tak, że robisz dwa uruchomienia na czystym repo. Jedno uruchomienie usuwa wszystko poza biblioteką a na koniec pushujesz wszystko do nowego repo. Druga operacja robi przeciwieństwo i na końcu masz twoje bazowe repo bez biblioteki (robisz push --force albo wpychasz to wszystko do kolejnego nowego repo)

Oczywiście powiem to co zawsze: nie idź tą drogą. Submoduły tylko na papierze wyglądają fajnie, w praktyce to połączenie wad monorepo i odzielnnych repozytoriów. Ogarnij jak działa Conan albo inny menadżer pakietów do C++

0
git filter-repo --path $DIR_PATH

git filter-repo --subdirectory-filter $DIR_PATH

git filter-repo --to-subdirectory-filter $NEW_PATH

w paru miejscach na tym forum widziałem uwagę aby nie używać submodules, ale może to zawsze była opinia @slsy :D
na tą chwilę  nie dostrzegam problemów w submodules, kwestia tylko odrobiny skupienia ale vscode troche w tym pomaga, albo moje projekty są za małe

0

Late to the party, ale właśnie dokładnie do tego służy git subtree.

0

@hauleth: strasznie upierdliwe jest git subtree w stosunku do submodules , żadne z moich ulubionych GUI do GIT tego nie wspiera i trzeba z palca pisać :(
ale widzę sporo zalet git subtree wiec pewnie też zacznę tego używać

1

Wiesz, możesz wpierw użyć git subtree by wyciągnąć do osobnego drzewa, a potem używać git submodule. Tylko git submodule jest takim dzieckiem, którym nikt się nie chce zajmować i sobie tkwi w takim na poły używalnym stanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1