Windows의 Git Shell: 패치의 기본 문자 인코딩은 UCS-2 리틀 엔디안입니다. BOM 없이 ANSI 또는 UTF-8로 변경하는 방법은 무엇입니까?
Windows에서 Git Shell로 디프 패치를 생성하는 경우(Windows용 GitHub 사용 시), Notepad++에 따라 패치의 문자 인코딩은 UCS-2 Little Endian이 됩니다(아래 스크린샷 참조).
이 동작을 변경하고 BOM 문자 인코딩 없이 ANSI 또는 UTF-8로 패치를 생성하도록 git을 강제하는 방법은 무엇입니까?
UCS-2 Little Endian 인코딩 패치를 적용할 수 없기 때문에 문제가 발생합니다. 수동으로 ANSI로 변환해야 합니다.그렇지 않으면 "fatal: 인식할 수 없는 입력" 오류가 발생합니다.
로 저는 윈도우 Windows 포맷)에서.\r\n
( ) UNIX ( )\n
Notepad> > 를 메모장++(편집 > EOL 변환 > UNIX)에 표시합니다.그렇지 않으면 "공백 영역 추적" 오류가 발생합니다(모든 공백이 트리밍된 경우에도 "TextFX" > "TextFX 편집" > "Trim Trailing Spaces").
패치를 적용하려면 다음 단계를 수행해야 합니다.
- 패치 생성(결과는 다음과 같습니다)
- 문자 인코딩을 ANSI로 변환
- UNIX 형식으로 EOL 변환
- 패치를 적용합니다.
다음 스크린샷을 보십시오.
저는 Windows 사용자가 아니기 때문에 제 대답을 쉽게 받아들이십시오.윈도우즈 PowerShell Cookbook에 따르면 PowerShell은 다음의 출력을 사전 처리합니다.git diff
그것을 줄로 쪼개는 것.Cmdlet에 대한 문서는 다음과 같이 제안합니다.>
는 와동합다니와 .| Out-File
매개 변수 없이.PowerShell 설명서에서도 다음과 같은 의견을 확인할 수 있습니다.
기존 출력 리디렉션에 익숙한 경우 Out-File cmdlet을 사용한 결과가 예상과 다를 수 있습니다.이 동작을 이해하려면 Out-File cmdlet이 작동하는 컨텍스트를 알고 있어야 합니다.
기본적으로 Out-File cmdlet은 유니코드 파일을 생성합니다.이는 장기적으로는 최상의 기본값이지만 ASCII 파일이 필요한 도구가 기본 출력 형식에서 제대로 작동하지 않는다는 것을 의미합니다.인코딩 매개 변수를 사용하여 기본 출력 형식을 ASCII로 변경할 수 있습니다.
[...]
아웃파일 형식 파일 내용을 콘솔 출력 형식으로 지정합니다.따라서 대부분의 경우 콘솔 창에서와 마찬가지로 출력이 잘립니다. [...]
화면 너비와 일치하도록 줄 바꿈을 강제 적용하지 않는 출력을 가져오려면 너비 매개 변수를 사용하여 줄 너비를 지정할 수 있습니다.
문자 인코딩을 선택한 것은 Git이 아닌 것 같습니다.Out-File
이는 a) PowerShell 리디렉션을 텍스트에만 사용해야 한다는 것을 의미하며 b)
| Out-File -encoding ASCII -Width 2147483647 my.patch
인코딩 문제를 방지합니다.그러나 이것은 여전히 Windows와 관련된 문제를 해결하지 못합니다.Unix 줄 끝.줄 끝 부분을 변환할 수 있는 Cmdlet(PowerShell Community Extensions 참조)이 있습니다.
그러나 이 모든 기록이 패치(인코딩 자체는 없고 바이트 문자열에 불과함)에 대한 신뢰도를 높이지는 않습니다.위의 Cookbook에는 수정되지 않은 명령 출력을 리디렉션하는 스크립트 Invoke-BinaryProcess가 포함되어 있습니다.
이 모든 문제를 회피하기 위한 대안은 다음과 같습니다.git format-patch
대신에git diff
.format-patch
파일에 직접 쓰기(stdout이 아님)하므로 출력이 기록되지 않습니다.그러나 임의의 차이가 아닌 커밋에서만 패치를 생성할 수 있습니다.
format-patch
커밋 범위를 사용합니다(예:master^10..master^5
) 또는 단일 커밋(예: X, 즉 X..HEAD)를 사용하여 NNNN-Subject.patch 형식의 패치 파일을 생성합니다. 여기서 NNN은 4자리 숫자가 증가하고 주체는 패치의 (맹그된) 주체입니다.출력 디렉터리는 다음을 사용하여 지정할 수 있습니다.-o
.
파워셸을 사용하면 다음 작업도 수행할 수 있습니다.
cmd /c "git diff > patch.diff"
이렇게 하면 명령이 CMD를 통해 실행되어 출력 파일에 그대로 기록됩니다.
PowerShell 대신 good old Command Prompt를 사용하면 문자 인코딩 및 EOL과 관련하여 PowerShell에 존재하는 문제가 전혀 발생하지 않습니다.
파워셸에서 생성된 diff에서 dos2unix를 하는 것은 저에게 효과가 있는 것 같습니다.그때 나는 할 수 있었습니다.apply
성공적으로 디프
dos2unix.exe diff_file
git apply diff_file
- diffs의 Iconv 출력
- 일반 7비트 패치(순수 영어)의 경우 비정상적인 메모장++ 탐지를 무시할 수 있습니다. 패치 콘텐츠에 문자 집합 정의가 포함되어 있지 않습니다.
Lars Noschinski가 언급했듯이 당신은 출력을 수정해야 합니다.Out-File
다음 명령을 사용하여 Out-File의 기본 매개 변수를 설정할 수 있습니다.
$PSDefaultParameterValues['Out-File:Encoding'] = 'ASCII'
$PSDefaultParameterValues['Out-File:Width'] = '2147483647'
한 후 Default 파터후는을 할 수 .>
패치 파일을 내보냅니다.
그 두 줄을 내 프로필 파일에 추가한 후 모든 것이 예상대로 작동합니다.
λ git stash show -p > test3
C:\Users\..\Source\.. [master +1 ~0 -0 !]
λ git apply test3
C:\Users\..\Source\.. [master +1 ~2 -0 !]
언급URL : https://stackoverflow.com/questions/13675782/git-shell-in-windows-patchs-default-character-encoding-is-ucs-2-little-endian
'programing' 카테고리의 다른 글
JQuery로 CTRL+S를 캡처하는 최고의 크로스 브라우저 방법은 무엇입니까? (0) | 2023.08.08 |
---|---|
/res 디렉토리와 /asset 디렉토리 간의 차이 (0) | 2023.08.08 |
열 주석이 있는 Oracle 테이블 생성 (0) | 2023.07.29 |
UI 텍스트 필드에서 텍스트 들여쓰기 (0) | 2023.07.29 |
요소에 jQuery를 사용하는 CSS 클래스가 있는지 확인합니다. (0) | 2023.07.29 |