Pliki binarne i translacje

Najogólniej rzecz biorąc, Subversion traktuje pliki binarne bardziej łaskawie niż CVS. Jako że CVS używa RCS, może jedynie przechowywać pełne kopie zmieniających się plików binarnych. Subversion natomiast zapisuje różnice pomiędzy plikami za pomocą algorytmu różnicującego binarnie, nie ważne czy zapisywana treść jest tekstem czy danymi binarnymi. Oznacza to, że wszystkie pliki w repozytorium przechowywane są różnicowo (skompresowane).

Użytkownicy CVS musieli oznaczać pliki binarne flagą -kb, aby zapobiec ich uszkodzeniu (z powodu ekspansji kluczy i translacji zakończeń wierszy). Czasami o tym zapominali.

Subversion zachowuje się bardziej zachowawczo. Po pierwsze, nigdy nie wykonuje żadnych translacji kluczy bądź zakończeń wierszy, chyba że tego wyraźnie zażadasz (zajrzyj do „Keyword Substitution” oraz „End-of-Line Character Sequences” po więcej szczegółów). Domyślnie Subversion traktuje dane jako dosłowne ciągi binarne i pliki są zawsze przechowywane w repozytorium w formie nienaruszonej.

Po drugie, Subversion prowadzi wewnętrzny dziennik, w którym zapisana jest informacja o tym czy plik zawiera dane„tekstowe” czy „binarne”, lecz obecny jest on tylko w kopii roboczej. Podczas wykonywania polecenia svn update, Subversion dokona kontekstowych scaleń na lokalnie zmodyfikowanych plikach tekstowych, bez naruszania treści plików binarnych.

Aby sprawdzić czy kontekstualne scalenie jest możliwe, Subversion sprawdza zawartość własności svn:mime-type. Jeżeli plik takowej nie posiada bądź jego typ MIME jest tekstowy (np. text/*), Subversion zakłada, że to tekst. W przeciwnym wypadku zakłada, że ma do czynienia z danymi binarnymi. Subversion pomaga także użytkownikom za pomocą algorytmu detekcji treści („binary-detection algorithm”) podczas wykonywania poleceń svn import orazsvn add. Dzięki temu polecenia te poprawnie odgadną treść i prawdopodobnie ustawią własność svn:mime-type na typ binarny. (Jeżeli Subversion zgadnie źle, użytkownik zawsze może usunąć bądź wyedytować tą własność.)