Część
Istnieje system którego ani nie napisałem ani formalnie nie utrzymuje ale chciałbym go zmodyfikować i wdrożyć u siebie. System, o którym mowa podzielony jest na dwa repozytoria - pierwsze z nich to repozytorium główne (najważniejsze elementy systemu) a drugie to repozytorium z wtyczkami. Wtyczki powinny być w folderu o nazwie plugins a sam folder plugins powinien być w głównym folderze aplikacji ale tak się akurat składa, że w repozytorium wtyczek struktura wygląda tak:
wtyczka1
wtyczka2
A nie tak
plugins/wtyczka1
plugins/wtyczka2
Jak wspomniałem wcześniej chciałbym swój system oprzeć o kod już istniejący i jednocześnie taki, który napisali inni. Najprościej byłoby więc po prostu pobrać dane z pierwszego repozytorium, następnie stworzyć folder plugins i umieścić tam dane z drugiego repozytorium. W kolejnym kroku usunąć foldery .git oraz plugins/.git i z tego wszystkiego stworzyć własne repozytorium. Takie coś by działało, ale mnie zależy także na aktualizacjach wydawanych przez twórców systemu.
Kombinowałem więc tak:
git init // utworzenie wlasnego repozytorium
// ...
git remote add [nazwa głównego repozytorium] [adres url do głównego repozytorium]
git remote add [nazwa repozytorium z wtyczkami] [adres URL do repozytorium z wtyczkami]
git fetch [nazwa głównego repozytorium]
git fetch [nazwa repozytorium z wtyczkami]
Aktualizacje swojego repozytorium (czyli naniesienie modyfikacji opracowanych przed twórców i hostowanych zupełnie gdzie indziej) chciałem wykonywać w następujący sposób:
git merge [nazwa głównego repozytorium]/[nazwa brancha] --squash --allow-unrelated-histories
git merge [nazwa repozytorium z wtyczkami]/[nazwa brancha] --squash --allow-unrelated-histories
Generalnie to nawet działa tylko problem w tym, że oba polecenia pracują na głównym folderze systemu. Według GIT-a nie ma żadnej wtyczki w folderze głównym więc nie ma czego łączyć i po prostu dodaje nowe pliki do repozytorium. Zachował by się inaczej gdyby nie pracował na głównym folderze aplikacji tylko na folderze plugins - tam są wszystkie wtyczki i to tutaj powinien być przeprowadzony merge
. Innymi słowy: chciałbym, żeby ta druga komenda pracowała na folderze plugins a nie na folderze głównym systemu i wykonywała merge
biorąc pod uwagę dane znajdujące się w folderze plugins
. Da się to jakoś zrobić? A może problem da się rozwiązać inaczej?
Dodam, że nie chcę / nie mogę modyfikować repozytorium twórców systemu. Jeżeli więc zmodyfikuje jakąś wtyczkę to moja modyfikacja powinna być tylko w moim repozytorium. Natomiast modyfikacja autorów systemu powinna być we wszystkich repozytoriach.