Após 8 anos de pesquisa , encontrei o SVNFS de Marco R. Gazzetta (que é diferente do projeto antigo com o mesmo nome de John Madden [que faz coisas diferentes]). Este SVNFS usa svn de forma transparente em operações r / w:
Em vez de criar um sistema de arquivos que possui seu próprio controle de versão, usei uma ferramenta de controle de versão existente, o subversion, e tornei seu uso transparente. A vantagem é que este sistema de arquivos não exige que você aprenda uma nova ferramenta, se você conhece o subversion
Está escrito em Python e usa o FUSE:
Agora você inicia o sistema de arquivos de versão chamando o script anexado:
python svnfs.py -o svnroot=/home/marco/svnfiles /home/marco/myfiles
Quando tudo estiver bem, você poderá obter uma lista dos dois diretórios e verificar se o conteúdo é o mesmo.
Agora, se você criar (quase) qualquer arquivo em qualquer diretório, ele também aparecerá no outro lado da cerca. A grande diferença é que, se você criar um arquivo no diretório myfiles, ele será automaticamente colocado sob controle de versão (o oposto não é verdadeiro).
No exemplo, o SVNFS usa um diretório separado para o repositório. Embora eu não tenha testado. Para minhas necessidades, eu gostaria de ter um repositório direto no meu diretório de trabalho.
Também encontrei referência aos recursos de versão do Reiser4 há 4 anos:
Consulte Reiser 4. Os arquivos são diretórios.
por exemplo: diff -u main.C main.C/r/123
Ou para acessar propriedades
cat main.C/p/svn-eolstyle
echo "foobar" > main.C/p/my-property
Parece que seria melhor seguir esse modelo, pois um grande sistema de arquivos já está seguindo esse caminho.
-Paul Querna
Mas eu também não verifiquei.
Há dois anos, procurei mais, encontrei o projeto FiST para gerar sistemas de arquivos empilháveis e entrei em contato com o prof. Erez Zadok, da Universidade Stony Brook, que foi consultor / mentor do projeto chamado versionfs há muito tempo. Citação:
http://www.fsl.cs.sunysb.edu/docs/versionfs-fast04/
http://www.fsl.cs.sunysb.edu/docs/versionfs-msthesis/versionfs.pdf
permite que os usuários gerenciem suas próprias versões com facilidade e eficiência. O Versionfs fornece essa funcionalidade com no máximo 4% de sobrecarga para cargas de trabalho típicas do usuário. Versionfs permite que os usuários selecionem quais versões são mantidas e como elas são armazenadas por meio de políticas de retenção e políticas de armazenamento, respectivamente. Os usuários podem selecionar a troca entre espaço e desempenho que melhor atenda às suas necessidades individuais: cópias completas, cópias compactadas ou deltas de bloco. Embora os usuários possam controlar suas versões, o administrador pode aplicar valores mínimos e máximos e fornecer aos usuários padrões adequados.
Além disso, através do uso de libversionfs, aplicativos não modificados podem examinar, manipular e recuperar versões. Os usuários podem simplesmente executar ferramentas familiares para acessar versões de arquivos anteriores, em vez de exigir que os usuários aprendam comandos separados ou solicitar ao administrador do sistema que remonte um sistema de arquivos. Sem a libversionfs, as versões anteriores são completamente ocultas dos usuários.
Finalmente, o Versionfs vai além da simples cópia na gravação empregada pelos sistemas anteriores: implementamos a cópia na alteração. Embora inicialmente esperássemos que a comparação entre páginas antigas e novas fosse muito cara, descobrimos que o aumento no tempo do sistema é mais do que compensado pelo tempo reduzido de E / S e CPU associado à gravação de blocos inalterados. Quando políticas de armazenamento mais caras são usadas (por exemplo, compactação), a cópia na alteração é ainda mais útil.
Pareceu-me muito interessante, mas entrar em contato com os caras que trabalharam no projeto revelou que threre não é um lugar conhecido do seu código-fonte. O próprio professor declarou no correio:
O código do Versionfs é muito antigo agora e só funcionou no kernel 2.4. Se você ainda deseja um controle de versão empilhável f / s, seria necessário escrevê-lo do zero - possivelmente com base no wrapfs (consulte wrapfs.filesystems.org/).
Portanto, não há nenhum projeto em funcionamento aqui, embora o conceito de sistema de arquivos empilhável me pareça muito agradável. Alguém gostaria de iniciar o projeto com base em wrapfs , avise-me, por favor :)