2011-09-27 2 views
2

콘텐츠 SVN의 컨텐츠를 찾고 :해시에 의해 유일하게 두 가지 정보를 사용하여 식별되는 SVN 저장소에서

  • 저장소 경로
  • 개정 번호

나는 복구 할 수있는 방법을 찾고 있어요 고정 길이 메시지 (예 : 8 또는 16 바이트)에서 해당 정보. 개정 번호를 저장하여 고정 길이 메시지에서 저장소의 내용을 식별하는 것으로는 충분하지 않습니다. 경로는 가변 길이이며 메시지에 맞지 않습니다.

그러나 svn path + revision 쌍이 해트 (hash)로 액세스 할 수 있는지 궁금합니다. 이것에 대한 메커니즘이 이미 svn에 내장되어 있습니까?

경로 만 해시로 액세스 할 수 있다면 고정 길이 메시지에 수정 버전 번호를 독립적으로 저장할 수 있습니다.

사용 된 경로와 해당 해시의 외부 데이터베이스를 유지해야합니까, 아니면 필요시 쿼리 할 수있는 모든 버전에 SVN이 모든 경로를 빠르게 나열 할 수 있습니까?


편집 :이 실질적으로 같은 질문이지만, 결정적이다 : SVN: translation between path and node ids?

답변

3

SVN 파일을 저장하지 않습니다, 그것은 파일 시스템에 저장합니다. 따라서 수정본을 사용하여 파일 시스템의 올바른 개정판에 액세스 한 다음 경로의 일부를 사용하여 해당 파일에 액세스합니다.

내부적으로 각각의 노드 ID를 가진 inode의 SVN 개정 아이 노드. 그러나 inode에는 일반적으로 필요한 특정 정보 (예 : 파일 이름, 소유자, 그룹, 사용 권한 등)가 없기 때문에 이러한 "inode에 직접 액세스"액세스는 일반적으로 지원되지 않습니다.

힘내 다른 한편으로는 파일을 저장하기 때문에 파일 이름보다 나은 파일 ID (파일의 여러 개정에 대해 동일하게 유지 될 수 있음)를 찾는 것이 좋습니다. 그래서 힘내는 파일 내용의 해시를 사용합니다. 파일 지향이기 때문에 id (해시)를 사용하여 파일을 가져 오는 것이 일반적입니다.

불행히도, 해시의 입력은 inode 버전의 버전마다 inode의 내용을 기반으로해야하기 때문에 해시로 파일 시스템을 가져 오는 것과 동일한 것은 아닙니다. 그것은 가능한 트리의 내용을 해싱하는 방법을 의미합니다. 이러한 시스템은 특정 역사 버전의 아이 노드에 대한 빠른 액세스를 제공합니다.

아마도 이런 식으로하지 않은 주된 이유는 빠른 클라이언트 액세스가 SVN에서별로 중요하지 않다는 것입니다. SVN 서버는 이미 서버 측에서 inode에 액세스하기위한 포인터와 데이터 구조를 가지고 있으며 클라이언트가 전송 한 원격 저장소의 파일 시스템에 대한 지식을 가지고 있습니다. 이것은 SVN이 파일 시스템의 차이점을 (파일 시스템의 전체 사본이 아닌) 클라이언트로 전송할 수있게합니다. 지속적으로 전체 파일 시스템을 가져올 필요없이 전체 파일 시스템 풀에 대한 빠른 경로 액세스는 우선 순위가 아닙니다.

관련 문제