Bạn có chắc chắn muốn xóa bài viết này không ?
Bạn có chắc chắn muốn xóa bình luận này không ?
Làm việc với git submodule
Làm việc với git submodule
Đôi lúc ta cần phải sử dụng các repo khác như là một module của dự án hiện tại, nhưng ta lại muốn quản lý nó riêng biệt giống như việc sử dụng composer hay npm. Lúc này ta có thể xài git submodule để quản lý các module từ các repo khác.
Một số chú ý:
Git submodule nó sẽ chứa trong 1 thư mục nào đó, nên việc triển khai thư mục bạn nên chú ý phần này, hãy đưa tất cả các module bạn sẽ thực hiện vào trong 1 thư mục
Khi nghĩ tới đây thì có bạn( mình lúc bắt đầu nữa :) ) sẽ có suy nghĩ là tạo ra 1 module mới, rồi làm việc trên module đó, còn repo chính sẽ đưa thư mục submodule đó vào trong
.gitignore
để không đưa code trong module đó lên, :) nhưng không phải như vậy nhé. Phần dưới mình sẽ giải thích
1 Thêm Module mới vào source
$ git submodule add <repository> [<path>]
Trong đó:
- repository - địa chỉ của repo cần lấy về
- path - đường dẫn tới thư mục lưu repo. Nếu ta không chỉ định đường dẫn thì, repo sẽ mặc định được lưu vào thư mục có tên giống với tên repo.
có nhiều options khác bạn có thể xem thêm bằng --help
của git
Chiến nhé:
Vào souce code vào thêm module nào:
cd /path/to/source
git submodule add https://github.com/username/demo.git
Chúng ta hãy xem có gì thay đổi ko nhé
git status
On branch develop
Your branch is up-to-date with 'origin/dev’.
Changes to be committed:
(use "git reset HEAD ..." to unstage)
new file: .gitmodules
new file: demo
Khi bạn chạy lệnh trên thì git nó sẽ tạo cho bạn 1 file .gitmodules
. File này chứa config của module đó.
Okay, bạn hãy push hai file này lên nhé. Mình sẽ giải thích đoạn này. Khi bạn push lên thì file .gitmodules
và folder demo
sẽ được push lên luôn, nhưng khi tạo pull thì bạn hãy xem folder demo đó nó sẽ symlink tới repo demo. Đây là lý do tại sao ở trên mình bảo không nên thêm folder này vào trong .gitignore
và còn 1 lý do nữa sẽ giải thích phần dưới
Giờ bạn hãy chỉnh sửa trong module và push code lên nhé
cd demo
echo "# demo" >> README.md
git add .
git commit -m "add readme"
git push origin master
Sau khi xong bước này thì trên repo demo ( submodule) của bạn đã có code mới nhất
Bạn ra thư mục gốc của project và git status
, bạn sẽ thấy như này:
On branch develop
Your branch is up-to-date with 'origin/develop'.
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
modified: demo (new commits)
no changes added to commit (use "git add" and/or "git commit -a")
Lúc này bạn sẽ thấy git báo là new commit
, đó là commit cuối cùng của submodule và git của bạn cần biết id commit đó để khi bạn update submodule git sẽ dựa vào id commit đó mà checkout
Bạn hãy push tất cả lên, và check pull request bạn sẽ thấy giông như này:
Subproject commit e2378a36a5dcafb798300dab9f9d59c5f8f7ea87
Vậy là xong
2. update git submodule
Khi một member trong team pull code về và muốn dùng module đó thì chỉ cần update submodule
git submodule update
git sẽ dựa vào file .gitmodule
và last commit của submodule để đến path của submodule và checkout đến commit e2378a36a5dcafb798300dab9f9d59c5f8f7ea87
Cảm ơn mọi người đã đọc, mình trình bày không tốt lắm nên có gì mọi người để lại bình luận mình sẽ giải thích nhé :bow






