Как стать автором
Обновить

Комментарии 51

Возникла идея сделать свою систему контроля версий

Как вообще может возникнуть такая идея?

А что в этом сложного?

Само собой это не будет "убийца git", но достаточно просто получить состояние текущего проекта локально и в удаленном хранилище. после чего определить различия и записать эти различия в виде набора команд "добавить"/"удалить" ("изменить"="удалить"+"изменить"). И эту разницу либо записать в хранилище (получаем в хранилище новую версию), либо применить локально (получить состояние как в хранилище).

Интересует мотивация такого решения и причина, почему git не подходит.

Для работы с удаленным репозитарием git требуется установить сервер git. А мне его мне ставить некуда. Моя программа будет работать с FTP, что позволит сохранять файлы на HDD подключенный к роутеру. Или сетевой диск. Или в облако какое-то.

Не очень понял, вашу программу поставить можно, а гит — не получится?

Чтобы работать с git, нужно поставить его

  1. Локально

  2. На сервер куда будем сохранять

Мою программу нужно ставить только локально. Тот же FTP на роутере в наше время весьма распространенная практика.

А, т.е. гит не умеет работать с файлами по ftp?

Я где то писал что я спец по git?

Не в курсе. Я просто пытаюсь понять проблему и разобраться, нельзя ли ее решить существующими надежными средствами. Кстати, нашел что-то для работы с git под ftp, но не изучал подробно: https://git-ftp.github.io/

https://habr.com/ru/post/178067/

Не особо понял что со скачиванием. Т.е. может ли он по FTP загрузить нужную версию. Есть подозрение, что на FTP просто выгружается текущее состояние файлов. И о скачивании какой-то версии речи не идет. Т.е. судя по примеру: кодим сайт, потом запускаем команду и она выгружает на хостинг новый код.

Может кто-то, кто пользуется сможет этот момент прояснить.

Только это 9-летняя статья, а за такое время много всего могло измениться.

Нашел в документации

download (EXPERIMENTAL) : Downloads changes from the remote host into your working tree. This feature needs lftp to be installed and does not use any power of Git. WARNING: It can delete local untracked files that are not listed in your .git-ftp-ignore file.

Но последний коммит 3 года назад и судя по всему эту функцию до ума так и не довели. Вероятно это делали для деплоя сайтов.

Но ни о каких версиях речи нет.

Т.е. инструмент писался именно для деплоя сайта. Он в принципе не предназначался для хранения версий файлов на FTP.

Открою секрет — git не нужно ставить на сервере, можно просто папку .git на сервер закачивать, в том числе через тот же ftp.

Так всё равно нужен какой-то функционал чтобы он только обновление закачивал. Да и для скачивания на другую машину тоже нужен функционал чтобы он не скачивал вся заново.

Мне кажется что хорошие ftp-клиенты могут скачивать\закачивать только изменённые файлы в папке .git, на основе даты изменения, например. Но вообще она не такая уж и большая обычно, чтобы было проблемой скачать-закачать её целиком.

Я использую программу для бэкапа всех своих проектов. И файлов там под 100 тыс. Проверка по FTP 100 тыс. файлов всё-таки займет время.

Для бэкапа проекты лучше в архив жать — гораздо быстрее, а FTP- медленный и древний протокол, который потихоньку выпиливают уже ото всюду.

Если каждую версию в архив жать, то это большой объем. А если только изменения, то неудобно восстанавливать нужную версию.

Отсюда и желание сделать свою программу. Я и сейчас своей пользуюсь, и она жмет в архив. Но у неё свой формат игнорирований + в новой версии планирую файлы в хранилище хранить по другому. Каждый файл в отдельном файле с именем хеша. В этом случае если несколько одинаковых файлов, то в хранилище это будет один файл. И при перемещении в другое место сам файл не нужно будет переархивировать.

Если вам нужно ставить программу только локально, а удалённо лишь хранить файлы — есть два варианта:


  1. Вообще отказаться от контроля удалённых версий! Обычно на таких удалённых хостах исходникам всё равно делать нечего, им нужны результаты сборки.


  2. Монтируете ваш FTP-сервер как директорию в файловой системе, создаёте в ней новый worktree. Работать будет небыстро, но сомневаюсь что ваша велосипедная система контроля версий принципиально что-то ускорит.


  3. Ах да, третий вариант — берёте обычный git и прикручиваете к нему велосипед для экспорта файлов на FTP-сервер. Будет сложно, но намного проще чем писать свою систему контроля версий.


Мне нужно как раз делать бэкап текущего проекта (т.е. именно исходников) + возможность откатится к нужной версии. На случай если HDD вдруг помрет.

Не работает что ли? Или аналитический обзор предметной области делать некогда, надо код писать?

Это домашний проект, а не по работе. Так что лучше "код писать".

Лучше использовать правильный инструмент, соответствующий задаче. Другой, конечно, вопрос, правда не исключено что и git в задаче не требуется. Но это уже совсем другая история.

C git самое полезное что нашлось, это копировать по FTP папку .git

Но это процесс долгий, т.к. у меня 100 тыс. файлов. Т.е. изменился один файл, а копировать нужно всё. Значит всё-равно нужно писать инструмент который будет копировать только изменение. На мой взгляд проще написать сразу "свой git" в версии lite.

Если изменился один файл, то гит отправит только изменения по этому файлу, откуда 100k файлов взялось? Ну, да, первый пуш будет долгим, но и в "своём гите" инициализацию делать придётся.

