Git - Patch عملیات



Patch یک فایل متنی است که اطلاعاتی شبیهgit diff را دربر دارد، اما علاوه بر کدها, meta data شامل commit e.g. commit ID تاریخ، پیغام commit و ... را دربر دارد. ما میتوانیم برای commit ها patch ایجاد کنیم و دیگران هم آنها را روی انبارهایشان اعمال کنند.

Jerry تابع strcat را به پروژهشان اضافه میکند Jerry یکpatch از کدش ایجاد کرده و آن را برایTom میفرستد. بنابراین او میتواند تغییرات را از patch دریافتی روی کدش اعمال کند

Jerry دستور git format patch برای ایجاد patch روی آخرینcommit استفاده میکند. اگر میخواهیم برای یک commit خاص patch ایجاد کنیم از COMMIT ID استفاده میکنیم

[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

دستور بالا یک patch. فایل در داخل working directory ایجاد میکند. Tom میتواند از این patch استفاده کند تا فایلهایش را دستکاری کند. Git از دو دستور برای اعمال تغییرات در patch ها استفاده میکند, git am, git apply Git apply بدون ایجاد commit تغییرات را اعمال میکند و git am فایلها را دستکاری کرده و commit هم ایجاد میکند

برای اعمال کردن patch و ایجاد commit از دستور زیر استفاده میکنیم:

[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 با موفقیت تغییرات را اعمال کرد، حالا ما با دستور git diff میتوانیم تغییرات را ببینیم:

[tom@CentOS src]$ git diff

دستورات بالا نتایج زیر را در برخواهند داشت:

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