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 apply
나 git 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
'developer tip' 카테고리의 다른 글
Django에 내장 로그인 템플릿이 있습니까? (0) | 2020.12.30 |
---|---|
많은 양의 테스트 데이터로 데이터베이스 테이블 채우기 (0) | 2020.12.30 |
WebKit : CSS 스케일 + translate3d로 흐릿한 텍스트 (0) | 2020.12.30 |
R의 do-while 루프 (0) | 2020.12.29 |
웹 인터페이스를 통해 리전간에 Amazon EC2 AMI를 이동합니까? (0) | 2020.12.29 |