1. Видалення файла з відстеження (збереження на диску)

Щоб припинити відстеження файла системною контролю версій Fossil, але залишити його у робочому каталозі:

fossil forget path/to/file.ext
fossil commit -m "Stop tracking path/to/file.ext"

2. Організація self-hosted сервера Fossil (Arch Linux)

Встановлення

sudo pacman -S fossil

Дисковий простір та структура

Fossil використовує базу даних SQLite (.fossil). Рекомендоване дерево каталогів:

/srv/fossil/
├── repos/             # Бази даних проєктів (.fossil)
│   ├── project1.fossil
│   └── project2.fossil
├── checkout/          # Робочі копії (за потреби)
└── backups/           # Резервні копії

Примітка: Для файлових систем Btrfs рекомендується вимикати Copy-on-Write (chattr +C /srv/fossil/repos).

Створення системного користувача

sudo useradd -r -s /usr/bin/nologin -d /srv/fossil fossil
sudo mkdir -p /srv/fossil/{repos,backups}
sudo chown -R fossil:fossil /srv/fossil
sudo chmod -R 750 /srv/fossil

Автозапуск сервісу (Systemd)

Файл /etc/systemd/system/fossil.service:

[Unit]
Description=Fossil SCM Server
After=network.target

[Service]
Type=simple
User=fossil
Group=fossil
ExecStart=/usr/bin/fossil server --port 8080 /srv/fossil/repos/
Restart=always
RestartSec=3

ProtectSystem=full
ProtectHome=true
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

Запуск та автозавантаження:

sudo systemctl daemon-reload
sudo systemctl enable --now fossil

3. Документація в проєкті (Embedded Documentation)

Fossil підтримує вбудовану документацію (Markdown файли в проєкті):

  • Документація зберігається і версіонується разом з кодом (наприклад, у папці doc/ чи docs/).
  • Відкривається через веб-інтерфейс за адресою:
    http://IP-сервера:8080/назва_проєкту/doc/trunk/docs/index.md

4. Перенос існуючого локального репозиторію на сервер

Спосіб 1: Клон по SSH (рекомендований)

# Локально:
fossil clone /path/to/local/myproject.fossil ssh://user@server_ip//srv/fossil/repos/myproject.fossil

# На сервері:
sudo chown fossil:fossil /srv/fossil/repos/myproject.fossil

Спосіб 2: SCP та налаштування remote-url

# Локально:
scp /path/to/local/myproject.fossil user@server_ip:/tmp/

# На сервері:
sudo mv /tmp/myproject.fossil /srv/fossil/repos/
sudo chown fossil:fossil /srv/fossil/repos/myproject.fossil

# Локально у папці проєкту:
fossil remote-url http://server_ip:8080/myproject

5. Обмеження доступу та авторизація

Вимкнення анонімного доступу у Fossil

При запуску команди поза робочим каталогом потрібно обов'язково вказувати -R:

fossil user capabilities nobody "" -R /srv/fossil/repos/project.fossil
fossil user capabilities anonymous "" -R /srv/fossil/repos/project.fossil
# Додаємо користувача нового користувача
fossil user new devuser "DEV" "YOUR_SECRET_PASSWORD" -R /srv/fossil/repos/user.fossil
fossil user capabilities devuser "v-o-r" -R /srv/fossil/repos/user.fossil

Синхронізація після закриття анонімного доступу

Щоб виправити помилку Error: not authorized to read, вкажіть користувача в URL синхронізації:

# Встановлення нового URL з вказанням користувача
fossil remote-url http://devuser@repo.example.com:8083/project

# Запуск синхронізації та збереження пароля
fossil sync

6. Nginx Reverse Proxy з Basic Auth (опціонально)

Файл /etc/nginx/sites-available/fossil.conf:

server {
    listen 80;
    server_name fossil.yourdomain.com;

    location / {
        return 404;
    }

    location ~ ^/(project1|project2)(/.*)?$ {
        auth_basic "Fossil Private Area";
        auth_basic_user_file /etc/nginx/.fossil_htpasswd;

        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}