로컬에서 수은으로 유지하려는 사소한 변경 사항을 어떻게 관리합니까?


9

14 살짜리 이력서 저장소 (역사 그대로)를 수은으로 마이그레이션하는 것을 고려하고 있습니다. 기술 변환 비트가 모두 다운 된 것으로 생각되지만 여전히 수은에서 효과적으로 작업하는 방법에 대한 몇 가지 질문이 있습니다.

개별 개발자의 cvs 샌드 박스 (내 자신을 포함하여)에서 많이 볼 수있는 것 중 하나는 커밋되지 않은 로컬 커밋 변경 사항입니다. 내 이해는 이것이 나쁜 것입니다. hg에 대한 나의 실험의 대부분은 커밋되지 않은 변경이 나쁜 것이라고 제안합니다. 그것들과 병합 할 수 없다면 충분합니다. 그래서 내가 알고 싶은 것은 일상적인 코딩에서 수은을 사용하는 다른 사람들이 어떻게 그것을 처리하는지입니다. 리포지토리를 업데이트 할 때 코드의 불완전한 변경을 어떻게 처리합니까? 다른 개발자와 공유하고 싶지 않은 로컬 변경 사항은 어떻게 처리합니까?

답변:


5

나는 이런 식으로 처리합니다.

로컬 리포지토리에서 실험 중이더라도 모든 변경 사항을 커밋합니다. 실험에 문제가없고 테스트를 마치면 원격 저장소로 푸시합니다. 그렇지 않은 경우 로컬 리포지토리에 유지되거나 이전 버전으로 돌아갑니다.

아이디어는 원격 저장소에 테스트되고 작동하는 내 프로젝트 버전 만 포함한다는 것입니다.


3
원격 저장소가 "마지막 커밋의 수정 된 버그"유형 커밋으로 인해 복잡해 집니까?
nmichaels

4

내가 추가 할 몇 가지가 있습니다.

하나는 TortoiseHg 와 함께 표준으로 제공되는 shelve를 신중하게 사용하는 워크 플로우를 제안하는 것입니다 .

현재 작업 디렉토리의 일부를 커밋하고 싶을 때마다 커밋하지 않으려는 변경 사항을 보류하고 다시 컴파일하여 (컴파일이 깨지는 비트를 선반에 넣지 않았는지 확인) 테스트를 실행합니다. . 그런 다음 전체 작업 및 테스트 세트를 커밋합니다. 마지막으로 변경 사항을 복원하기 위해 unshelve를 실행합니다.

좀 더 영구적으로 변경 한 경우 개발 시스템의 구성 파일이 프로덕션 서버가 아닌 항상 로컬 호스트 포트 3333을 가리 키도록하려면 MercurialTortoiseHg 와 함께 제공되는 Mercurial Queues 확장을 사용하는 것이 좋습니다. .


4

커밋되지 않은 변경은 본질적으로 나쁜 것이라고 생각하지 않습니다. "파일과 병합 할 수 없음"을 참조하십시오. 일부 파일에 커밋되지 않은 변경 사항이 있고 해당 파일의 변경 사항을 가져 와서 업데이트하면 Mercurial은 마치 커밋 한 것처럼 병합 프로세스를 시작한 다음 요청합니다. 합병. 다른 의미였습니까?

따라서 다른 개발자와 공유하고 싶지 않은 로컬 변경의 경우 두 가지 접근 방식이 있습니다. 첫 번째는 변경 사항을 작업 사본에 유지하지만 밀어 넣지 말고, 다른 하나는 작업 사본에서 변경 사항을 제쳐 두는 것입니다. 선택하는 것은 작업 할 때 이러한 변경 사항을 사용할지 여부에 따라 다릅니다.

변경 사항을 작업 복사본에 보관하면 들어오는 변경 사항이 제대로 작동하므로 나가는 변경 사항을 만들지 않아도되므로 커밋하지 않아도됩니다. 파일이 새 파일이면 간단 hg add합니다. 하지 마십시오 . 이미 추적 된 경우을 사용하여 커밋에서 제외 할 수 있습니다 hg commit --exclude foo.txt. 제외 할 파일이 많거나 많은 커밋에서 제외시킬 경우 (예 : 로컬 구성 파일을 영구적으로 변경하는 경우) 제외 확장자를 확인하십시오 .

변경 사항을 제쳐 놓을 준비가 된 경우 다른 옵션 세트가 있습니다. 가장 간단한 방법은 hg diff파일 을 사용 하여 파일을 설명하는 패치를 생성하는 것입니다.이 패치는 안전한 곳에 보관 한 다음 hg patch --no-commit변경 사항을 다시 원할 때 해당 패치를 다시 적용하는 것입니다. 선반 확장 장치 , 다락방 확장 장치 또는 기타 친척 을 설치하여이 작업을 더 매끄럽게 만들 수 있습니다 . queues extension을 사용할 수도 있지만 슬레지 해머를 사용하여 너트를 깨고 있습니다. 변경 사항을 커밋 한 다음 부모로 다시 업데이트하고 거기에서 다른 작업을 커밋하여 변경 사항을 익명의 익명 브랜치에 남겨 hg commit -m 'temporary branch' && hg up $(hg log -r 'parents(.)' --template '{node}')두십시오 (수동으로 수행하는 것이 더 쉬울 수도 있음). 그러면 해당 변경 세트를 푸시하지 않도록주의해야합니다.


3

개발 스트림을 분리하기 위해 두 가지 기본 접근법이 사용됩니다.

  • 명명 된 지점. 아이디어는 자신의 브랜치 인 nmichaels_branch_of_awesome에서 작업한다는 것입니다. 그렇게하면 다른 사람들의 일을 잃지 않고 변경 사항을 적용 할 수 있습니다. 그런 다음 작업이 필요할 때 다른 사람과 합병하고 기능을 사용할 시간이되면보다 안정적인 통합 지점으로 넘어갑니다. 나는 지명 된 가지를 선호합니다.

  • 익명 클론. 샌드 박스를위한 별도의 리포지토리가 생성됩니다. 여기서 당신은 당신이 원하는 것을 얻을 때까지 놀고, 아마도 (아마) 커밋을 위해 MQ 패치를 수행하고 시작한 곳으로 넘어갑니다. 디렉토리 관리 및 잠재적으로 MQ 작업이 필요하기 때문에이 방법을 좋아하지 않습니다. 그리고 약간의 repos로, 그들은 이것을 위해 조금 커지기 시작할 수 있습니다 . 즉, 이것은 킬른 개발자들이 선호하는 것 같습니다.


통합 비트를 수행하는 사람이있는 것처럼 들립니다. 사람들이 즉시 배워야 할 새로운 것들의 목록에 mq를 추가하는 것은 거부되었지만, 나는 지명 된 브랜치에 대한 나의 초기 혐오에 대해 생각할 것입니다. 제대로 설립되지 않았을 수 있습니다.
nmichaels

두 번째 글 머리 기호로 복제, 작업 및 완료시에만 푸시하지 않는 이유는 무엇입니까? MQ는 여기에서 복잡해
보인다

@ TheLQ : 그것도 작동하지만 기본 저장소에서 직접 복제하는 것과 다르지 않습니다. MQ는 커밋을 하나의 커밋으로 스쿼시합니다.
Paul Nathan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.