공백 충돌없이 병합


179

수천 줄의 코드가 바뀌어 줄 끝에서 공백을 제거하고 탭 앞의 공백을 제거하는 커밋이있는 문제가 있습니다.

이 프로젝트에 대한 약 50 개의 풀 요청이 있으며, 커밋이 병합 될 때 충돌이 발생합니다. 미래 커밋을 병합 할 때 그중 하나가 공백으로 바뀌는 충돌을 무시하도록 git을 설정할 수있는 방법이 있습니까?

자식 자체를 수정하거나 타사 도구를 사용하는 것은 불가능하지만 후크를 사용하는 것이 좋습니다.


의 가능한 중복 자식 공백 비애
시스 Timmerman

답변:


246
 git merge -Xignore-all-space

또는 (보다 정확한)

 git merge -Xignore-space-change

병합 중 모든 공간 관련 충돌을 무시하기에 충분해야합니다.

git diff 참조하십시오 :

--ignore-space-change

공백 양의 변화를 무시하십시오.
이것은 줄 끝의 공백을 무시하고 하나 이상의 공백 문자의 다른 모든 시퀀스를 동등한 것으로 간주합니다.

--ignore-all-space

행을 비교할 때 공백을 무시하십시오.
한 줄에 공백이 있고 다른 줄에는없는 경우에도 차이를 무시합니다.

ks1322 의견에 좋은 조언을 추가합니다.

--no-commit실제 커밋 전에 병합 을 병합 하고 검토하는 것이 좋습니다.


OP 칼럼 맥레이는 이 경우, 병합은 중단없이 진행하고, 풀 요청 패치에 포함 된 후행 공백은 로컬 파일에 적용됩니다, 그것을보고합니다.
그러나, OP는 상기 후미 공간을 처리하는 사전 커밋 후크를 사용한다.
( 이것 과 비슷한 것으로 가정하고 여기 에서도 참조하십시오 ).


OP의 사전 커밋 후크는 다음과 같습니다.

후행 공백을 제거하는 것 외에도 탭 앞의 1 ~ 3 개의 공백을 제거하고 (탭 너비가 4로 설정 됨) EOL을 추가합니다.
EOL을 추가하는 코드가 창에서 파일을 삭제하지만 복제 할 수는 없다는보고가있었습니다.


1
지금까지의 테스트에서 파일의 모든 공백 변경 사항을 제거하는 것처럼 보입니다. 그러나 이제는 커밋 사전 후크를 사용하여 꼬리 공백을 제거하므로 문제가되지 않습니다.
callumacrae

1
@CallumMacrae : 알겠습니다. 의견을 보내 주셔서 감사합니다. 다시 한 번 더 가시성을 높이기 위해 답변에 링크를 추가했습니다.
VonC

1
git merge -Xignore-space-change- 글쎄, 나는 확실히이 말할 수있는 작동하지 않았다 ... . 제거하려고 한 공백이 남아 있습니다. 힘내는 절대 짜증나.
jww

1
--no-commit실제 커밋 전에 병합 을 병합 하고 검토하는 것이 좋습니다.
ks1322

1
-Xignore-모든 공간은 자식에 의해 옵션으로 인식되지 않았습니다 공백 및 --ignore 공간 변화에 대해 아무것도하지 않는 것 같습니다
Preza8
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.