# Tirage Git planifié — clones `projects/*/conf.json` ## Comportement Le script [`git-pull-project-clones.sh`](./git-pull-project-clones.sh) parcourt [`../projects//`](../projects/) (fichiers `conf.json`), lit **`project_path`**, et pour chaque dépôt Git : 1. **`git fetch origin `** 2. si **`origin/`** est en avance en **fast-forward** → **`git merge --ff-only origin/`** 3. sinon → message explicite, **pas** de merge forcé ## Configuration centralisée | Fichier | Rôle | |---------|------| | [`config.env`](./config.env) | **Versionné** : `PULL_SYNC_ENABLED`, `PULL_SYNC_MODE` (`all` \| `project`), `PULL_SYNC_PROJECT_ID`, `PULL_SYNC_LOG` | | `config.local.env` | **Optionnel, non versionné** (voir [`config.local.env.example`](./config.local.env.example)) — surcharge machine | Le script [`git-pull-wrapper.sh`](./git-pull-wrapper.sh) charge ces fichiers puis appelle `git-pull-project-clones.sh` et **append** la sortie dans `PULL_SYNC_LOG` (défaut : **`logs/git-pull-projects.log`** à la racine du dépôt — voir [`logs/README.md`](../logs/README.md)). ## Mise en place recommandée : systemd utilisateur Depuis la racine du dépôt **smart_ide** : ```bash ./scripts/install-git-pull-systemd-user.sh ``` Cela installe sous `~/.config/systemd/user/` : - `git-pull-project-clones.service` (généré depuis [`../systemd/user/git-pull-project-clones.service.in`](../systemd/user/git-pull-project-clones.service.in)) - `git-pull-project-clones.timer` ([`../systemd/user/git-pull-project-clones.timer`](../systemd/user/git-pull-project-clones.timer)) — **toutes les 15 minutes** (`OnCalendar=*:0/15`) Commandes utiles : ```bash systemctl --user status git-pull-project-clones.timer systemctl --user list-timers | grep git-pull journalctl --user -u git-pull-project-clones.service -n 50 --no-pager ``` Pour changer la fréquence : éditer le fichier **timer** dans le dépôt, relancer `install-git-pull-systemd-user.sh`, ou éditer directement `~/.config/systemd/user/git-pull-project-clones.timer` puis `systemctl --user daemon-reload`. ## Prérequis - **`jq`** - Clones avec remote **`origin`** et branche suivie (ex. `test`) ## Désactiver un projet Dans `projects//conf.json` : `"cron": { "git_pull": false }`. Pour **tout** arrêter : `PULL_SYNC_ENABLED=0` dans `config.env` ou `config.local.env`, ou `systemctl --user disable --now git-pull-project-clones.timer`. ## Crontab (alternative) Si tu préfères cron au lieu de systemd : une ligne qui appelle **`./cron/git-pull-wrapper.sh`** (pas besoin de redéfinir les variables si tu utilises uniquement `config.env`). Fragments : [`fragments/`](./fragments/) (à aligner sur le wrapper). ## Hooks AnythingLLM Un **`post-merge`** sur un clone peut s’exécuter après un `merge --ff-only` : voir [`scripts/anythingllm-pull-sync`](../scripts/anythingllm-pull-sync/).