[version-control] Mercurial (hg)은 특정 파일 만 커밋합니다.

Mercurial에서 특정 파일 만 커밋하려고합니다. 변경 사항을 커밋하려고 할 때마다 자동 추가 기능이있는 hg 때문에 모든 파일을 커밋하려고합니다. 그러나 특정 파일이 아직 “준비”되지 않았기 때문에 원하지 않습니다.

있다

hg commit -I thefile.foo

그러나 이것은 하나의 파일에만 해당됩니다. 나에게 더 좋은 방법은 Git에서와 같이 자동 추가를 끌 수 있다면 것입니다. 이게 가능해?



답변

tonfa는 다음과 같이 명령 줄에서 파일을 지정할 수 있습니다.

$ hg commit foo.c foo.h dir/

그게 효과가 있고 그게 제가 항상하는 일입니다. --include찾은 플래그를 사용할 수도 있으며 다음 과 같이 여러 번 사용할 수 있습니다.

$ hg commit -I foo.c -I "**/*.h"

당신은 심지어 사용할 수 있습니다 파일 세트 를 하여 커밋 할 파일 을 선택할 수도 있습니다.

$ hg commit "set:size(1k - 1MB) and not binary()"

자동 추가 동작을 끄고 Mercurial이 Git처럼 작동하도록하는 설정은 없습니다. 그러나 mq 확장 이 중요 할 수 있습니다. 이것은 고급 확장이지만 할 수 있습니다.

$ hg qnew feature-x     # create new patch
$ hg qrefresh -s foo.c  # add a file to the current patch
$ hg qrefresh -s bar.c  # add another file to the patch
$ hg qfinish -a         # convert applied patches to normal changesets

하지만 명령 줄에 파일 이름을 지정하는 것만으로도 충분하다고 생각하기 때문에이 목적으로 MQ를 실제로 사용하지는 않습니다.


답변

몇 개의 파일을 커밋하고 다른 많은 파일을 제외하려면 커밋 할 파일을 명시 적으로 나열합니다. -I파일 대신 패턴을 사용하려는 경우에만 필요합니다.

많은 파일을 커밋하고 몇 개의 파일 만 제외하려면 -X 것이 더 편리합니다.

예를 들어 “file_1”, “file_2″및 “file_3″을 포함하는 저장소가 주어지면 다음은 동일하지만 후자는 입력하기가 더 쉽고 빠릅니다.

hg commit file_1 file_2
hg commit -X file_3


답변

3.8 부터는hg commit --interactive 파일을 선택하는 데 사용할 수도 있습니다 (3.8 이전 에는 유사한 기능을 위해 crecord 확장자 를 사용할 수 있습니다 ). --interactive(또는 -i) 플래그를 사용하면 커밋에 포함 할 파일을 요청하는 HG의 원인이됩니다. 추가 보너스로 파일 내에 청크를 포함 / 제외 할 수도 있습니다.

다음은 인터페이스의 예입니다. 이것은 (실제로 crecord의) 오래된 스크린 샷이므로 인터페이스가 약간 변경되었습니다 (하지만 기본은 동일합니다).
crecord 스크린 샷

해당 인터페이스를 얻으려면 curses 인터페이스를 활성화해야합니다. 단일 실행에 대해 hg commit --config ui.interface=curses --interactive또는 일반적으로 다음을 추가하여 수행 할 수 있습니다 .hgrc.

[ui]
interface = curses


답변