Aby wziąć udział w klasie systemów operacyjnych, muszę uruchomić Freebsd5.4. Ponieważ nie chciałem się zmagać z próbą zbudowania gita na wersji bsd wydanej przed wydaniem gita, pomyślałem, że byłoby to przydatne, gdyby używał go git
Arch sshfs
.
W każdym razie znalazłem obejście, które sugeruje, że daję sshfs
opcję -o workaround=rename
.
Wydaje się być git
szczęśliwy, ale jestem raczej zdezorientowany, co się właśnie stało ...
Cała strona człowiek mówi o obejście jest
fix renaming to existing file
ale jestem całkowicie zaskoczony, co to znaczy ...
Co dokładnie robi ta opcja?
Odpowiedzi:
sshfs używa protokołu przesyłania plików SSH (SFTP). Obejście, które włączyłeś, polega na obejściu semantyki operacji zmiany nazwy () na tym protokole, gdy „nowa” nazwa już istnieje.
Zachowanie POSIX dla rename () w tym przypadku polega na usunięciu istniejącego pliku i dokończeniu zmiany nazwy.
W protokole SFTP możesz zmienić nazwę pliku za pomocą operacji SSH_FXP_RENAME; jednak jego zachowanie, gdy nazwa docelowa już istnieje, zależy od wersji używanego protokołu i przekazywanych flag. Strona wikipedii dla protokołu SFTP zawiera linki do różnych wersji roboczych RFC dla różnych wersji protokołu. W wersji roboczej 00 zachowanie jest wymienione jako:
W wersji roboczej 13 zachowanie jest wymienione jako
Aby poradzić sobie z możliwym niepowodzeniem operacji zmiany nazwy (), gdy istnieje nazwa docelowa, sshfs zapewnia następujące obejście (jeśli jest włączone) :
W tym kodzie „z” to istniejąca nazwa pliku, którego nazwę chcemy zmienić, a „na” to nowa nazwa, której chcemy. Odkładając na bok pewną długość ścieżki i księgowanie błędów, to obejście
Pozwala to uniknąć konfliktu „plik już istnieje”, ale zmienia również semantykę operacji zmiany nazwy (), dlatego domyślnie nie chcesz tego robić.
źródło