MyTetra — это полнофункциональный кроссплатформенный менеджер заметок (PIM-manager), использующийся для сбора и накопления различного рода информации. Все записи (заметки, статьи) организуются в древовидную структуру, а так же снабжаются ключевыми словами-тегами, позволяющими быстро находить нужные записи. Ссылки между записями, прикрепляемые файлы, шифрование, развернутый поиск, синхронизация, копирование из браузера, кроссплатформенность, один из лучших визуальных WYSIWYG редакторов текста – все это есть в PIM-менеджере MyTetra.
Лицензия: GPL v.3
Хранилище записей можно хранить просто локально, или синхронизировать с удаленным репозиторием. Данные хранятся в виде простых текстовых файлов (xml, html, ini), поэтому легко можно отслеживать все изменения.
Разработчик предоставил возможность запуска собственного скрипта для синхронизации записей при старте и завершении программы. Я использовал Git, хотя имею только базовые навыки работы с ним. Для меня было несколько необычно запихать в скрипт функционал сразу и чтения, и записи изменений, но в результате все работает как надо. Я использую программу на 3-х устройствах: Windows 7, Xubuntu 16.04 и Android 9 (MyTetroid).
Аналогичная статья есть на сайте разработчика. Алгоритм в целом такой же, я лишь добавил сохранение логов и оформил в виде отдельных командных файлов.
Подробнее
В скриптах я пытался сделать более-менее наглядное отображение результата команд одновременно и в консоль, и в лог-файл.
Все 3 скрипта я положил в папке
scripts в корне хранилища. Туда же ложаться и логи.
Сами файлы логов я не храню в git, поэтому добавил их в исключения в файле
.gitignore :
Если же логи уже отслеживаются git’ом, то можно их оттуда убрать:
|
git rm --cached scripts/*.log |
В настройках программы MyTetra сама команда синхронизации будет такой (пример для Linux-скрипта):
|
%a/scripts/linux_sync.sh %a |
, где
%a – макрос для получения имени директории с данными.

Если для доступа к удаленному репозиторию используется тип авторизации по паролю (а не по ssh-ключу), то при выполнении некоторых команд (например,
git push) выполнение скрипта будет остановлено в ожидании ввода пароля. Во избежании этого можно попросить git сохранить пароль локально с помощью команды:
|
$ git config credential.helper store |
После этого нужно будет ввести пароль в последний раз и он сохранится.
Windows
Скрипт для Windows:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
@echo off rem Переменные rem Получаем рабочий каталог из параметра set DATADIR=%1 set LOGFILE="%DATADIR%/scripts/windows_sync.log" rem Вступление echo " ">>%LOGFILE% call :log "===============================================" call :log "Changes from Windows" rem Выполнение команд call :log "Command 'cd %DATADIR%'" cd /d %DATADIR% call :log "Command 'git diff'" git diff --name-status >>%LOGFILE% 2>>&1 call :log "Command 'git add .'" git add . >>%LOGFILE% 2>>&1 call :log "Command 'git commit'" git commit -a -m "Changes from Windows - %date% %time%" >>%LOGFILE% 2>>&1 call :log "Command 'git pull'" git pull origin >>%LOGFILE% 2>>&1 call :log "Command 'git push'" git push origin master >>%LOGFILE% 2>>&1 rem Функции :log set MES=%date% %time% === %1 echo %MES% echo %MES%>>%LOGFILE% 2>>&1 exit /b |
Пример лога Windows:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
" " 27.11.2018 16:50:19.80 === "===============================================" 27.11.2018 16:50:19.80 === "Changes from Windows" 27.11.2018 16:50:19.80 === "Command 'cd D:/Repositories/MyTetraData'" 27.11.2018 16:50:19.81 === "Command 'git diff'" M base/1536511432orta3a8gwd/text.html M base/1537772800u0p1ofoq6s/text.html M mytetra.xml 27.11.2018 16:50:30.01 === "Command 'git add .'" warning: LF will be replaced by CRLF in mytetra.xml. The file will have its original line endings in your working directory. 27.11.2018 16:50:37.72 === "Command 'git commit'" [master 04fa488] Changes from Windows - 27.11.2018 16:50:37.72 5 files changed, 38 insertions(+), 1 deletion(-) rewrite base/1536511432orta3a8gwd/text.html (100%) create mode 100644 base/1543318761s593nwntjt/text.html create mode 100644 base/154332341860takhm0l1/text.html 27.11.2018 16:50:46.06 === "Command 'git pull'" Already up-to-date. 27.11.2018 16:50:59.69 === "Command 'git push'" To https://path/to/repo/mytetradata.git a2c1562..04fa488 master -> master 27.11.2018 16:51:10.20 === D:/Repositories/MyTetraData |
Linux
Скрипт для Linux:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
#!/bin/sh # переменные # получаем рабочий каталог из параметра DATADIR=$1 LOGFILE="$DATADIR/scripts/linux_sync.log" # функции log(){ echo "$(date +""%d.%m.%Y\ %T"") === $@" } # перенаправляем вывод exec 2>>$LOGFILE 1>>$LOGFILE # вступление echo "" log "===============================================" log "Changes from Linux" # выполнение команд log Command \"cd $DATADIR\" cd $DATADIR log Command \"git diff\" git diff --name-status log Command \"git add .\" git add . log Command \"git commit\" curdate=$(date +"%d.%m.%Y %T") git commit -a -v -m "Changes from Linux - $curdate" log Command \"git pull\" git pull origin log Command \"git push\" git push -v origin master |
Пример лога Linux:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
27.11.2018 06:37:28 === =============================================== 27.11.2018 06:37:28 === Changes from Linux 27.11.2018 06:37:28 === Command "cd /home/gee12/Repositories/MyTetraData" 27.11.2018 06:37:28 === Command "git diff" M base/1536511432orta3a8gwd/text.html M mytetra.xml 27.11.2018 06:37:28 === Command "git add ." 27.11.2018 06:37:28 === Command "git commit" [master a2c1562] Changes from Linux - 27.11.2018 06:37:28 3 files changed, 1 insertion(+) rewrite base/1536511432orta3a8gwd/text.html (100%) create mode 100644 base/1543287498c50bmxqsuz/text.html 27.11.2018 06:37:30 === Command "git pull" Already up-to-date. 27.11.2018 06:37:33 === Command "git push" Отправка в https://path/to/repo/mytetradata.git POST git-receive-pack (16603 bytes) To https://path/to/repo/mytetradata.git e2117aa..a2c1562 master -> master updating local tracking ref 'refs/remotes/origin/master' |
Android
Подробная статья у меня есть здесь.
Запуск Git-скрипта в Android можно выполнять с помощью Termux (только для версий Android >= 7).
Termux – приложение, реализующее Linux-подобную среду, взаимодействие с которой происходит посредством консоли без необходимости иметь root-права на устройстве.
Текст скрипта для Android аналогичен скрипту для Linux (кроме подписей).
При этом вызвать выполнение скрипта Termux из приложения MyTetroid, к сожалению, нельзя (пока ?).
Можно запускать напрямую из Termux:
|
$ cd /path/to/storage $ sh scripts/android_sync.sh $(pwd) |
Также, можно использовать дополнение Termux:Widget.
Синхронизация перед выключением ОС
При обычном выключении ПК операционная система в процессе своего завершения закрывает запущенные программы “принудительно”, поэтому синхронизация MyTetra не запускается, даже если установлена соответствующая опция. Поэтому целесообразно завершать работу “вручную” скриптом, указав нужную последовательность действий. Можно указать выполнение скрипта при нажатии комбинации клавиш (например, Ctrl+Alt+Q, получается удобно), или просто создать ярлык на рабочем столе/в меню быстрого вызова программ.
Скрипт для Linux:
|
#!/bin/sh <ScriptPath>/linux_sync.sh <MyTetraDataDir> shutdown now |
Скрипт для Windows:
|
echo off call <ScriptPath>\windows_sync.bat <MyTetraDataDir> shutdown /p |
Просмотров: 908
Скажите, совпадает ли структура директории хранения базы MyTetra на декстопах и Android-устройствах? Пользуюсь MyTetra на 3 дектопах Linux (/home/alex/myTetra/data/), синхронизирую базу через Mega одноименным клиентом. Можно ли синхронизировать базу с телефоном, установив Mega-клиент на Android?
Ответил тут