2012-05-28 9 views
6

제 질문은 제목으로 선언 된 것보다 더 일반적입니다.개정 관리 시스템이 수정본을 복원하는 방법은 무엇입니까?

소스 버전 컨트롤은 차이점에 대한 정보 만 저장한다는 것을 알고 있습니다. 나는 Wikipedia도 그렇게 이해하고 있으므로 github도 마찬가지입니다.

하지만 모두 특정 수정 버전으로 전체 파일을 표시 할 수 있습니다. 처음 개정에서 특정 개정으로 증분 복원합니까?

그리고 또 하나의 질문입니다. 차이점 만 저장하는 경우 컨텍스트 (변경 전후의 작은 텍스트)를 사용하여 UI에 표시하는 방법.

편집 : GitHub의 매장 전체 스냅 샷 대신 델타

답변

6

난 단지 차이점에 대한 해당 소스의 버전 관리 정보를 저장 알고있다. 질문 Git design decision on storing content rather than differences이 있듯이

이 정확히 힘내 무엇을없습니다.
LibXDiff 라이브러리의 바이너리 델타를 사용하여 개체를 델타 형식으로 저장하기 위해 "압축 된"형식을 사용합니다. 하지만 주로 네트워크 전송에 사용됩니다.
"Is the git binary diff algorithm (delta storage) standardized?"을 참조하십시오.
그래서 가져올 때 git는 "resolving delta"입니다.

4

버전 제어 데이터를 저장하는 여러 가지 방법의 장단점에 대한 매우 흥미로운 내용은 Eric Sink의 기사 Time and Space Tradeoffs in Version Control Storage을 읽는 것이 좋습니다.

스토리지는 버전 제어 시스템에서 가장 어려운 문제 중 하나입니다. 모든 파일에 대해 이있는 모든 버전을 저장해야합니다. 버전 제어 저장소의 논리 크기가 결코 으로 줄어 듭니다. 계속해서 성장하고 성장하고 있으며 이전 버전 인 모든 을 사용할 수 있어야합니다.

그래서 모든 버전을 저장하는 가장 좋은 방법은 무엇입니까?

3

위키 백과, 슬프게도 ... 어떤 형태의 XML (?) 문서도 텍스트로 유지합니다.

wikipedia database schema을 살펴보십시오. 특히 최근 변경 사항 및 텍스트

따라서 "생물학"페이지의 첫 번째 사본에 멋진 O (1) 조회가 있습니다. 이것은 wikipedia의 technology cost을 2010-2011 년 8 백만 달러 달러에서 2011-2012 년 12 백만 달러로 급상승하게하는 불행한 부작용이 있습니다. 이것은 HDDs (및 그 외 모든 것)가 더 비싸지 않고, 더 비싸지는 않을지라도입니다.

모든 파일을 유지 보수하는 개정판입니다. 힘내는 귀여운 접근 방식을 취한다. Is the git storage model wasteful?을 참조하십시오.

위의 방법과 유사하게 모든 파일을 저장합니다. repo가 ​​차지하는 공간이 일정한 제한을 초과하면 무차별 재 포장을합니다 (얼마나 힘들게 설정 할지를 선택할 수 있습니다 --window = [N], - 깊이 = [N]).델타와 무손실 압축을 조합하여 재 포장 (recursively delta) 한 다음 비트가있는 부분에 무손실을 적용합니다.

SVN과 같은 다른 프로그램은 간단한 델타 압축을 사용합니다. (당신이 신뢰하면 안되는 기억에서).

각주 : 델타 압축은 증분 변경 사항을 저장합니다. 무손실 압축은 zip, rar 등과 거의 같습니다.

관련 문제