Ręczne kroki za pomocą prostych poleceń git
Plan polega na podzieleniu poszczególnych katalogów na własne repozytoria, a następnie scaleniu ich razem. Poniższe ręczne kroki nie wykorzystywały łatwych w użyciu skryptów, ale łatwe do zrozumienia polecenia i mogą pomóc w scaleniu dodatkowych N podfolderów w inne pojedyncze repozytorium.
Podzielić
Załóżmy, że Twoje oryginalne repozytorium to: original_repo
1 - Podziel aplikacje:
git clone original_repo apps-repo
cd apps-repo
git filter-branch --prune-empty --subdirectory-filter apps master
2 - Podziel biblioteki
git clone original_repo libs-repo
cd libs-repo
git filter-branch --prune-empty --subdirectory-filter libs master
Kontynuuj, jeśli masz więcej niż 2 foldery. Teraz będziesz mieć dwa nowe i tymczasowe repozytorium git.
Pokonaj , łącząc aplikacje i biblioteki
3 - Przygotuj nowe repozytorium:
mkdir my-desired-repo
cd my-desired-repo
git init
Będziesz musiał wykonać co najmniej jedno zatwierdzenie. Jeśli poniższe trzy wiersze powinny zostać pominięte, pierwsze repozytorium pojawi się natychmiast w katalogu głównym repozytorium:
touch a_file_and_make_a_commit # see user's feedback
git add a_file_and_make_a_commit
git commit -am "at least one commit is needed for it to work"
Po zatwierdzeniu pliku tymczasowego merge
polecenie w późniejszej sekcji zostanie zatrzymane zgodnie z oczekiwaniami.
Biorąc pod uwagę opinie użytkowników, zamiast dodawać losowy plik, taki jak a_file_and_make_a_commit
, możesz dodać .gitignore
, lub README.md
itp.
4 - Najpierw scal repozytorium aplikacji:
git remote add apps-repo ../apps-repo
git fetch apps-repo
git merge -s ours --no-commit apps-repo/master # see below note.
git read-tree --prefix=apps -u apps-repo/master
git commit -m "import apps"
Teraz powinieneś zobaczyć katalog aplikacji w nowym repozytorium. git log
powinien pokazywać wszystkie istotne historyczne komunikaty o zatwierdzeniach.
Uwaga: jak Chris zauważył poniżej w komentarzach, dla nowszej wersji (> = 2.9) git, musisz określić za --allow-unrelated-histories
pomocągit merge
5 - Następnie scal repozytorium bibliotek w ten sam sposób:
git remote add libs-repo ../libs-repo
git fetch libs-repo
git merge -s ours --no-commit libs-repo/master # see above note.
git read-tree --prefix=libs -u libs-repo/master
git commit -m "import libs"
Kontynuuj, jeśli masz więcej niż 2 repozytoria do scalenia.
Odniesienie: Scal podkatalog innego repozytorium z git