문제
Mercurial을 사용한 커밋에서 일부 파일의 변경 사항을 무시할 수 있는 방법이 있습니까?
127.0.0.1을 가리키는 기본 oracle tnsnames.ora 파일이 있지만 일부 개발자는 다른 시스템을 가리키도록 수정하지만 기본 파일을 변경하고 싶지 않은 특정 상황이 있습니다.
Subversion에서는 이것을 커밋 시 무시 변경 목록에 간단히 추가했습니다.수은에서 이것을 수행하는 방법이 있습니까?
해결책
"HG Commit"명령에서 생략하려는 파일이 이미 "추적 된"경우 -X 옵션을 사용해야합니다. -X로 전달 된 패턴은 매우 유연하여 예를 들어 실행할 수 있습니다.
% hg stat
A etc/foo.conf
M src/bar.c
M lib/libbar/loader.c
% hg commit -X '**.conf'
소스 트리의 깊이에 관계없이 ".conf"확장자가있는 파일을 커밋하지 않도록합니다. 위에 표시된 작업 공간에서 이것은 "src/bar.c"와 "lib/libbar/loader.c"이지만 "etc/foo.conf"를 커밋합니다.
여러 파일 이름을 제외하려면 다중 -X 옵션을 사용하십시오.
% hg commit -X '**.conf' -X '**.sh'
다른 팁
전통적으로 이 문제는 파일 자체의 버전을 관리하는 것이 아니라 다른 사람이 사용할 수 있도록 파일 사본의 버전을 템플릿으로 관리하여 해결되었습니다.
그래서 당신은 hg mv tnsnames.ora tnsnames.ora-template
, 커밋한 다음 tnsnames.ora-template의 파일 시스템 복사본을 tnsnames.ora에 직접 복사하고 tnsnames.ora를 .hgignore 파일에 추가합니다.
템플릿에 대한 후속 변경 사항은 여전히 푸시되지만 누군가 템플릿을 실제 파일에 복사하지 않는 한 작업 환경은 실제로 변경되지 않습니다.
당신은 'HG Commit -x Excluded_file.ext'와 같은 것에 대한 별명을 할 수 있습니다. 나는 Mercurial을 사용한 적이 없으므로 여기에 Man Page로 가고 있습니다.
Mercurial의 문서에서 .hgignore 파일을 찾으십시오.
다음은 파일을 무시합니다.
# use glob syntax.
syntax: glob
*.elc
*.pyc
*~
# switch to regexp syntax.
syntax: regexp
^\.pc/