2010-01-29 6 views
2

우리는 우리에게 훌륭한 Mercurial 워크 플로우를 만들었습니다. 그러나 나는 궁금한 점이 있습니다 : 기본적으로 모든 사용자가 항상 자신의 변경 집합을 "푸시"할 수있는 "정크"저장소를 만드는 것이 가능하고 "푸시 -f" ?"push -f"/ 백업 전용 Mercurial 저장소가 추가로 필요합니까?

즉 : 해당 저장소의 목표는 이 아니며은 통합/병합/제거해야합니다. 사실 이 아니고은 우리 워크 플로우의 일부가됩니다. 정말로 "모든 변경 세트를 백업하는 장소"가 될 것입니다.

우리가 변경 세트를 검색하는 유일한 순간은 사용자가 하드 디스크 크래시 또는 도난을 당했고 변경 사항을 그가 "hypetethic"changeset backup "repo에"push "했지만 저장소에 저장하지 않았을 때입니다 (실제로는 항상 액세스 할 수있는 "확인되지 않은"정크 저장소를 항상 사용 가능하게 유지하는 것이 매우 쉬울 것이라는 사실 중 하나가 될 수 있습니다).

"push -f"로 3 명의 사용자와 테스트를했는데 이제는 다음과 같이 보입니다. (작업 디렉토리의 부모는 changeset 0에서 맨 아래에 있고 은 영원히 유지됩니다) 거기에) :

$ hg glo | grep -v user: | grep -v date 
o changeset: 3:4337a665659f 
| tag:   tip 
| parent:  0:ab3e3171d569 
| summary:  1st change by user B 
| 
| o changeset: 2:2349e3eed60d 
|/ parent:  0:ab3e3171d569 
| summary:  1st change by user C 
| 
| o changeset: 1:10405f5e0994 
|/ summary:  1st change by user A 
| 
@ changeset: 0:ab3e3171d569 
    summary:  Init 

사용자가 다른 저장소에서 가져 오기를 시작하거나 작업을 병합 한 후에도 계속 작동합니까?

다른 말로하면 병합 문제를 해결하는 것이 중요하지 않으며 "push -f"와 새 머리 만들기가 매우 환영받을 곳이며 작업 디렉토리의 부모가 인 경우 항상은 " 변경 집합 0 ". "changesets backup"폴더 (예 : 실제 워크 플로우에서는 아직 통합되지 않은 변경 집합을 백업하는 경우) 역할을하는 것이 유일한 목표입니다.

이 방법이 효과가 있습니까?

답변

2

예 (이 문제는 덜 흥미로운하지 것이 이해가 안 노트, 다른 사람들은 이해가되지 이유를 찾을 다음 바로이 작업을 수행 할 수 있고), 그것은 잘 작동합니다. 당신의 '쓰레기'저장소는 단지 많은 머리로 끝날 것입니다.

hg pull -r을 사용하면 정크 리포지토리에서 특정 변경 집합 (및 모든 조상)을 검색 할 수 있으므로 모든 걸림쇠를 병합하지 않아도되므로 걱정할 필요가 없습니다.

이제는 변경 세트가 무엇인지, 그리고 잃어버린 것을 복원하기 위해 끌어 내기를 원하는지 추적하는 것이 더 어려운 질문입니다. 당신은 나무를 볼 수는 있지만, 그 나무는 많은 머리를 가지고 복잡하고 끈적해질 것입니다. 물론 할 수 있습니다. 단지 사소한 것은 아닙니다.

변경 집합이 푸시 된 위치와 푸시 된 위치에서 로그를 유지하기 위해 일부 후크를 사용하면 상황을 복구 할 때 원하는 위치를 찾는 데 도움이됩니다.

+0

그리고 이것은 일반적인 관행입니까? 이 워크 플로우를 사용할 때 백업을 쉽게 만들 수 없다는 불만을 목격했습니다. 그런 생각이 어떤 목적을위한 것이라고 생각하십니까? (나에게 유용하게 보이지만 어디서나 묘사 된 것을 본 적이 없으므로 궁금합니다.) – SyntaxT3rr0r

+0

@OldEnthusiast : 일종의 일이지만, 일반적인 관행이라고 생각하지 않습니다. 그리고, 글쎄, 나는 그것이 잘 될 것이라고 생각하고 그것이 더 잘 작동하도록하기 위해해야 ​​할 일을 생각했다. 나는 그것이 나쁜 생각이라고 생각하지 않는다. 비록 당신이 그 저장소에 많은 뻔뻔 스러움으로 끝날 것이라고 생각 하긴하지만. – Omnifarious

+0

비슷한 일을 생각하고 있습니다. 내 생각은 모든 개발자 repos와 중앙 repo가 ​​백업 repo에 밀어 것이었다. 특정 업무가 중단되었거나 중앙 repo로 피드백되지 않았거나 개발자가 중앙 repo로 전송하기 전에 자신의 로컬 커밋을 붕괴하기로 결정한 경우에만 죽은 머리를 기대할 수 있습니다. 내 예상 복원 워크 플로우는 중앙 repo를 복제 한 다음 백업에서 필요한 것을 가져 오는 것입니다. 너 어떻게 시작 했니? – morechilli

1

백업 방법의 유용성은 복원 기능을 통해서만 측정 할 수 있습니다. 이 경우, 효율적인 복원 경로가 있다고 생각하지 않습니다.

워크 플로를 이미 사용하고 있기 때문에 이것이 답이 아니라면 사과 하겠지만 백업을 처리하는 또 다른 방법은 각 개발자가 (아마도 백업 된) 서버로 복사 한 다음 해당 복제본을 가져옵니다. 그런 다음 필요에 따라 서버에서 '자신의'복제본으로 돌아가서 변경 사항을 주 저장소에만 승격시킵니다.

이렇게하면 중앙 서버에서 변경 집합을 가져오고 각 개발자의 변경 집합을 격리 할 때 복원을 더 간단하게 만듭니다.

다른 옵션은 로컬 개발자의 PC를위한 별도의 백업 프로세스입니다. 아마도 무언가 자동화 된 배경과 Carbonite 같은 것일까?

희망이 도움이됩니다.