Git - Hoạt động vá

Bản vá là một tệp văn bản, có nội dung tương tự như Git diff, nhưng cùng với mã, nó cũng có siêu dữ liệu về các cam kết; ví dụ: ID cam kết, ngày tháng, thông báo cam kết, v.v. Chúng tôi có thể tạo một bản vá từ các cam kết và những người khác có thể áp dụng chúng vào kho lưu trữ của họ.

Jerry thực hiện hàm strcat cho dự án của mình. Jerry có thể tạo một đường dẫn mã của mình và gửi cho Tom. Sau đó, anh ta có thể áp dụng bản vá nhận được cho mã của mình.

Jerry sử dụng Git format-patchlệnh để tạo bản vá cho cam kết mới nhất. Nếu bạn muốn tạo một bản vá cho một cam kết cụ thể, hãy sử dụngCOMMIT_ID bằng 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 .patchcác tệp bên trong thư mục làm việc hiện tại. Tom có ​​thể sử dụng bản vá này để sửa đổi các tệp của mình. Git cung cấp hai lệnh để áp dụng các bản vágit amgit apply, tương ứng. Git apply sửa đổi các tệp cục bộ mà không tạo cam kết, trong khi git am sửa đổi tệp và tạo cam kết.

Để áp dụng bản vá và tạo cam kết, hãy 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

Bản vá được áp dụng thành công, bây giờ chúng tôi có thể xem các sửa đổi bằng cách sử dụng git diff chỉ huy.

[tom@CentOS src]$ git diff

Lệnh trên sẽ cho 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)
   {