Sistema de arquivos do tipo UnionFS para Windows

12

Estou procurando por algo que funcione como o UnionFS no Windows 7. Meu caso de usuário: ter um diretório de trabalho de código limpo em um diretório somente leitura e compilá-lo em um sistema de arquivos union que armazenaria binários compilados logicamente no mesmo lugar, mas fisicamente em diretório diferente.

As bibliotecas não funcionam dessa maneira, mesmo que tenham sido aceitas como resposta no UnionFS da mesma forma no Windows, praticamente mesclam pastas - elas mostram apenas diretórios de nível superior em um só lugar.

O código em si é enorme (2 GB de dados) e eu gostaria de evitar copiá-lo para todas as compilações no meu servidor de compilação.

liori
fonte
Ah, opa. : - / Estou tentando resolver exatamente o mesmo problema e não li com bastante atenção. Eu vou excluir meu comentário. Não tenho praticamente nenhuma familiaridade com a plataforma Windows. : - /
Omnifarious

Respostas:

2

Você poderia usar links simbólicos para fingir isso? http://en.wikipedia.org/wiki/NTFS_symbolic_link Não está respondendo à pergunta exata, mas acho que resolverá o caso de uso que você forneceu.

MikeBaz - MSFT
fonte
Não vejo como isso poderia ... você poderia explicar?
liori 7/09/10
Eu não sei como a sua árvore de construção está estruturada, mas supondo que seja algo como src, src / bin, src / obj, então você pode ter bin e obj como links simbólicos para onde quiser que o código esteja. Apenas verifique se a sua compilação não está excluindo completamente essas pastas. Como alternativa, src é o link simbólico para "somente leitura" e, em seguida, os links na leitura somente retornam. De qualquer maneira, você deve conseguir fazer isso funcionar. A menos que eu esteja perdendo completamente o seu cenário.
MikeBaz - MSFT
Eu não controlo o procedimento de compilação e ele pode escrever em qualquer lugar.
liori 7/09/10
@ liori: para este caso de uso, você pode reproduzir os diretórios e criar links simbólicos para cada arquivo (algo como cd SOURCE; find -type d -exec sh -c 'cd BUILDDIR && mkdir "$@"' _ {} +; find -type f -exec sh -c 'mklink "$1" "BUILDDIR/$1"' _ {} \;ou equivalente ao Windows).
Gilles 'SO- stop be evil'
@Gilles: Você me faz pensar copiar não é tão ruim solução ... (além disso, você poderia fazê-lo em uma resposta?)
Liori
2

Você pode fazer uma união de pobres com links simbólicos: reproduza a estrutura de diretórios da fonte, mas faça links (simbólicos ou físicos) para os arquivos. Isso deve ser adequado ao seu objetivo, desde que o sistema de compilação não tente modificar os arquivos de origem.

Com o GNU cp, é tão fácil quanto cp -alou cp -as. Mas não sei se existe uma porta de ferramentas GNU que entenda os links do Windows.

Se você precisar chamar o comando mklink, isso pode ser feito com as ferramentas POSIX (aviso digitado diretamente no navegador):

cd SOURCE
find -type d -exec sh -c 'cd BUILDDIR && mkdir "$@"' _ {} +
find -type f -exec sh -c 'mklink "$1" "BUILDDIR/$1"' _ {} \;

Suponho que exista uma maneira nativa do Windows envolvendo o Powershell, mas não tenho ideia de como ele é. Talvez valha a pena investigar se sua árvore de diretórios é grande e se seus discos são rápidos, porque a bifurcação no Windows tende a ser lenta e os comandos acima precisam ser muito complicados.

Gilles 'SO- parar de ser mau'
fonte
A maneira nativa seria algo como for /R %BUILDDIR% %F in (*.*) do @junction X:%pnxF %F, usando a junctionferramenta sysinternals.
precisa saber é o seguinte
Os links simbólicos do @MSalters agora são nativos do Windows. E junções NTFS não são a mesma coisa.
Nick Whaley
@NickWhaley: De fato, junções são essencialmente links físicos.
MSalters
1

Encontrei isso, mas realmente não sei como funciona:

Omniforme
fonte
Os projetos arquivados no Google Code não são mantidos. Você pode querer procurar uma versão atualizada em algum lugar. Possivelmente um garfo.
Robert Wm Ruedisueli