Mercurial의 사례에 민감한 파일 이름 처리
-
04-07-2019 - |
문제
Vista64에서 Tortoisehg 0.5 (Mercurial 1.0.2 포함)를 사용하고 있습니다. 내 이해 수은 책 Mercurial은 사례에 민감한 파일 시스템 (예 : 내가 켜져있는 NTFS 등)에서 파일 이름을 대사하는 방식으로 처리해야한다는 것입니다. 그러나 수은의 설치는 실제로 사례에 민감하다는 것을 알았습니다.
>hg status -A foo
C foo
>hg status -A FOO
? FOO
이것은 Mercurial의 버그, Mercurial의 Tortoisehg 빌드의 버그 일 수 있습니까, 아니면 다른 것입니까? Windows의 Mercurial에서 케이스 감수성 파일 이름 처리를 어떻게 달성 할 수 있습니까?
해결책
이 문제는 Mercurial 1.1에서 해결되었습니다! 로부터 릴리즈 노트: "케이스 폴딩 파일 시스템에 직면 한 정확성 향상".
Windows에서 Mercurial은 이제 명령 줄 인수에서 사건을 무시합니다.
>hg status -A foo
C foo
>hg status -A FOO
C foo
또한 사례 만 포함되는 파일 이름 변경은 새로운 파일이 아니라는 것을 알고 있습니다.
>ren foo FOO
>hg status -A fOO
C foo
따라서 더 이상 명령 줄의 안개로 인해 변경 사항을 간과 할 위험이 없습니다.
그러나 .hgignore 파일의 내용은 사례에 민감하게 유지됩니다. 글로벌 구문을 사용하는 경우에만 문제가됩니다. regexp 구문을 사용하면 패턴의 시작 부분에 (? i) 둔감하게 만들 수 있습니다.
다른 팁
나는 당신이 hgbook을 잘못 읽었다고 생각합니다. 섹션 7.7에 대한 소개는 오스에 존재하는 세 가지 유형의 사례 민감도를 설명하는 것입니다.
7.7.2 절의 나중에 '사례 충돌 감지'는 다음과 같습니다.
Working Directory에서 작동 할 때 Mercurial은 작업 디렉토리가있는 파일 시스템의 이름 지정 정책을 수여합니다. 파일 시스템이 사례 보존이지만 둔감 한 경우, Mercurial은 경우에만 다른 이름을 다루게됩니다.
당신이 할 때 hg status -A FOO
Mercurial 내에서 일어나는 과정은 다음과 같습니다.
- 파일 인수 'foo'와 일치하는 파일 시스템에 파일이 있는지 확인하십시오.
- 파일 인수 'foo'와 일치하는 파일에 항목이 있는지 확인하십시오. HG가 추적하지 않는 디스크의 파일이라고
NTF의 사례를 돌보지 않는 Mercurial을 더 잘 보려면 다음 단계를 시도하십시오.
- HG init
- 에코 라인> foo
- hg add foo
- HG Commit -M 'Commited Foo'
- foo not-foo를 움직입니다
- Foo Foo를 움직입니다
- HG 상태
그리고 당신은 HG가 아무것도 바뀌지 않았다고 말하는 것을보아야합니다.
Linux에서 똑같은 일을 할 때 대신 다음을 볼 수 있습니다.
! Foo
? FOO