поиск содержания svn по хешу - PullRequest
       0

поиск содержания svn по хешу

2 голосов
/ 27 сентября 2011

Содержимое в хранилище svn однозначно идентифицируется с помощью двух частей информации:

  • путь к хранилищу
  • номер редакции

Я ищу способ восстановить эту информацию из сообщения фиксированной длины (скажем, 8 или 16 байтов). Недостаточно идентифицировать контент в репозитории из нашего сообщения фиксированной длины, просто сохранив номер ревизии. Путь переменной длины и не может поместиться в сообщении.

Однако мне было интересно, можно ли получить доступ к парам svn путь + ревизия с помощью хеша, например, как это делает Git. Есть ли механизм для этого уже встроен в SVN?

Было бы достаточно, если бы только путь был доступен по хешу, тогда я мог бы независимо хранить номер редакции в сообщении фиксированной длины.

Должен ли я хранить внешнюю базу данных используемых путей и их хэшей, или SVN предоставляет быстрый способ перечисления всех путей, существующих во всех ревизиях, которые я могу запрашивать по требованию?


Редактировать: Это практически тот же вопрос, но безрезультатно: SVN: перевод между идентификаторами пути и узла?

1 Ответ

3 голосов
/ 28 сентября 2011

SVN не хранит файлы, он хранит файловые системы.Таким образом, ревизия используется для доступа к правильной ревизии файловой системы, а затем часть пути используется для доступа к рассматриваемому файлу.

Внутренние SVN-версии ревизий с их собственными соответствующими идентификаторами узлов,Однако такой «прямой доступ к inode» обычно не поддерживается, поскольку в inode отсутствует определенная информация, которая обычно необходима (например, имя файла, владелец, группа, разрешения и т. Д.).

Git надругая рука хранит файлы, поэтому имеет смысл найти лучший идентификатор файла, чем имя файла (которое может остаться неизменным для нескольких ревизий файла), поэтому Git использует хэш содержимого файла.Ориентированный на файл, он нередко извлекает файл, используя его идентификатор (хэш).

К сожалению, нет эквивалента извлечения файловой системы с помощью хэша, потому что входные данные хэша должны основываться на содержимом inode для каждой версии inode.Это будет означать способ хэширования содержимого дерева, что будет возможно.Такая система обеспечит быстрый доступ к определенной исторической версии inode.

Вероятно, главная причина, по которой это не было сделано таким образом, заключается в том, что быстрый клиентский доступ к inode не является большой проблемой в SVN.,У сервера SVN уже есть указатели и структура данных для доступа к inode на стороне сервера, и он знает файловую систему удаленного хранилища, передаваемую клиентом.Это позволяет SVN передавать различия в файловых системах клиенту (а не полную копию файловой системы).Без необходимости постоянно извлекать полные файловые системы быстрый доступ к полному извлечению файловой системы не является приоритетом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...