Задать вопрос
  • Как сделать автокоммит текстового файла в git при сохранении в Notepad++?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Можно сделать прямо внутри Notepad++ через плагин PythonScript.

    У PythonScript есть событие NOTIFICATION.FILESAVED, на которое можно повесить git add и git commit. Отдельный watcher или NppExec для этого не нужен.

    Проверил у себя — работает.

    Установка и настройка

    1. Открыть Plugins → Plugins Admin....
    2. Найти PythonScript, отметить его и нажать Install. Notepad++ после установки перезапустится.
    3. Открыть Plugins → PythonScript → Configuration....
    4. Для Initialisation выбрать ATSTARTUP. Заодно полезно включить Automatically open console on error, чтобы ошибки скрипта сразу были видны.
    5. Открыть Plugins → PythonScript → Scripts и startup (User). Если пользовательского startup.py ещё нет — создать через Plugins → PythonScript → New Script файл с именем startup.py.
    6. Вставить в него следующий код и сохранить:


    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++ обработчик будет регистрироваться автоматически.

    При каждом сохранении файла скрипт:

    1. получает путь сохранённого файла;
    2. через git rev-parse --show-toplevel определяет его Git-репозиторий;
    3. добавляет в индекс только этот файл;
    4. создаёт 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. Если нужна именно резервная копия, репозиторий надо периодически отправлять во внешнее хранилище.
    Ответ написан
    3 комментария
  • Выгорание, куда расти сисадмину?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Когда в компании бардак и куча рутины - это идеальное место для практики по наведению порядка, разработке и внедрению автоматизации. Ни один начальник никогда не откажет подчинённому, готовому за те же деньги реализовывать рационализацию.
    Ответ написан
    Комментировать
  • В чем разница между git fetch и git pull? Когда что использовать?

    opium
    @opium
    Просто люблю качественно работать
    fetch тянет данные с сервера и обновляет origin/main, а твою текущую ветку не трогает: можно спокойно глянуть что нового - git log HEAD..origin/main или git diff HEAD..origin/main, и решить самому - мержить или ребейзить. pull это тот же fetch плюс сразу merge (или rebase если настроено), поэтому конфликты вылезают только на этом шаге, сам fetch их вызвать не может. Юзай fetch когда хочешь сначала посмотреть что прилетело, pull когда сразу готов принимать.
    Ответ написан
    Комментировать
  • Почему наблюдаются массовые потери пакетов на магистральных узлах МТС (AS12389) при доступе к внешним ресурсам?

    @Drno
    после кого \ чего \ каких событий, в стране начались у всех проблемы с интернетом?)
    Ответ написан
    3 комментария
  • Метка тома системного раздела Linux?

    opium
    @opium
    Просто люблю качественно работать
    ставил при установке ubuntu — всё нормально. Метка это просто имя раздела для человека, на работу fs не влияет. Единственное — сделай её уникальной (если несколько дисков), иначе при монтировании по LABEL= будет путаница.
    Ответ написан
    Комментировать
  • Как запретить пользователю авторизацию через одноименного системного пользователя?

    opium
    @opium
    Просто люблю качественно работать
    Если нужно именно разделить пространства имён — в sssd.conf ставь use_fully_qualified_names = True. Тогда AD-юзер логинится как user@DOMAIN, а просто user — это строго локальный. Часто это и есть правильное решение.

    Если хочешь именно заблокировать локальный аккаунт — usermod -L имя отрубает пароль (но SSH-ключ всё равно сработает), а usermod --expiredate 1 имя истекает сам аккаунт полностью.

    По документации — sssd.io, там нормально всё разжёвано.
    Ответ написан
    4 комментария
  • Проект для программирования?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    Генератор идей для ВУЗовских проектов
    Ответ написан
    Комментировать
  • Как отключить окно при подключении по RDP Windows 11?

    1. Microsoft усилила защиту Windows от вредоносных RD...
    2. попробовать mRemoteNG или другие менеджеры подключений к удалённым системам
    Ответ написан
    1 комментарий
  • Как в PostgreSQL организовать синхронизацию данных между геораспределенными копиями?

    opium
    @opium
    Просто люблю качественно работать
    Если пишешь только в одну точку, а Сингапур readonly — async streaming replication, самый простой вариант. Multi-master в постгресе из коробки нет нормального: logical replication конфликты не резолвит автоматом и может встать. Из реального есть EDB PGD (бывший BDR), но платное. Для игрового бекенда имхо проще шардить по регионам на уровне приложения, а общие данные типа лидербордов гонять через очередь.
    Ответ написан
    6 комментариев
  • Как в crontab удалять папку после поиска этой папки?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Ну например:
    rm -rf `find / -name kinsing`
    rm -rf $(find / -name kinsing)
    Ответ написан
    Комментировать
  • Как в crontab удалять папку после поиска этой папки?

    @SunTechnik
    До кучи:
    find / -name kinsing -exec rm -rf {} \;

    По хорошему, любое регулярное задание должно формировать логи своей работы, слать оповещение при ошибках и при нормальном выполнении. А значить простой командой уже не обойдешься и правильнее, как говорил Константин написать нормальный скрипт, который уже и запускать в cron.
    Ответ написан
    4 комментария
  • Как в crontab удалять папку после поиска этой папки?

    @pfg21
    ex-турист
    в find есть прям специальная опция -delete которая удаляет найденное.

    но !! есть проблемма что такой пункт отсутствует в каких-то там стандартах и воообще....
    так что вместо удобной -delete используется громоздкая но стандартная опция -exec rm -rf {} \;
    Ответ написан
    4 комментария
  • Как выложить исполняемый файл на Github?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Что за чужой проект? Какая у него лицензия? Зависит от этого, т.к. есть разные. Например, тот же самый GPL требует вместе с бинарями распространять и исходный код, а другие (MIT) разрешают. Поищи там LICENCE файл.

    Но, честно говоря, я не думаю, что на тебя будут иски подавать. На твоем месте я бы поступил так:

    1. Создал репозиторий с единственным README
    2. В нем написал: "проект не мой, он отсюда ... я его скомпилировал под эту архитектуру"
    3. Сам бинарь лучше закинуть в releases (там можно пакеты/бинари заружать, для этого и используется)
    Ответ написан
    1 комментарий
  • Откуда мог взяться .DS_Store на винде?

    Просто кто-то кто сидит на маке закоммитил её в репозиторий, вот она и появилась в node_modules.
    Чтобы это проверить - посмотрите в репозитории этих библиотек на github.

    Обычно её кладут в .gitignore, но так делают не все и если её закоммитили до того как добавили в gitignore, то можно потом не заметить, что она осталась, так как на маке она скрыта.

    UPD: А, вопрос про ds_store в корне проекта, а не про node_modules
    Ответ написан
  • Как принимающая сторона сопоставляет пакеты с сообщениями при передаче данных по сети?

    @66demon666
    Сетевой админ, АТС-админ
    Этот момент описан в RFC по TCP и полезнее для Вас же будет изучить этот момент самостоятельно. Вопрос простой, только вот непонятно почему он прозвучал на собесе на разработчика C++, если в вакансии не было заявлено хорошее понимание TCP/IP
    Ответ написан
    3 комментария
  • Как правильно удалять старые данные из индексов elasticsearch?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    У нас куча индексов, по индексу на день, примерно по 2.5М документов за сутки и размером от 800Мб до 1.8Гб каждый. Данные держим за 6 месяцев - около 200 индексов всего.
    Старые индексы удаляем, используем алиасы и темплейты индексов.
    Система работает на эластике 5.5 - геморно, иногда подтормаживает и жрет кучу ресурсов.

    Так вот, вот прямо в этот момент тестирую замену эластику - https://docs.victoriametrics.com/victorialogs/
    Нет, это не полная замена эластику, но для наших задач подходит идеально. Да, другой язык запросов, нужно переделывать.

    Документы - логи работы плееров примерно такого формата (это как раз достал из victorialogs)
    {"_time":"2026-01-08T15:00:04.891Z","_stream_id":"0000000000000000e934a84adb05276890d7f7bfcadabe92","_stream":"{}","_msg":"@{START} 04-9452_XXXXX_short_75.mp3","category":"@{WERBUNG}","component":"@{AUDIOPLAYER} @{CAHNNEL} 1","deviceid":"XXX00000090","event.TRACKID":"73267","event.TYPE":"WERBUNG","event.WERBUNGMODE":"PLAYLIST","unixtime":"1767884404891"}

    Основные преимущества - нагрузка раз в 5 меньше, размер данных меньше раз в 10. Прогрузив те же самые логи за 2 недели - данные заняли 708Мб вместо 30Гб! Есть фасеты, автоматическое удаление старых данных, очень шустро работает. Умеет принимать документы по эластик-булк-api!
    Для запуска практически ничего не нужно - вот строчка, чтобы прогрузить архивные данные за 3 месяца и уничтожать документы после 6 месяцев
    /opt/victoria/victoria-logs-prod -storageDataPath=data -maxBackfillAge=3M -retentionPeriod=6M


    В общем - настоятельно рекомендую присмотреться.
    Ответ написан
    Комментировать
  • Как посчитать серьёзность отклонения числа от набора других чисел?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Для начала математически определить, что такое "серьёзность" отклонения. Это зависит не от чисел, а от той модели, которая лежит в их основе. В вашем случае, например, я вообще не вижу никакого отклонения, поскольку 22 явно попадает в диапазон возможных значений 5...43.
    Скорее всего, у вас проблема XY и вы ищете решение не той задачи.
    Ответ написан
    6 комментариев
  • Самодельный CDN с GeoDNS для трафика из РФ и других стран?

    @d-stream
    Готовые решения - не подаю, но...
    Чем плохо просто два сайта site.com и site.ru хостить в разных местах?
    Ответ написан
    Комментировать
  • Как засудить провайдера за ограничения к иностранному VPS?

    @AlexVWill
    Вы так пишете: "подать в суд", "юридические перспективы", "Подача иска" как будто живете в правовом государстве. У вас до сих пор иллюзия что политические вопросы (а вопрос, безусловно политический, хотя и затрагивает сферу гражданско-правовых отношений) вы можете решать в судебном порядке?
    Ответ написан
    3 комментария
  • Как с помощью ansible создать VM на Amazon AWS и сразу же установить пакеты?

    @MaxKozlov
    Возможно

    Сначала используешь что-то из этого

    AWS Collection

    Потом это

    Package manager
    Ответ написан
    2 комментария