# Silverbullet : synchronisation Git

Utilisation de Git pour synchroniser et historiser les changements du répertoires des notes de Silverbullet.

Etapes à prévoir:
1. Créer un dépôt Git dans Forgejo
2. Se connecter au serveur via SSH
3. Initier le dépôt Git Silverbullet
4. Créer un script Bash de commit automatique
5. Définir un CRON pour exécuter le script de commit à intervalle régulier

## 1. Créer un dépôt Git dans Forgejo

Se connecter à Forgejo (https://forgejo.shizendo.ovh/) et créer un dépôt Git privé `shizendo-notes`.
Initier le dépôt Git.


## 2. Se connecter au serveur via SSH 

```bash
ssh shizendo@shizendo.ovh -p 2022
```


## 3. Initier le dépôt Git Silverbullet

Initier le dépôt  avec l’utilisateur `silverbullet`.

```sh
cd /home/yunohost.app/silverbullet/notes/
sudo -u silverbullet git init
sudo -u silverbullet git config --global credential.helper store
sudo -u silverbullet git config --global user.name "Guillaume RYCKELYNCK"
sudo -u silverbullet git config --global user.email "guillaume@ryckelynck.info"
sudo -u silverbullet git switch -c main
sudo -u silverbullet git add .
sudo -u silverbulletgit commit -m "first commit"
sudo -u silverbullet git push -u origin main
```

Créer un fichier .gitignore

```sh
sudo -u silverbullet nano .gitignore
```

```
Caches de SilverBullet
.silverbullet/
*.log
*.tmp
*.bak

# Fichiers spécifiques à Unison
*.unison.*
.unison.*

# Fichiers spécifiques à Syncthing
.stfolder/
.stfolder*
.syncthing*
*~syncthing~*
syncthing*.db
syncthing*.log

# Fichiers de conflit ou de verrouillage
*.swp
*.swo
*~
.DS_Store

# Fichiers temporaires de Nextcloud
*.part
*.file
.nextcloud/

```


## 4. Créer un script Bash de commit automatique

Créer un fichier bash pour mettre à jour le dépôt Git.

```sh
cd /home/yunohost.app/silverbullet/
sudo -u silverbullet mkdir git-sync
sudo -u silverbullet nano git-sync/git-sync.sh
```

Contenu du script *.sh de commit Git.

```bash
#!/bin/bash

NOTES_DIR="/home/yunohost.app/silverbullet/notes"
cd "$NOTES_DIR"

echo "---"
echo "Silverbullet Git sync : $(date -Iseconds)"

# Basculer vers la branche principale 'main'
git checkout main || { echo "Erreur : impossible de basculer sur la branche main"; exit 1; }
git pull || { echo "Erreur lors du git pull"; exit 1; }

# Ajouter tous les changements à l'index
git add -A

# Vérifier s'il y a des changements dans l'index
if ! git diff-index --quiet HEAD; then
    # Commiter les changements
    git commit -m "Auto commit $(date -Iseconds)" || { echo "Erreur lors du git commit"; exit 1; }
    # Pousser les changements vers le dépôt distant
    git push origin main || { echo "Erreur lors du git push"; exit 1; }
    echo "Synchronisation terminée avec succès (changements commités et poussés)."
    echo "Message : 'Auto commit $(date -Iseconds)'"
else
    echo "Aucun changement à commiter."
fi

echo "---"
```

Ce script ne se lance pas tout seule. Il faut définir un CRON pour l’exécuter périodiquement.

## 5. Définir un CRON

L’objectif est d’exécuter le script de synchronisation à intervalle régulier (5 minutes).

Il faut éditer le fichier `crontab` avec l’utilisateur `silverbullet`.

```bash
sudo crontab -u silverbullet -e
```

Contenu du fichier `crontab`.

```bash
*/5 * * * * /usr/bin/bash /home/yunohost.app/silverbullet/git-sync/git-sync.sh >> /home/yunohost.app/silverbullet/git-sync/git-sync.log 2>&1
```

Les résultats de synchronisation sont inscrits dans le fichier `git-sync.log`.

```bash
tail -f /home/yunohost.app/silverbullet/git-sync/git-sync.log
```