Собираем
информацию
по крупицам

Qt

Как в MyTetra настроить синхронизацию через интернет
07-07-2011
23:53:21

Начиная с версии 1.30, в менеджере накопления информации MyTetra появилась возможность синхронизации данных через интернет. О том, как настроить синхронизацию, написано в этой статье.

 

Синхронизацию в MyTetra можно сделать с помощью любых систем облачного хранения данных или систем контроля версий. Желательно, чтобы эти системы поддерживали атомарность. Атомарность -  это такое свойство системы, при котором все файлы обновляются на состояние, соответсвующее одному моменту времени. Облачные системы хранения данных типа DropBox или Яндекс.Диск не обладают атомарностью, поэтому при их использовании желательно наличие хорошего интернета.

 

Свойством атомарности обладает система контроля версий Git, и я использую её для синхронизации. В качестве хостинга я использую GitHub.com.

 

GitHub.com предоставляет бесплатный тарифный план для хранения 300Мб данных в открытом виде. Это значит, что любой пользователь интернета может скачать себе ваши данные. На GitHub можно разместить и закрытые репозитарии, заплатив 7$ в месяц. А можно воспользоваться встроенным в MyTetra шифрованием, разместив бесплатно и безопасно свои данные у всех на виду. В любом случае, на бесплатном аккаунте GitHub никто не сможет изменить ваши данные - все создаваемые репозитарии имеют режим только чтение (Read Only) для других пользователей GitHub. Пока вы не пропишите дополнительных пользователей, которые могут иметь доступ на запись в репозитарий, вашей базе ничего не угрожает.

 

Итак, начнем.

 

 

Что необходимо для синхронизации

 

Для того, чтобы сделать синхронизацию через git, нужно иметь две вещи: установленный git и аккаунт на GitHub. Тех, кто никогда не работал с git и GitHub, я отправляю читать статью:

 

Установка GIT и настройка на GitHub: полное руководство (Windows, Linux)

 

 

Создание репозитария с данными MyTetra

 

Перво-наперво нужно создать новый пустой репозитарий в системе GitHub. Далее будем считать, что для синхронизации вы создали репозитарий с именем mytetra. Создание репозитария производится в веб-интерфейсе GitHub.

 

Затем нужно выяснить, где находится на вашем компьютере директория с данными программы MyTetra. Запускаем MyTetra, нажимаем "Инструменты" -> "Настройки" -> "Основные". В поле "Директория с данными" нажимаем кнопочку с тремя точками [...] и смотрим, где расположена директория /data. Все дальнейшие действия из консоли следует выполнять внутри директории /data.

 

Итак, переходим в директорию /data и даем следующие команды:

 

git init

git add .

git commit -a -m "first commit"

git remote add origin git@github.com:username/mytetra.git

git push -u origin master

 

Вместо username надо, естественно, написать свой GitHub-логин . В результате этих действий, в каталоге /data появится подкаталог .git - это системный каталог программы git. Если при выполнении команд не возникло ошибок, значит, начиная с этого момента, данные уже лежат на сервере GitHub. И их можно посмотреть через web-интерфейс системы GitHub.

 

Помните, что заливая данные на GitHub, вы делаете их открытыми всему интернету! Поэтому, если у вас есть приватные данные, которые нельзя никому показывать, не забудьте предварительно их зашифровать! Шифровать данные нужно перед тем, как будете делать заливку на сервер, так как система git позволяет просматривать историю данных.

 

 

Настройка синхронизации в MyTetra

 

В MyTetra, нажимаем "Инструменты" -> "Настройки" -> "Синхронизация". Видим вот такие настройки:

 

 

В поле "Команда синхронизации" задаем следующую команду.

Для пользователей Linux:

 

cd %a ; git add . ; git commit -a -m MyTetraCommit ; git pull -s recursive ; git push

 

Для пользователей Windows:

 

cd \ & cd "%a" & git add . & git commit -a -m MyTetraCommit & git pull -s recursive & git push

 

Внимание! Если данные находятся на диске, отличным от C:, надо добавлять в команду смены каталога еще и смену диска. Например, вместо "cd \" следует писать "cd D:\".

 

После чего добавляем в MyTetra пару записей, редактируем уже существующие, удаляем ненужные. Затем нажимаем на кнопку синхронизации, и, если всё в порядке, на сервере GitHub будут зафиксированы эти изменения.

 

Внимание! Вплоть до 27.12.2011 в этой статье были указаны не совсем корректные команды синхронизации (присутсвовала pull-опция -X theirs). Из за этой опции возникали ситуации, когда при синхронизации сбрасывались последние изменения в редактируемых записях. Пожалуйста, проверьте свою команду синхронизации, и удалите данную опцию.

 

 

Отладка

 

Вопрос: Что делать, если данные не уходят на сервер GitHub, а лог синхронизиции в окне синхронизации так быстро промелькивает, что ничего не успеваешь прочитать?

 

