Alexander Kuklev (akuklev) wrote,
Alexander Kuklev
akuklev

Category:

О системах контроля версий

Очень часто мне хочется иметь "контроль версий" для одного файла. Я даже когда-то я даже сделал себе такую систему на коленке хуками в редакторе.

Хуки были следующие:
— при открытии произвольного текстового файла anyname, скрипты создавали (если его ещё не было) каталог anyname~ и в нём файл history и подкаталог archived_versions.
– на сочетание клавишь Ctrl+S я повесил скрипт, который предлагал скинуть текущую версию в архив. Сразу в момент нажатия он аппендил в history строку "Version tagged {Timestamp}-{ContentHash}",
клонировал содержимое редактируемого файла в anyname~/archived_versions/{$USERNAME}/{Timestamp}-{ContentHash}, и предлагал пользователю "short description of changes or version tag", после чего переименовывал файл в {Timestamp}-{ContentHash}-{description/tag}.
– хук, который следил за действиями над текстом в редакторе: при каждом переходе от вводящих текст действий к удаляющим текст действиям, и наоборот, генерился diff относительно предыдущей версии и заносился вместе с таймстемпом и юзернеймом редактирующего в history. Дополнительные диффы заносились по таймеру. Т.е. после каждого сохранения чего-либо в хистори ставился timeout на 5 секунд, если за эти 5 секунд нового diff'а в хистори не появилось, надо проверить изменился ли файл, и, если да, скинуть туда новый diff и снова поставить пятисекундный таймер. Это обеспечивало занесение в файл history действительно истории файла достаточной для любых undo-действий, условие про пять секунд гарантировало гранулярность, условие про фиксацию всех переходов с ввода на удаление, гарантировало что введённый и быстро стёртый текст не пропадёт, даже если ввод-удаление попали в пятисекундное окошко.
Я очень бы хотел, чтобы оно работало так же для нетекстовых файлов: для экселевских таблиц и паўерпойнтовских слайдшоу, для картинок из графического редактора, для всех штук где "self contained project" это не дерево каталогов, а один файл. (Впрочем, ничего не мешает self contained project'у "приветственная картинка" быть частью бОльшего проекта "игра компьютерная Х".)

Я до сих пор считаю, что такой подход к контролю за изменениями в одном файле (возможно, редактируемом несколькими людьми в коллаборативном редакторе вроде google docs, но физически находящимся на одном компьютере) очень близок к оптимуму. Архивирование версий это то, чем должно быть досовское "сохранение файла", а история изменений должна содержать всю undo-history (чтобы ни буква написанного текста/кода, не была удалена безвозвратно) с привязкой к чекпойнтам сохранённых версий. То, что сейчас всякий git хранит историю таких вот "архиваций" файла без привязки к undo history мне неудобно. Впрочем, git это вообще не file level, а folder level VCS, так что это о другом.

Наличие File level versioning как описано выше, очень удобно для работы с файлом в одиночку, либо группой вместе (simultaneously, not concurrently), но совершенно не отменяет потребности в том, чтобы для произведения крупных изменений в файле не мешая другим, нужно бывает этот файл сбренчить, а потом, когда будет готово, мержнуть назад/зафайлить пулл-реквест.

Если б я был султан, я б git расширил: позволил бы навешивать git не только на каталоги (с хранением служебной информации в подкаталоге .git), но и на отдельные файлы (с хранением служебной информации в filename~) и добавил бы туда функционал по треккингу undo-history для поддерживающих это дело редакторов. И добавил бы туда возможность мерджинга ветвей-кузенов при помощи patch reordering, как в darcs camp.

Не могу представить, что бы мне ещё было нужно от системы контроля версий, окромя, конечно, идеального визуального интерфейса, и высокой скорости работы с проектами любого размера.
Subscribe

  • Прогресс

    Десять дней назад, вторая ступень SpaceX'овского корабля Starship своим ходом слетала своим ходом на десять километров вверх, и усмепшно приземлилась…

  • О водосбережении

    Как известно, питьевая вода во многих странах дефицитный ресурс. И даже в дождливой Германии летом иногда случаются засухи, в результате которых она…

  • 36

    Традиционный деньрожденный пост. Год выдался необычный. :)

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 10 comments

  • Прогресс

    Десять дней назад, вторая ступень SpaceX'овского корабля Starship своим ходом слетала своим ходом на десять километров вверх, и усмепшно приземлилась…

  • О водосбережении

    Как известно, питьевая вода во многих странах дефицитный ресурс. И даже в дождливой Германии летом иногда случаются засухи, в результате которых она…

  • 36

    Традиционный деньрожденный пост. Год выдался необычный. :)