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.