에 다음을 추가하십시오 .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
다른 방법으로 패치를 적용해야했습니다.