에 다음을 추가하십시오 .gitconfig.
anw = !git diff -U0 -w --no-color -- \"$@\" | git apply --cached --ignore-whitespace --unidiff-zero "#"
영감 을 주신 @Colin Herbert의 답변 에 감사드립니다 .
구문 설명
마지막은 #이 내부 주석으로 처리하지 그래서 인용해야 .gitconfig하지만, 대신 통해 전달되는 쉘 내부에 주석으로 처리됩니다 - 그것은 말 사이에 삽입 git apply하고 사용자가 제공 한 인수가 git상기 자동 장소 명령 행의 끝. 이러한 주장은 여기서 원하지 않습니다 – 우리는 git apply그것들을 사용하고 싶지 않기 때문에 앞의 주석 문자입니다. 이 명령을 실행하여이 명령을 실행할 수 있습니다 GIT_TRACE=1 git anw.
--신호는 인수의 종료 및 명명 된 파일이있는 경우에 허용 -w거나 스위치처럼 보이는 무언가를 git diff.
$@사용자가 제공 한 인용 인수를 유지하려면 이스케이프 된 큰 따옴표 가 필요합니다. 경우 "문자가 탈출하지 않습니다, 그것은에 의해 소비 될 것이다 .gitconfig파서와 쉘에 도달하지.
참고 : .gitconfig별칭 구문 분석 아무것도 특별 같은 작은 따옴표를 인식하지 못합니다 - 유일한 특수 문자는 ", \, \n, 및 ;(A 외부 "-quoted 문자열). 이것이 "작은 따옴표로 묶인 문자열 안에있는 것처럼 보이더라도 항상 탈출 해야하는 이유입니다 (git은 완전히 무의식적입니다).
예를 들어 이것은 중요합니다. bash작업 트리의 루트에서 명령 을 실행하기에 편리한 별칭이있는 경우 잘못된 공식은 다음과 같습니다.
sh = !bash -c '"$@"' -
올바른 것은 다음과 같습니다.
sh = !bash -c '\"$@\"' -
git apply --ignore-whitespace다른 방법으로 패치를 적용해야했습니다.