sourcecode

Git 버전 제어의 패치란 무엇입니까?

copyscript 2023. 7. 3. 23:06
반응형

Git 버전 제어의 패치란 무엇입니까?

저는 Git과 버전 관리 모두 처음이라 패치가 무엇인지 알아보고 있으며 Git에서 수행하는 다른 활동과 어떻게 다릅니까?

언제 패치를 적용해야 합니까?제가 약속할 때마다 그런 일이 있나요?

블로그 게시물에서 패치(전달하고 다른 레포에 적용할 변경사항 모음)를 만드는 방법을 확인할 수 있습니다.

git patch
(Jan AERTS가 발행한 2008년 블로그 게시물 "Bioruby with git: 그것이 어떻게 작동할까요?"의 사진)

다른 구체적인 예로 Git을 사용한 레일에 기여를 참조하십시오.

오늘날 GitHub 풀 요청을 사용하면 GitHub 저장소에 패치를 적용하는 것이 매우 쉬워집니다. 이는 직접 기여자가 아닐 때 유용합니다(즉, 저장소에 직접 푸시할 권한이 없습니다).
사실, 최근 GitHub은 새로운 패치의 알림을 개선하기 위해 "Better Pull Request Emails"를 도입했습니다.

패치는 패치 파일이라고 하는 별도의 파일에 포함된 지침에 따라 텍스트 파일을 업데이트하는 유닉스 프로그램입니다.

즉, 명령어가 포함된 파일이나 파일을 처리하여 어떤 것에 적용하는 프로그램을 의미할 수 있습니다.

이제 패치 파일이란 무엇입니까?두 줄로 된 텍스트 파일이 있다고 가정해 보겠습니다.

This is line A.
This is line B, or otherwise #2.

그런 다음 첫 번째 줄을 변경하면 파일이 다음과 같이 표시됩니다.

This is SPARTA.
This is line B, or otherwise #2.

파일 내용의 변경을 어떻게 설명하시겠습니까?첫 번째 줄 "This is line A."가 "This is SPARTA."로 바뀌거나, 첫 번째 줄의 마지막 단어 "A"가 다른 단어 "SPARTA"로 바뀌었다고 할 수 있습니다.그리고 그것이 바로 diff가 우리에게 말해주는 것입니다.이 파일의 두 가지 버전이 있다고 가정해 보겠습니다. 하나는 file1입니다.txt 및 다른 하나의 파일2.txt, 그리고 나서 나는 diff를 실행하고 이것을 얻습니다.

$ diff -u file1.txt file2.txt 
--- file1.txt   2011-11-26 11:07:03.131010360 -0500
+++ file2.txt   2011-11-26 11:07:13.171010362 -0500
@@ -1,2 +1,2 @@
-This is line A.
+This is SPARTA.
 This is line B, or otherwise #2.

변경사항에 대한 설명이 있으면 초기 내용에 적용하여 수정된 내용을 얻을 수 있습니다.그리고 "패치"와 같은 프로그램이 이해할 수 있는 통합된 형식으로 저장된 이러한 변경사항을 패치 파일이라고 합니다.마치 물고기를 잡는 법을 가르쳐주는 사람에게 물고기를 얻는 대신에, 여러분이 직접 그 물고기를 물 밖으로 파낼 수 있도록 하는 것과 같습니다.이제 file1에 패치를 적용해 보겠습니다.txt를 사용하여 파일2와 똑같이 만듭니다.txt:

$ cat file1.txt 
This is line A.
This is line B, or otherwise #2.
$ cat file2.txt 
This is SPARTA.
This is line B, or otherwise #2.
$ diff -u file1.txt file2.txt > changes.patch
$ cat changes.patch 
--- file1.txt   2011-11-26 11:09:38.651010370 -0500
+++ file2.txt   2011-11-26 11:07:13.171010362 -0500
@@ -1,2 +1,2 @@
-This is line A.
+This is SPARTA.
 This is line B, or otherwise #2.
$ patch < changes.patch 
patching file file1.txt
$ cat file1.txt 
This is SPARTA.
This is line B, or otherwise #2.
$ 

이 파일의 두 가지 버전을 사용하는 것이 더 쉽다고 생각할 수 있습니다.자, 이 간단한 경우에는 사실입니다.그러나 파일이 많고 파일 크기가 큰 경우 전체 복사본 2개보다는 몇 줄의 변경사항을 저장하는 것이 훨씬 효율적입니다.

git로 말할 때, 패치 파일은 여전히 같은 의미이지만, diff + 패치를 직접 사용하는 것은 악몽일 것입니다.예를 들어 파일의 두 버전(또는 전체 리포지토리)을 비교하려면 항상 체크아웃해야 합니다.별로 좋지 않은 것 같군요, 그렇죠?Sogit는 로컬 파일을 현재 작업 중인 저장소에 있는 파일과 비교하여 "diff"로 표시하거나 "diff"를 패치로 적용하거나 이미 보유한 패치 파일을 적용할 수도 있습니다.세부적으로 깊이 들어가지 않고, 이런 의미에서 Git는 SVN, 심지어 CVS 또는 퍼포스와 같은 다른 버전 제어 시스템과 완전히 동일합니다.

도움이 되길 바랍니다!

패치는 저장소의 변경 내용을 나타내는 작은 파일입니다.일반적으로 팀 외부의 다른 사용자가 읽기 전용 액세스 권한을 가지고 있지만 코드 변경이 가능한 경우에 사용됩니다.그런 다음 패치를 생성하여 사용자에게 보냅니다.당신은 그것을 적용하고 git 저장소에 밀어넣습니다.그러면 모든 사용자가 업데이트된 버전의 이점을 누릴 수 있으며 패치 작성자는 읽기/쓰기 액세스 권한이 필요하지 않습니다.

그것은 실제로 주로 보안 문제입니다(적어도 사람들이 그것을 사용하는 것입니다).

패치 파일은 모든 분기에 적용할 수 있는 단일 변경 사항 집합을 나타냅니다.패치를 사용하면 하나 이상의 파일 간에 차이가 발생합니다.나중에 차이(패치)를 적용하여 새 파일의 변경 사항을 가져올 수 있습니다.Git에는 패치의 용도가 많습니다.작업 디렉터리에서 변경 사항을 커밋하지 않은 경우 해당 변경 사항을 다른 곳에 적용하려면 패치를 생성하고 패치를 적용하십시오.

git diff > mypatch.patch

리포지토리에 새 파일이 있으면(추적되지 않음) 패치를 만들기 전에 파일을 준비하고(커밋하지 않음) 다음 명령을 사용해야 합니다.

git diff --cached > mypatch.patch 

나중에 패치를 적용할 수 있습니다.

git apply mypatch.patch

쓰기 권한이 없는 Git 저장소를 일부 변경하려면 변경하고 둘 사이에 패치를 생성한 다음 패치를 적용할 권한을 가진 사용자에게 패치를 전송하면 변경 내용이 Git 저장소에 추가됩니다.

패치는 하나 이상의 파일 간의 차이점 집합으로, 파일 간의 차이점을 보여줍니다.일반적으로 다른 사용자에게 변경된 내용을 보여주는 패치만 생성합니다.오픈 소스 응용 프로그램에서 버그를 찾아 수정한 다음 버그 추적기에 수정 사항을 게시하는 경우를 예로 들 수 있습니다.

언급URL : https://stackoverflow.com/questions/8279602/what-is-a-patch-in-git-version-control

반응형