Ответ: В конец команды синхронизации добавьте команду, которая остановит вывод. Пользователи Linux могут добавить ; read. Пользователи Windows могут добавить & pause 0. Внимательно прочитайте что написано в логе, возможно вы сразу поймете в чем причина неполадки.

 

 

Вопрос: Что делать, если на этапе синхронизации окно синхронизации не закрывается самостоятельно, а чего-то ждет?

 

Ответ: Такое может возникнуть, если git пытается что-то запросить от пользователя через консольный ввод. Причем, самого запроса в логе может быть не видно. В этом случае выключаем MyTetra, переходим в каталог /data (вы уже знаете, где он находится), и начинаем последовательно выполнять команды из строки с командой синхронизации. Вначале выполняем:

 

git add .

 

Потом выполняем:

 

git commit -a -m MyTetraCommit

 

И так далее. На какой-то команде может возникнуть какая-то ошибка. Обычно эта ошибка возникает из-за неправильного конфигурирования git или ключей шифрования. Исправляем ошибку, так же по шагам проверяем работу, и дальше в MyTetra всё должно работать без подобных плясок.

 

 

Синхронизация данных MyTetra с другими компьютерами

 

Ранее мы рассмотрели, как сделать первичное наполнение данных в репозитарии, и как синхронизироваться с сервером. Но пока что мы получили только "резервное копирование данных" - ведь у нас настроено только одно место с синхронизируемыми данными.

 

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

 

Внимание! Здесь речь идет о сихронизации одного набора данных между несколькими копиями MyTetra. Если у вас на домашнем компьютере уже есть одна база данных, а на рабочем компьютере уже есть другая база данных, и вы хотите их объединить, то речь идет о слиянии баз. Процедуры слияния баз в MyTetra не предусмотрено. Возможно, кто-то захочет написать скрипт для слияния баз - пожалуйста сделайте его, если у вас есть возможности и желание.

 

Итак, на втором компьютере, где мы хотим сделать синхронизацию, инсталлируем MyTetra, выясняем месторасположение каталога /data  (как это сделать, написано выше). Выходим из MyTetra, затем заходим в каталог /data, и всё в нём удаляем. Затем, находясь в каталоге /data, даем команду:

 

git clone git@github.com:username/mytetra.git .

 

где вместо username не забываем подставить свой логин на GitHub-е. Да, да, в конце этой команды стоит пробел и точка. Так нужно. Данная команда выкачает с GitHub все данные в актуальном состоянии.

 

Далее запускаем MyTetra и видим, что она уже работает с полной копией данных, которые были получены с сервера GitHub. Далее в MyTetra, нажимаем "Инструменты" -> "Настройки" -> "Синхронизация", и устанавливаем точно такую же команду синхронизации, которая написана в предыдущем разделе.

 

Всё! Теперь мы имеем две программы MyTetra, которые могут синхронизироваться друг с другом через сервер GitHub.

 

 

Особенности алгоритма синхронизации MyTetra

 

Команды синхронизации, указанные выше, обеспечивают следующие принципы синхронизации.

 

  1. Сервер главный. Вся синхронизация идет относительно последних данных, хранящихся на сервере. В момент синхронизации сервер принимает от клиента изменения, котрые были сделаны пожже, чем последнее зафиксированное состояние файлов на сервере. А так же сервер выдает клиенту те изменения, которые клиент еще не получал.

  2. Учитывается связанность по времени. Грубо говоря, если вы в первой копии данных удалите ветку с записями и засинхронизируетесь, а во второй копии, не синхронизируясь начнете редактировать записи в этой ветке, то после синхронизации второй копии всё ваше редактирование будет забыто и ветка удалена. Это произойдет потому, что вначале произошло событие удаления ветки (и оно было зафиксировано!), а все последующие действия внутри этой ветки не имеют смысла.

 

Помните, что пользуясь системой контроля версий git, вы всегда можете восстановить данные на конкретный момент времени. Как это делать - разбирайтесь сами, изучайте git и его команды - это очень мощная система.

 


К списку проектов

Интересное на сайте


Мультиплатформенные игры » Ежик-попрыгунчик. Лесная тропа.

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


Классическая анимация » Прыгающая подушка

Оборудование: Pentium-IV, Wacom Graphire3 CTE-630 Среда: Flash 8 Год: 2005   Первая и, видимо, последняя попытка нарисовать мини-мультфильм по т...


Программирование на C++ и Qt » Как в C++ сделать массив объектов, у которых конструктор имеет аргументы

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

RSS подписка

Подпишитесь на новости сайта по RSS


О, смотри-ка какое хорошее место. Дайте два!

Внимание!

На этом сайте разрабатывается программа MyTetra и её родственные проекты.

Доступны к просмотру следующие базы знаний:

База Xintrea (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)

База Rarrugas (1, 2)

База Balas

База YellowRaven

База Yurons

База Lesnik757

База Shandor

База Sirrichar

 

Подробности на странице MyTetra Share.

 WebHamster.Ru
 Домик любопытного хомячка
Яндекс индекс цитирования
Почтовый ящик