Para una clase de sistemas operativos que estoy tomando, necesito ejecutar Freebsd5.4. Como no quería luchar tratando de construir git en una versión de bsd lanzada antes de que se lanzara git, pensé que sería genial usarlo git
desde Arch over sshfs
.
En cualquier caso, encontré una solución alternativa que sugería dar sshfs
la opción -o workaround=rename
.
Parece git
alegrarme, pero estoy bastante confundido sobre lo que acaba de suceder ...
Todo lo que dice la página del manual sobre la solución es
fix renaming to existing file
pero estoy completamente desconcertado sobre lo que eso significa ...
¿Qué hace exactamente esa opción?
Respuestas:
sshfs usa el Protocolo de transferencia de archivos SSH (SFTP). La solución alternativa que ha habilitado es evitar la semántica de una operación rename () sobre ese protocolo cuando el nombre "nuevo" ya existe.
El comportamiento POSIX para rename () en este caso es eliminar el archivo existente y completar el cambio de nombre.
En el protocolo SFTP, puede cambiar el nombre de un archivo con la operación SSH_FXP_RENAME; sin embargo, su comportamiento cuando el nombre de destino ya existe parece depender de la versión del protocolo que esté utilizando y de los indicadores que pase. La página de wikipedia para el protocolo SFTP tiene enlaces a varios borradores de RFC para varias versiones del protocolo. En el Borrador 00, el comportamiento aparece como:
En el Borrador 13 , el comportamiento se enumera como
Para tratar la posible falla de una operación rename () cuando existe el nombre de destino, sshfs proporciona la siguiente solución (si está habilitada) :
En este código, "from" es el nombre existente del archivo que queremos renombrar y "to" es el nuevo nombre que queremos. Dejando a un lado la longitud de la ruta y la contabilidad de errores, esto funciona
Esto evita el conflicto "el archivo ya existe", pero también cambia la semántica de las operaciones rename (), por lo que no querrá hacerlo de forma predeterminada.
fuente