Ручні дії з простими командами git
План полягає в тому, щоб розділити окремі каталоги на власні репости, а потім об'єднати їх. Наведені нижче ручні кроки не використовували скриптів, що використовуються як вигляд, але прості для розуміння команди і можуть допомогти об'єднати зайві N підпапок у інше єдине сховище.
Розділити
Припустимо, що ваша оригінальна репо є: original_repo
1 - розділити додатки:
git clone original_repo apps-repo
cd apps-repo
git filter-branch --prune-empty --subdirectory-filter apps master
2 - Розщеплені мочки
git clone original_repo libs-repo
cd libs-repo
git filter-branch --prune-empty --subdirectory-filter libs master
Продовжуйте, якщо у вас більше 2 папок. Тепер у вас буде два нових і тимчасових сховища git.
Завоюйте за допомогою об’єднання додатків і ліб
3 - Підготуйте абсолютно нове репо:
mkdir my-desired-repo
cd my-desired-repo
git init
І вам потрібно буде зробити хоча б один вчинок. Якщо наступні три рядки потрібно пропустити, ваше перше репо буде відображатися під коренем вашого репо:
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"
Після введення файлу temp mergeкоманда в наступному розділі припиниться, як очікувалося.
Беручи від зворотного зв'язку користувача, замість того , щоб додавати довільний файл , як a_file_and_make_a_commitви можете додати .gitignoreабо README.mdт.п.
4 - Спочатку об'єднайте програми:
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"
Тепер ви повинні побачити каталог програм у вашому новому сховищі. git logмає відображати всі відповідні історичні повідомлення про фіксацію.
Примітка: як Кріс зазначив нижче у коментарях, для нової версії (> = 2,9) git вам потрібно вказати за --allow-unrelated-historiesдопомогоюgit merge
5 - З'єднайте ліповий репо наступний таким же чином:
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"
Продовжуйте, якщо у вас є більше двох репостів для злиття.
Довідка: Об’єднайте підкаталог іншого сховища з git