Eu passei um dia inteiro resolvendo esse problema e estou realmente desesperado agora.
O Windows 10 é minha máquina principal, e dentro dela, eu executo uma máquina virtual Debian que eu uso como uma pilha web Linux completa. A VM do Linux executa um servidor SVN, que funciona bem. Na minha máquina Windows 10 (unidade local), posso fazer o checkout e confirmar. Eu faço isso com o único usuário que eu configurei no SVN.
Esse não é o meu caso de uso. O que eu quero é usar o meu Windows IDE para manipular diretamente os arquivos no servidor Linux. Eu acesso os arquivos através de um mapeamento de rede.
Instalei o SAMBA na VM do Linux para tornar isso possível. E isso em si também funciona. Eu posso acessar o mapeamento de rede e ter controle total sobre todos os arquivos nele. A configuração da autorização é simples: tenho um grupo @fileadmins ao qual adicionei meu usuário pessoal, root e www-data (para o Apache). Para manter essa situação simples, no entanto, por enquanto estou fazendo tudo sob a conta do root.
Agora, para a parte final: gosto de colocar cópias de trabalho nessa unidade de rede. Desta forma, posso manipular diretamente os arquivos, bem como fazer commits, sem problemas, do Windows usando o TortoiseSVN. Eu sei que este cenário não é recomendado, mas note que eu sou o único usuário, e esta é uma configuração muito eficiente. Eu tenho feito isso para projetos pessoais por muitos anos, em servidores anteriores.
Por algum motivo, não consigo fazê-lo funcionar desta vez. Aqui está o erro que estou recebendo, por exemplo, ao fazer uma primeira verificação de um repos:
Can't move 'W:\jd5.svn\tmp\svn-5FDD2730' to
'W:\jd5.svn\pristine5e98e0088e20d84a5dfaaee60a22f73658439a.svn-base':
Access is denied.
De pessoas com problemas semelhantes, aprendi que o TortoiseSVN está criando esses arquivos específicos do SVN rapidamente com um conjunto específico de permissões muito limitadas, ou seja, como somente leitura, e com permissões limitadas de arquivos do Linux.
Quase todas as respostas, portanto, se concentram em configurar o Samba para forçar permissões mais altas em arquivos recém-criados (como aqueles criados pelo TortoiseSVN). Aqui está o meu arquivo de configuração atual do samba:
[projects]
comment = web apps for users in group *fileadmins*
path = /var/www/apps
valid users = @fileadmins
create mask = 0777
directory mask = 0777
writable = yes
force create mode = 0777
force directory mode = 0777
write list = +@fileadmins
delete readonly = yes
read only = No
Como você pode ver, estou deixando as permissões abertas, intencionalmente, apenas para que algo funcione. Se eu agora do Windows criar um novo documento de texto manualmente na unidade de rede, ele terá as permissões acima aplicadas a eles, para que funcione.
Os ficheiros criados pelo cliente TortoiseSVN, em particular os que se queixam, são os seguintes:
- .svn / tmp (group: fileadmins, proprietário: root, permissões: 0777)
- .svn / tmp / svn-5FDD2730 (grupo: raiz, proprietário: raiz, permissões: 0777)
- .svn / pristine (grupo: fileadmins, proprietário: root, permissões: 0777)
- .svn / pristine (grupo: fileadmins, proprietário: root, permissões: 0777)
- .svn \ pristine \ 18 (grupo: raiz, proprietário: raiz, permissões: 0777)
Da aparência, o root tem acesso total a todos os arquivos e eu estou usando a unidade de rede como usuário root. Eu assumo que o TortoiseSVN é executado sob a mesma conta.
A única coisa estranha sobre o que foi dito é que alguns arquivos possuem root como grupo. Tentei forçar um grupo através das configurações do Samba, mas isso levou a um problema que tornou a unidade inteira indisponível. De qualquer forma, como root é proprietário (como usuário), não espero que isso importe.
Da minha perspectiva, estiquei as permissões ao máximo possível, mas ainda recebo erros de permissão. Estou ansioso para aprender o que estou negligenciando. Eu tive essa configuração trabalhando em várias máquinas por mais de uma década, mas estou completamente presa nessa.