# Tirage Git planifié — clones `projects/*/conf.json` ## Comportement Le script `cron/git-pull-project-clones.sh` parcourt `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 | |---------|------| | `cron/config.env` | **Versionné** : `PULL_SYNC_ENABLED`, `PULL_SYNC_MODE` (`all` \| `project`), `PULL_SYNC_PROJECT_ID`, `PULL_SYNC_LOG` | | `cron/config.local.env` | **Optionnel, non versionné** (`cron/config.local.env.example`) — surcharge machine | Le script `cron/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`** — voir [logs-directory.md](./logs-directory.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`) - `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`. Détail des unités : [systemd-units.md](./systemd-units.md). ## 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 `cron/fragments/*.cron` Fichiers **commentés** servant de rappel ; la configuration **centralisée** reste dans `cron/config.env`. En **systemd utilisateur** (recommandé) : `scripts/install-git-pull-systemd-user.sh`. ## Hooks AnythingLLM Un **`post-merge`** sur un clone peut s’exécuter après un `merge --ff-only` : voir `scripts/anythingllm-pull-sync/` et [script-anythingllm-pull-sync.md](./script-anythingllm-pull-sync.md).