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)
{

Theo Tutorialspoint

Bài trước: Hoạt động Tag trong Git

Bài tiếp: Quản lý nhánh trong Git

Thứ Tư, 22/08/2018 16:56
31 👨 104