Mercurial에서 파일의 특정 버전을 얻는 방법은 무엇입니까?


114

저는 Mercurial을 처음 사용합니다. 올바른 명령을 찾을 수 없습니다. 운없이 업데이트 / 체크 아웃을 시도했습니다. 로컬 저장소를 사용하고 있습니다. 감사


@Omnifarious : 안정적인 버전의 파일을 커밋했습니다. 그런 다음 파일 작업을 계속했지만 곧 마지막 "좋은"버전이 필요하다는 것을 깨달았습니다. 이것은 SVN에서 업데이트를 수행하지만 HG 업데이트를하려고 할 때, 그것은 "0 파일 ..."라고 할 수 있습니다
— Codism

답변:


153

나는 당신이 원한다고 생각합니다 hg revert -r<rev> <file>(이것은 주어진 개정판에서 그 파일을 바꿀 것입니다).


네, 정확히 그가 원하는 것입니다. :-)
— Omnifarious

9
아니면 그냥 HG 되돌리기 <파일 이름> 당신은 당신의 현재 변경 사항을 취소하고, 최선을 다하고 있다는 최신 얻으려면
— BlackTigerX

@BlackTigerX 개정판이 없으면 수정되지 않은 파일은 가장 최근에 커밋 된 버전이 아니더라도 아무것도 되 돌리지 않습니다. 나는 때때로 이것을 수정 사이에 파일을 '체리 선택'하는 데 사용하므로 중요합니다.
— user2864740

83

djc가 말했듯 revert이 이전 개정과 일치하도록 파일을 변경합니다. 제자리에 있지 않으려면 원하는 위치 hg cat -r revisionid filename로 리디렉션하는 데 적합한 파일을 stdout으로 출력하는 (물론 revisionid 및 파일 이름 대체) 사용할 수 있습니다 .


4
내가 바랬던 그대로.
— yota 2015 년

굉장합니다. 그런 말을 듣는 것은 항상 좋습니다.
— Ry4an Brase

24

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를 형성합니다.


13

특정 파일의 특정 개정판을 추출하려면 Windows에서 다음을 수행 할 수 있습니다.

hg cat "<FileToBeExtractedPath>" -r 9 > "<ExtractionPath>"

여기서 9는 개정 번호입니다.

또는 더 나은 :

hg cat "<FileToBeExtractedPath>" -r 9 -o "<ExtractionPath>"

1

이전 버전을 얻으려고 여기에 왔으므로 정확한 명령은 다음과 같습니다.

hg revert -r .~1 <file>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.