programing

공백 충돌 없이 병합

magicmemo 2023. 6. 25. 18:37
반응형

공백 충돌 없이 병합

저는 문제가 있습니다. 약 천 줄의 코드를 변경하는 큰 커밋이 줄의 끝에서 공백을 제거하고 탭 앞의 공백을 제거하는 것입니다.

또한 이 프로젝트에는 약 50개의 끌어오기 요청이 있으며, 제 커밋이 병합되면 모든 요청이 충돌하게 됩니다.향후 커밋을 병합할 때 하나가 공백 변경인 충돌을 무시하도록 깃을 설정할 수 있는 방법이 있습니까?

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

 git merge -Xignore-all-space

또는 (더 정확하게)

 git merge -Xignore-space-change

병합하는 동안 모든 공간 관련 충돌을 무시하기에 충분합니다.

Git diff 참조:

--ignore-space-change

공백 크기의 변경 사항을 무시합니다.
이렇게 하면 줄 끝의 공백이 무시되고 하나 이상의 공백 문자의 다른 모든 시퀀스가 동일한 것으로 간주됩니다.

--ignore-all-space

선을 비교할 때 공백은 무시합니다.
이렇게 하면 한 줄에는 공백이 있고 다른 줄에는 공백이 없는 경우에도 차이가 무시됩니다.

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

실제 커밋하기 전에 병합하고 병합을 검토할 가치가 있습니다.


OP Callum Macrae는 이 경우 병합이 중단되지 않고 진행되며 풀 요청 패치에 포함된 후행 공간이 로컬 파일에 적용된다고 보고합니다.
그러나 OP는 해당 후행 공간을 처리하는 사전 커밋 후크를 사용합니다.
(여기도 참조된, 이것과 약간 비슷할 것 같습니다.)


OP의 사전 커밋 후크는 다음과 같이 참조됩니다.

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

병합할 때 공백 문제가 많이 발생하면 이를 중단하고 다시 수행하면 됩니다. 이번에는 -Xignore-all-space 또는 -Xignore-space-change를 사용합니다.첫 번째 옵션은 선을 비교할 때 공백을 완전히 무시하고, 두 번째 옵션은 하나 이상의 공백 문자 시퀀스를 동등하게 처리합니다.

나는 관련된 충돌을 병합하기 위해 meld를 사용하는 것을 좋아하고 아래에 다양한 필터 옵션을 설정하는 옵션이 있습니다.Meld>Preferences>TextFilters.

언급URL : https://stackoverflow.com/questions/9776527/merging-without-whitespace-conflicts

반응형