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 :
1 |
scripts/*.log |
Если же логи уже отслеживаются git’ом, то можно их оттуда убрать:
1 |
git rm --cached scripts/*.log |
В настройках программы MyTetra сама команда синхронизации будет такой (пример для Linux-скрипта):
1 |
%a/scripts/linux_sync.sh %a |
, где %a – макрос для получения имени директории с данными.
Если для доступа к удаленному репозиторию используется тип авторизации по паролю (а не по ssh-ключу), то при выполнении некоторых команд (например, git push) выполнение скрипта будет остановлено в ожидании ввода пароля. Во избежании этого можно попросить git сохранить пароль локально с помощью команды:
1 |
$ 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:
1 2 |
$ cd /path/to/storage $ sh scripts/android_sync.sh $(pwd) |
Также, можно использовать дополнение Termux:Widget.
Синхронизация перед выключением ОС
1 2 3 |
#!/bin/sh <ScriptPath>/linux_sync.sh <MyTetraDataDir> shutdown now |
1 2 3 |
echo off call <ScriptPath>\windows_sync.bat <MyTetraDataDir> shutdown /p |
Скажите, совпадает ли структура директории хранения базы MyTetra на декстопах и Android-устройствах? Пользуюсь MyTetra на 3 дектопах Linux (/home/alex/myTetra/data/), синхронизирую базу через Mega одноименным клиентом. Можно ли синхронизировать базу с телефоном, установив Mega-клиент на Android?
Ответил тут