Git-패치 작업

Patch는 내용이 Git diff와 유사한 텍스트 파일이지만 코드와 함께 커밋에 대한 메타 데이터도 포함합니다. 예 : 커밋 ID, 날짜, 커밋 메시지 등. 커밋에서 패치를 만들 수 있으며 다른 사람들이이를 저장소에 적용 할 수 있습니다.

Jerry는 자신의 프로젝트를 위해 strcat 함수를 구현합니다. Jerry는 자신의 코드 경로를 만들어 Tom에게 보낼 수 있습니다. 그런 다음받은 패치를 자신의 코드에 적용 할 수 있습니다.

Jerry는 Git을 사용합니다. format-patch명령을 사용하여 최신 커밋에 대한 패치를 만듭니다. 특정 커밋에 대한 패치를 생성하려면 다음을 사용하십시오.COMMIT_ID 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

위의 명령은 .patch현재 작업 디렉토리 내의 파일. Tom은이 패치를 사용하여 파일을 수정할 수 있습니다. Git은 패치를 적용하는 두 가지 명령을 제공합니다.git amgit apply, 각각. Git apply 커밋을 생성하지 않고 로컬 파일을 수정하는 반면 git am 파일을 수정하고 커밋도 생성합니다.

패치를 적용하고 커밋을 생성하려면 다음 명령을 사용하십시오.

[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

패치가 성공적으로 적용되었으므로 이제 다음을 사용하여 수정 사항을 볼 수 있습니다. 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)
   {