Hoạt động Patch trong Git
Patch là một file văn bản, mà nội dung của nó tương tự với git diff, nhưng song song với code, nó cũng có siêu dữ liệu về các commit như ID commit, ngày tháng, thông báo commit.... Chúng ta có thể tạo ra một patch từ các commit và người khác có thể áp dụng chúng vào repository của họ.
Jerry thực hiện chức năng strcat cho dự án của anh ta. Jerry có thể tạo một patch của code của anh ta và gửi nó cho Tom. Sau đó, anh ta có thể áp dụng patch nhận được vào code của anh ta.
Jerry sử dụng lệnh git format-patch để tạo một patch cho các commit mới nhất. Nếu bạn muốn tạo một patch cho một commit cụ thể, thì khi đó bạn sử dụng COMMIT_ID với lệnh format-patch.
[jerry@CentOS project]$ pwd /home/jerry/jerry_repo/project/src [jerry@CentOS src]$ git status -s M string_operations.c ?? string_operations [jerry@CentOS src]$ git add string_operations.c [jerry@CentOS src]$ git commit -m "Added my_strcat function" [master b4c7f09] Added my_strcat function 1 files changed, 13 insertions(+), 0 deletions(-) [jerry@CentOS src]$ git format-patch -1 0001-Added-my_strcat-function.patch
Lệnh trên tạo ra các tệp .patch bên trong thư mục làm việc hiện tại. Tom có thể sử dụng patch để chỉnh sửa file của anh ta. Git cung cấp hai lệnh để áp dụng các patch là git am và git apply, theo cách riêng biệt. Git apply chỉnh sửa các file nội bộ mà không tạo ra commit, trong khi git am chỉnh sửa file và cũng tạo commit.
Để áp dụng patch và tạo commit, bạn sử dụng lệnh sau:
[tom@CentOS src]$ pwd /home/tom/top_repo/project/src [tom@CentOS src]$ git diff [tom@CentOS src]$ git status –s [tom@CentOS src]$ git apply 0001-Added-my_strcat-function.patch [tom@CentOS src]$ git status -s M string_operations.c ?? 0001-Added-my_strcat-function.patch
Patch này được áp dụng thành công, bây giờ chúng ta có thể quan sát các chỉnh sửa bằng cách sử dụng lệnh git diff.
[tom@CentOS src]$ git diff
Lệnh trên tạo ra kết quả sau:
diff --git a/src/string_operations.c b/src/string_operations.c index 8ab7f42..f282fcf 100644 --- a/src/string_operations.c +++ b/src/string_operations.c @@ -1,5 +1,16 @@ #include <stdio.h> +char *my_strcat(char *t, char *s) diff --git a/src/string_operations.c b/src/string_operations.c index 8ab7f42..f282fcf 100644 --- a/src/string_operations.c +++ b/src/string_operations.c @@ -1,5 +1,16 @@ #include <stdio.h> +char *my_strcat(char *t, char *s) + { + char *p = t; + + + while (*p) ++p; + while (*p++ = *s++) + ; + return t; + } + size_t my_strlen(const char *s) { const char *p = s; @@ -23,6 +34,7 @@ int main(void) {
Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.
Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:Follow fanpage của team https://www.facebook.com/vietjackteam/ hoặc facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.
Bài học Git phổ biến khác tại vietjack.com:
- Git - Hoạt động Create
- Git - Hoạt động mô phỏng (Clone)
- Git - Thực hiện các thay đổi
- Git - Review các thay đổi
- Git - Commit (Ký thác)
- Git - Hoạt động Push
- Git - Hoạt động Update
- Git - Hoạt động Stash
- Git - Hoạt động Move
- Git - Hoạt động Rename
- Git - Hoạt động Delete
- Git - Sửa lỗi
- Git - Hoạt động Tag
- Git - Hoạt động Patch
- Git - Quản lý nhánh
- Git - Xử lý Conflict
- Và còn rất nhiều loạt bài học khác tại trang web của chúng tôi....