Para uma classe de sistemas operacionais que estou cursando, eu precisava executar o Freebsd5.4. Como eu não queria lutar com o build do git em uma versão do bsd lançada antes do lançamento do git, pensei que seria interessante usar o git
Arch over sshfs
.
De qualquer forma, encontrei uma solução alternativa que sugeria que eu desse sshfs
a opção -o workaround=rename
.
Parece fazer git
feliz, mas estou um pouco confuso com o que aconteceu ...
Tudo o que a página do manual diz sobre a solução alternativa é
fix renaming to existing file
mas estou completamente confuso quanto ao que isso significa ...
O que exatamente essa opção faz?
Respostas:
O sshfs usa o protocolo SFTP (SSH File Transfer Protocol). A solução alternativa que você ativou está contornando a semântica de uma operação rename () sobre esse protocolo quando o nome "novo" já existir.
O comportamento do POSIX para renomear () neste caso é remover o arquivo existente e concluir a renomeação.
No protocolo SFTP, você pode renomear um arquivo com a operação SSH_FXP_RENAME; no entanto, seu comportamento quando o nome do destino já existe parece depender da versão do protocolo que você está usando e dos sinalizadores que você passa. A página da wikipedia para o protocolo SFTP possui links para vários rascunhos de RFCs para várias versões do protocolo. No rascunho 00, o comportamento é listado como:
No rascunho 13 , o comportamento é listado como
Para lidar com a possível falha de uma operação rename () quando o nome do destino existe, o sshfs fornece a seguinte solução alternativa (se ativada) :
Nesse código "from" é o nome existente do arquivo que queremos renomear e "to" é o novo nome que queremos. Deixando de lado algum comprimento do caminho e a contabilização de erros, esta solução
Isso evita o conflito "o arquivo já existe", mas também altera a semântica das operações rename (), e é por isso que você não deseja fazê-lo por padrão.
fonte