Можно сделать прямо внутри Notepad++ через плагин
PythonScript.
У PythonScript есть событие
NOTIFICATION.FILESAVED, на которое можно повесить
git add и
git commit. Отдельный watcher или NppExec для этого не нужен.
Проверил у себя — работает.
Установка и настройка
- Открыть
Plugins → Plugins Admin....
- Найти PythonScript, отметить его и нажать Install. Notepad++ после установки перезапустится.
- Открыть
Plugins → PythonScript → Configuration....
- Для Initialisation выбрать
ATSTARTUP. Заодно полезно включить Automatically open console on error, чтобы ошибки скрипта сразу были видны.
- Открыть
Plugins → PythonScript → Scripts и startup (User). Если пользовательского startup.py ещё нет — создать через Plugins → PythonScript → New Script файл с именем startup.py.
- Вставить в него следующий код и сохранить:
from Npp import notepad, NOTIFICATION
import os
import subprocess
import datetime
def on_save(args):
filename = notepad.getBufferFilename(args["bufferID"])
file_dir = os.path.dirname(filename)
try:
repo = subprocess.check_output([
"git", "-C", file_dir,
"rev-parse", "--show-toplevel"
]).strip()
except subprocess.CalledProcessError:
return
rel_file = os.path.relpath(filename, repo)
subprocess.call([
"git", "-C", repo,
"add", "--", rel_file
])
changed = subprocess.call([
"git", "-C", repo,
"diff", "--cached", "--quiet",
"--", rel_file
])
if changed != 0:
message = "autosave " + datetime.datetime.now().strftime(
"%Y-%m-%d %H:%M:%S"
)
subprocess.call([
"git", "-C", repo,
"commit",
"-m", message,
"--", rel_file
])
notepad.callback(on_save, [NOTIFICATION.FILESAVED])
После перезапуска Notepad++ обработчик будет регистрироваться автоматически.
При каждом сохранении файла скрипт:
- получает путь сохранённого файла;
- через
git rev-parse --show-toplevel определяет его Git-репозиторий;
- добавляет в индекс только этот файл;
- создаёт commit, только если содержимое действительно изменилось.
Если открытый файл находится не в Git-репозитории, ничего не происходит.
Разумеется,
git должен быть установлен и доступен через
PATH, а файл должен находиться внутри уже созданного Git-репозитория.
Есть только один нюанс: стабильная версия PythonScript, устанавливаемая через Plugins Admin, всё ещё использует встроенный
Python 2.7. Поэтому скрипт написан без конструкций современных версий Python.
Если Git нужен только ради истории изменений одного текстового файла, то есть ещё более простой вариант — встроенный в Notepad++:
Settings → Preferences → Backup → Backup on save → Verbose backup
Он сохраняет отдельную предыдущую версию файла при каждом сохранении.
И ещё: локальный Git без
push — это история версий, но не полноценный backup. При потере диска вместе с рабочей папкой пропадёт и каталог
.git. Если нужна именно резервная копия, репозиторий надо периодически отправлять во внешнее хранилище.