Это если вы на сервер git отправляете изменения. А если копируете папку .git по FTP, то он всё равно все файлы будет перебирать. В лучшем случае сверять дату/размер и такие файлы не копировать заново.

А за какой надобностью копировать на ftp всю папку .git, кроме первого раза? Есть подозрение, что кто-то не понимает механизма работы git.

После копирования проекта на ftp в первый раз нужно добавить его в локальной копии как удалённый репозиторий. И изменения на ftp будут попадать обычным push-ем в удалённый репозиторий.

Можно написать свой язык, на котором написать VCS в которой будут храниться исходники своей ОС, чтобы на ней запускать свой язык и свою VCS ...

... на собственноручно спаянном компьютере с собственноручно разработанной архитектурой.

И все это в собственноручно сделанном доме!

Подключённом к собственноручно сделанной электростанции. Собственноручно вытянутыми проводами из собственноручно выплавленного металла из собственноручно добытой руды.

И всё это на собственноручно терраформированной планете, разумеется.

упущен момент с тем, что автор должен для начала сам себя сделать. собственноручно.

Так он и сделал, с одной клетки начинал.

Как преобразовать правило .gitignore в регулярное выражение

Интересно, внутри гита тоже происходит такая конвертация или там работает по-другому?


Возникла идея сделать свою систему контроля версий.

Топик не о ней, но все же, с какой целью?


Однако в результате реализации стал замечать, что этот функционал я уже к своему коду "прибиваю гвоздями".

Что плохого в "прибивании гвоздями", если решается конкретная задача?


Функция parse3(line)

Не используйте несколько риплейсов на одной и той же строке. Эффективней сделать один билдер и таблицу подстановок. Есть и другие моменты, которые можно улучшить.


Для тестирования функционала написал консольную программу для Windows. Вот ссылка на архив на архив.

Полезней была бы ссылка на исходники на каком-нибудь гитхабе. А почему консольная программа только под Windows? Если нет GUI, то программа должна быть довольно просто портируемой или вообще бесплатно. Ну и архив этот у меня не скачивается.

Что плохого в "прибивании гвоздями", если решается конкретная задача?

Для меня - ничем. Но если кто-то захочет использовать, то ему придется кучу моего кода себе вставлять. Точно также как и мне, если бы я из git вытащил этот функционал.

Не используйте несколько риплейсов на одной и той же строке. Эффективней сделать один билдер и таблицу подстановок. Есть и другие моменты, которые можно улучшить.

Это всё-таки общий алгоритм, а не конкретная реализация. В коде можно и таблицу подстановок реализовать. К тому же функция разбора правила всё-таки вызывается не так часто, так что экономить "на спичках", на мой взгляд, тут не имеет смысла. Разве что это окажется "узким местом".

Полезней была бы ссылка на исходники на каком-нибудь гитхабе. 

Для этого придется выкладывать ещё кучу других либ. Вытаскивать нужные - лень. А выкладывать всё, так многие сейчас в процессе переработки в связи с написание VCS и поэтому работаю криво. И есть сторонние зависимости (тот же zlib), которые тоже нужно будет скачивать. Вряд ли много народу вообще такое будут делать, поэтому пока не стал выкладывать

А почему консольная программа только под Windows?

Потому что основная система у меня windows

Ну и архив этот у меня не скачивается.

На сайте у меня не прикручен https, вот браузер и блокирует :(

В ближайшее время постараюсь прикрутить

Я бы не делал блок-схемы в статьях. Это ужасно непонятно

Если это псевдокод или код на современном ЯП (C#, Kotlin, Swift, Python), то более понятен и компактен. Программисты чаще читают код, чем схемы. Немаловажно, что его еще и скопировать можно.

В данном случае на блок-схеме именно псевдокод, без привязки к языку. Скопировать код сможет только тот программист, кто на этом языке пишет. А написать код по блок-схеме сможет любой программист.

Перевести код с одного обычного (не ml-подобного) языка на другой тоже может (почти) любой программист. Это гораздо проще чем читать блок-схему.

по моему мнению это очень странный программист, которому переводить код проще чем блок схему читать. Чтение блок схем это основа.

Чтение кода — это то чем я занимаюсь каждый день. Чтение блок-схем — это то, чем я занимался последний раз 11 лет назад. Как думаете, какой навык лучше развит? Это первое.


А второе — плотность информации. У кода она выше, проще на один экран вместить. Ваши схемы, к примеру, занимают у меня 2 с половиной экрана в сумме, скролить их — не перескролить...

Так это скорее будет не GIT, а SVN

Это скорее бэкап с версиями, чем git

Working directly from the USB stick has several problems to it.

Гугл транслейт в помощь.

Как я понял, это только в режиме бэкапа работает. Но и тут уже предлагали папку .git копировать на FTP.

Это работает в качестве основной репозитории. Просто вместо того чтобы поднимать сервер, используеться флешка которую можно взять с собой и использовать в другом устройстве когда нужно.
Без танцев с бубном.
А в облаке полно git as a service, многие из них бесплатные, покрывающие почти все "домашние" проекты.

> Но это процесс долгий, т.к. у меня 100 тыс. файлов.

> The Linux kernel source tree is up to 62,296 files

Я так понимаю вы решили переплюнуть Линуса Торвальдса, создателя git и linux?
И свой контроль версий придумали, и проект на 100 тыс файлов...

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории