Chciałbym scalić zdalne repozytorium git w moim działającym repozytorium git jako jego podkatalog. Chciałbym, aby powstałe repozytorium zawierało połączoną historię dwóch repozytoriów, a także, aby każdy plik scalonego repozytorium zachował swoją historię tak, jak w zdalnym repozytorium. Próbowałem użyć strategii poddrzewa, jak wspomniano w Jak używać strategii scalania poddrzewa , ale po wykonaniu tej procedury, chociaż wynikowe repozytorium rzeczywiście zawiera scaloną historię dwóch repozytoriów, pojedyncze pliki pochodzące ze zdalnego nie zachowały swojej historii (`git log 'na którymkolwiek z nich pokazuje po prostu komunikat" Scalona gałąź ... ").
Nie chcę też używać modułów podrzędnych, ponieważ nie chcę, aby dwa połączone repozytoria git były już oddzielne.
Czy możliwe jest połączenie zdalnego repozytorium git w innym jako podkatalog z pojedynczymi plikami pochodzącymi ze zdalnego repozytorium, zachowując ich historię?
Bardzo dziękuję za pomoc.
EDYCJA: Obecnie wypróbowuję rozwiązanie, które używa git filter-branch do przepisania historii scalonego repozytorium. Wygląda na to, że działa, ale muszę to jeszcze przetestować. Wrócę do raportu z moich ustaleń.
EDYCJA 2: W nadziei, że wyjaśnię siebie, podaję dokładne polecenia, których użyłem w strategii poddrzewa git, co powoduje widoczną utratę historii plików zdalnego repozytorium. Niech A będzie repozytorium git, w którym obecnie pracuję, a B repozytorium git, które chciałbym włączyć do A jako jego podkatalog. Wykonał następujące czynności:
git remote add -f B <url-of-B>
git merge -s ours --no-commit B/master
git read-tree --prefix=subdir/Iwant/to/put/B/in/ -u B/master
git commit -m "Merge B as subdirectory in subdir/Iwant/to/put/B/in."
Po tych poleceniach i przejściu do katalogu subdir / Iwant / to / put / B / in, widzę wszystkie pliki B, ale git logna każdym z nich wyświetla się tylko komunikat zatwierdzenia „Scal B jako podkatalog w podkatalogu / Iwant / to / put /Kosz." Historia ich plików, jaka jest w B, zostaje utracona.
To, co wydaje się działać (ponieważ jestem początkującym w git, mogę się mylić) jest następujące:
git remote add -f B <url-of-B>
git checkout -b B_branch B/master # make a local branch following B's master
git filter-branch --index-filter \
'git ls-files -s | sed "s-\t\"*-&subdir/Iwant/to/put/B/in/-" |
GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
git update-index --index-info &&
mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' HEAD
git checkout master
git merge B_branch
Powyższe polecenie dla filter-branch pochodzi z git help filter-branch, w którym zmieniłem tylko ścieżkę subdir.
gitkmówi o historii? W przeszłości z powodzeniem korzystałem z funkcji scalania poddrzewa git. Być może możesz ujawnić swoje dokładne polecenia? Nie jestem pewien, czy git-filter-branch to właściwe podejście. Mogę polecić wypróbowanie git-fast-export i git-fast-import, aby zsyntetyzować nową historię.