답변:
나는 당신이 원한다고 생각합니다 hg revert -r<rev> <file>
(이것은 주어진 개정판에서 그 파일을 바꿀 것입니다).
djc가 말했듯 revert
이 이전 개정과 일치하도록 파일을 변경합니다. 제자리에 있지 않으려면 원하는 위치 hg cat -r revisionid filename
로 리디렉션하는 데 적합한 파일을 stdout으로 출력하는 (물론 revisionid 및 파일 이름 대체) 사용할 수 있습니다 .
hg revert
실제로이 문제를 해결합니다. 그러나 나는 당신이 단순히 질문에 대한 대답보다 더 넓은 범위에 대해 혼란스럽고 더 충분히 대답하려고 노력하고 있다고 생각합니다.
hg update
전체 저장소 명령이며 개별 파일에서 작동하지 않습니다. svn update
이런 식으로 전복과는 다릅니다 . hg --help update
그러면 명령이 파일 인수를 사용하지 않기 때문에 이것이 사실임을 알 수 있습니다. 전체 저장소를 특정 스냅 샷으로 이동하는 데 사용할 수 있지만 하나의 파일에만 사용할 수는 없습니다.
입력 hg --help
하면 명령 목록이 표시됩니다. 상당히 크고 다소 어려운 목록이지만, 읽어 보면 다음 줄을 찾을 수 있습니다.
revert restore individual files or directories to an earlier state
이제 비교 목적으로 마지막 상태 만 원하는 경우 관심이있을 수있는 또 다른 명령이 있습니다 hg cat
. 그러면 특정 개정판에서 파일의 내용을 인쇄 할 수 있습니다. 그런 다음 출력을 다른 파일로 리디렉션 할 수 있습니다. 그런 다음 이전에 알려진 양호한 버전의 파일과 이전 버전을 나란히 비교할 수 있습니다.
Mercurial이 별도의 update
명령을 가지고있는 이유 는 Subversion에서는 불가능한 것을 Mercurial에서 할 수 있기 때문입니다. 당신은 할 수 있습니다 update
이전 버전으로, 변경 후 커밋합니다. 그러면 분기가 생성됩니다. 이 update
명령은 현재 작업 디렉토리의 상위 개정판을 변경하고 해당 디렉토리의 모든 파일 내용을 해당 상위 개정판의 버전으로 변경하는 효과도 있습니다.
즉 revert
, 파일의 내용 (또는 명령에 올바른 인수를 제공하는 경우 전체 저장소)을 변경하지만 현재 작업 복사본의 상위 개정은 그대로 둡니다.
hg parents
명령 을 사용하여 현재 작업 복사본의 상위 개정 (또는 병합의 경우 개정)을 찾을 수 있습니다 .
Subversion에서 수정은 엄격하게 선형으로 진행됩니다. Mercurial은 모자 한 방울에서 가지를 만들고 거의 병합하기 쉽습니다. 개정은 엄격한 선형 진행이 아닌 DAG를 형성합니다.
특정 파일의 특정 개정판을 추출하려면 Windows에서 다음을 수행 할 수 있습니다.
hg cat "<FileToBeExtractedPath>" -r 9 > "<ExtractionPath>"
여기서 9는 개정 번호입니다.
또는 더 나은 :
hg cat "<FileToBeExtractedPath>" -r 9 -o "<ExtractionPath>"