developer tip

git diff의 / a / b 접두사에 대한 이유는 무엇입니까

copycodes 2020. 12. 30. 08:17
반응형

git diff의 / a / b 접두사에 대한 이유는 무엇입니까


나는 몇 년 동안 git을 사용해 왔으며 왜 git diff가 수정 된 파일의 이름 앞에 a /와 b /를 붙이는 지 궁금했습니다. 결국 유용한 사용 사례를 우연히 발견 할 것으로 예상했지만 지금까지는 항상 성 가시고 도움이되지 않았습니다.

무엇에 좋은가요? 이것이 기본적으로 활성화되는 이유는 무엇입니까? 어떤 상황에서 유용합니까?


diff 매뉴얼 페이지 에서 언급했듯이 a / et b /는 소스와 대상을 구분하는 접두사를 나타냅니다.

실제로 다음과 같은 옵션이 있습니다.

--no-prefix

소스 또는 대상 접두어를 표시하지 마십시오.

--src-prefix=<prefix>

"a /"대신 제공된 소스 접두사를 표시합니다.

--dst-prefix=<prefix>

"b /"대신 지정된 대상 접두사를 표시합니다.


유용하지 않은 경우 다음을 사용하여 끌 수 있습니다.

git config --global diff.noprefix true

이러한 디렉토리 접두사는 기본적으로 호환성을 위해 존재하며 합리적인 기본값으로 선택됩니다. 설명은 다음과 같습니다.

git 이전

git (및 기타 VCS ) 이전 에는 여러 파일에 대한 패치를 만드는 워크 플로가 예를 들어 다음과 같을 수 있습니다.

  • asdf디렉토리에 프로젝트의 소스 코드가 있다고 가정 해 보겠습니다 asdf-source.latest.
  • 당신은 (예 : 새로운 디렉토리에 복사 asdf-source.new이상적으로, 하드 링크 내부의 파일).
  • 이제에서 모든 변경을 수행 asdf-source.new하고 코드를 컴파일하고 테스트하는 등의 작업을 수행 할 수 있습니다.
  • 완료되면 eg를 사용하여 패치를 만듭니다 diff -r asdf-source.latest asdf-source.new >new_feature.patch. 출력도 시간이 지남에 따라 진화했습니다. 다른 것들과는 별도로, git은 기본적으로 "통합"출력을 사용하며, diff의 -u매개 변수를 사용하여 얻을 수 있습니다 .

이제 패치에 디렉토리 이름을 사용하여 변경된 파일에 대한 경로가 있음을 알 수 있습니다.

당신의 패치를 적용 (등 또는 빌드 스크립트) 사람은 사용 patch사용하는 대신 git applygit am. 명령이 적절한 파일을 찾으려면 patch의 -pN옵션을 사용하여 경로에서 디렉토리 이름을 제거해야합니다 (N은 제거 할 디렉토리 이름 및 구분 기호 수를 나타냄). 위의 경우 사용 된 명령은 patch -p1 <new_feature.patch. 이것은 패치 작성자가 자신의 디렉토리 이름을 사용할 수 있도록합니다.

많은 패치를 사용하여 일부 프로젝트를 패치하는 스크립트 ( 예 : Linux 배포판의 안정적인 패키지 버전에 대해 일반적으로 백 포트 된 패치에 사용됨 )를 발견 한 경우 패치 형식이 다를 수 있습니다. patch명령은 이러한 형식을 올바르게 감지 할 수 있지만 경로 (제거 할 디렉토리 수)를 사용하면 약간 더 어렵습니다. 그와 관련된 몇 가지 문제 :

  • 개발자가 0 디렉토리를 사용하도록 강요하는 것은 그리 좋지 않습니다.
  • patch파일 찾는 것은 위험 할 수 있습니다 (다른 파일을 찾을 수 있으므로).

따라서 모두에게 적용 할 수있는 패치를 보내는 patch -p1것이 가장 현명한 방법 인 것 같습니다.

git로 돌아 가기

git이 생성되었을 때 이러한 옵션에 대해 합리적인 기본값 (대부분의 프로젝트 제출 지침, 주로 커널과 호환 됨)을 채택했습니다. 덕분에 git을 사용 patch하고이를 적용하는 데 사용 하는 사람에게 적절한 형식의 패치를 보낼 수 있으며 그 반대의 경우도 마찬가지입니다 (git은 diff생성 된 패치도 처리 할 수 ​​있음 ). 특히 "a"와 "b"를 접두사로 사용하면 모든 작업을 유지하면서 공간 (및 약간의 대역폭)을 절약 할 수 있습니다.

git config diff.mnemonicprefix true비교 대상에 따라 git이 다른 접두사를 사용하도록 설정할 수 있습니다 (자세한 내용 git help config은 참조).


출발지와 목적지를 구별하는 것입니다. 더 의미있게 변경할 수도 있습니다.

--src- 접두사 =<prefix>

Show the given source prefix instead of "a/".

--dst-prefix =<prefix>

Show the given destination prefix instead of "b/".

http://git-scm.com/docs/git-diff


추가 할 경우 git diff --no-prefix귀하가 .gitconfig 수동으로 그냥 다음을 추가 :

[diff]
noprefix = true

참조 URL : https://stackoverflow.com/questions/6764953/what-is-the-reason-for-the-ab-prefixes-of-git-diff

반응형