Làm việc với git submodule
Git
60
gitsubmodule
1
White

Tân Nguyễn viết ngày 23/08/2018

Làm việc với git submodule

alt text

Đô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

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Tân Nguyễn

5 bài viết.
22 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
39 1
Q: Chào anh, Anh có thể chia sẻ về việc sử dụng esb trong esb và các cách liên lạc giữa các service cũng như API Gateway được không a. A: ESB là k...
Tân Nguyễn viết gần 2 năm trước
39 1
White
15 0
Bài viết đầu tiên trong loạt 7 phần về thiết kế, xây dựng và triển khai các dịch vụ nhỏ (microservices) đã giới thiệu về mô hình kiến trúc Microser...
Tân Nguyễn viết gần 2 năm trước
15 0
White
11 0
Microservices hiện được quan tâm trong giới phần mềm, công nghệ với nhiều bài viết, blog, thảo luận, truyền thông, hội thảo. Kỳ vọng về khả năng củ...
Tân Nguyễn viết gần 2 năm trước
11 0
Bài viết liên quan
White
2 0
Hôm nay group review một cái tài liệu về version control với mấy đồng nghiệp, một người bạn bảo: Cái đó có gì đâu mà ông viết có vẻ khó khăn vậy,...
Long Nguyễn Xuân viết 1 năm trước
2 0
White
53 9
Tôi xin tổng hợp các cách dùng git stash tôi hay sử dụng Lưu lại thay đổi Git stash được sử dụng khi muốn lưu lại các thay đổi chưa commit, thườ...
BB viết hơn 4 năm trước
53 9
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
5 bài viết.
22 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!