Các bước thủ công với các lệnh git đơn giản
Kế hoạch là chia các thư mục riêng lẻ thành các kho riêng, sau đó hợp nhất chúng lại với nhau. Các bước thủ công sau đây không sử dụng các tập lệnh chuyên nghiệp nhưng sử dụng các lệnh dễ hiểu và có thể giúp hợp nhất các thư mục con N bổ sung vào một kho lưu trữ duy nhất.
Chia
Giả sử repo ban đầu của bạn là: original_Vpo
1 - Chia ứng dụng:
git clone original_repo apps-repo
cd apps-repo
git filter-branch --prune-empty --subdirectory-filter apps master
2 - Chia lib
git clone original_repo libs-repo
cd libs-repo
git filter-branch --prune-empty --subdirectory-filter libs master
Tiếp tục nếu bạn có nhiều hơn 2 thư mục. Bây giờ bạn sẽ có hai kho git mới và tạm thời.
Chinh phục bằng cách hợp nhất các ứng dụng và libs
3 - Chuẩn bị repo hoàn toàn mới:
mkdir my-desired-repo
cd my-desired-repo
git init
Và bạn sẽ cần phải thực hiện ít nhất một cam kết. Nếu bỏ qua ba dòng sau, repo đầu tiên của bạn sẽ xuất hiện ngay dưới gốc của repo của bạn:
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"
Với tệp tạm thời được cam kết, merge
lệnh trong phần sau sẽ dừng như mong đợi.
Lấy từ phản hồi của người dùng, thay vì thêm một tệp ngẫu nhiên như a_file_and_make_a_commit
, bạn có thể chọn thêm một .gitignore
, hoặc README.md
v.v.
4 - Hợp nhất repo ứng dụng trước:
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"
Bây giờ bạn sẽ thấy thư mục ứng dụng bên trong kho lưu trữ mới của bạn. git log
sẽ hiển thị tất cả các thông điệp cam kết lịch sử có liên quan.
Lưu ý: như Chris đã lưu ý bên dưới trong các nhận xét, đối với phiên bản mới hơn (> = 2.9) của git, bạn cần chỉ định --allow-unrelated-histories
vớigit merge
5 - Hợp nhất libs repo tiếp theo theo cách tương tự:
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"
Tiếp tục nếu bạn có nhiều hơn 2 repos để hợp nhất.
Tham khảo: Hợp nhất thư mục con của kho lưu trữ khác với git