**Шаг 1: Создайте пользователя для репозиториев (рекомендуется)** Для безопасности лучше не использовать вашего основного пользователя или `root`. bash # На сервере sudo adduser git sudo su - git mkdir repos **Шаг 2: Создайте «голый» репозиторий для вашего проекта** bash #Находясь под пользователем git, в папке repos mkdir my-project.git cd my-project.git git init --bare Поздравляю! Серверная часть готова. Путь к репозиторию: `/home/git/repos/my-project.git` **Шаг 3: Настройте доступ по SSH (самый простой способ)** Сгенерируйте SSH-ключ на вашем рабочем компьютере (если еще нет): bash #На вашем компьютере (Windows, Mac, Linux) ssh-keygen -t ed25519 -C "your_email@example.com" Скопируйте публичный ключ на сервер: bash # На вашем компьютере ssh-copy-id git@IP-вашего-сервера **Шаг 4: Используйте репозиторий** Теперь вы можете работать с ним как с удаленным репозиторием, например, GitHub. **Вариант А: Создать новый проект и запушить его** bash # На вашем компьютере mkdir my-local-project cd my-local-project git init echo "# Мой проект" > README.md git add README.md git commit -m "Первый коммит" git remote add origin git@IP-вашего-сервера:/home/git/repos/my-project.git git push -u origin master **Вариант Б: Склонировать существующий пустой репозиторий** bash git clone git@IP-вашего-сервера:/home/git/repos/my-project.git ### 🚀 Полезные улучшения для «голого» Git Чтобы работа была комфортнее, добавьте несколько важных вещей. **1. Защита от перезаписи (очень важно для домашнего сервера!)** Добавьте эту настройку в «голый» репозиторий на сервере, чтобы случайно не затереть чужую работу (или свою же, но с другого компьютера): bash # На сервере, в папке /home/git/repos/my-project.git git config receive.denyNonFastForwards true **2. Упростите путь к репозиториям с помощью `~/.ssh/config`** На вашем _локальном_ компьютере отредактируйте файл `~/.ssh/config` (создайте, если нет): text Host home-server HostName IP-вашего-сервера User git Port 22 Теперь вместо `git@IP-вашего-сервера:/home/git/repos/my-project.git` вы можете писать: bash git remote add origin home-server:repos/my-project.git Намного короче и удобнее. **3. Быстрый просмотр содержимого (без клонирования)** Иногда нужно просто «посмотреть», какие коммиты и ветки есть на сервере, не клонируя весь репозиторий. Для этого есть команда: bash # На сервере, в папке с «голым» репозиторием git log --oneline --all git branch -a **4. Добавьте описание к репозиторию** bash # На сервере, в папке с «голым» репозиторием echo "Мой супер-проект для расчетов траектории кота" > description Это описание будет видно, например, в GitWeb или при просмотре через `git instaweb`. ### Как организовать несколько проектов? Просто создайте несколько папок в `/home/git/repos/`: text /home/git/repos/ ├── website.git ├── telegram-bot.git ├── home-automation.git └── useful-scripts.git Каждый из них — это независимый «голый» репозиторий со своей историей. ### 💾 Бэкапы для «голого» Git Здесь всё просто, потому что «голый» репозиторий — это просто обычная папка с файлами. Чтобы сделать бэкап всех ваших репозиториев: # На сервере или по SSH tar -czf git-backup-$(date +%Y%m%d).tar.gz /home/git/repos/ А потом скопируйте этот архив на внешний диск или в облако (согласно правилу 3-2-1). Для автоматизации добавьте в `crontab -e`: bash 0 2 * * * tar -czf /home/git/backups/git-$(date +\%Y\%m\%d).tar.gz /home/git/repos/ ### Итог: когда выбирать «голый» Git? «Голый» Git идеален, если: - Вы единственный разработчик (или команда из 2-3 доверенных человек) - Вам нужен просто надежный «склад» для кода - Сервер слабый (например, старенький Raspberry Pi или виртуалка с 256 MB RAM) - Вы любите минимализм и контроль через командную строку Если позже захотите веб-интерфейс, вы всегда можете поверх этих же «голых» репозиториев поставить **cgit** (очень легкий) или просто открыть к ним доступ через **GitWeb**, не меняя саму структуру хранения. ### Важное замечание о бэкапах Git-репозиториев Для бэкапа "голых" Git-репозиториев есть даже более правильный способ, чем `tar`: bash # Клонируйте репозиторий с зеркалированием (делает полную копию) git clone --mirror ~/repos/my.git /backups/my-backup.git # Или для всех репозиториев for repo in ~/repos/*.git; do git clone --mirror "$repo" "/backups/$(basename $repo)" done Этот метод лучше, потому что: - Сохраняет все ссылки и конфигурации - Позволяет проверить целостность - Легче восстановить (`git clone --mirror /backups/my-backup.git`) ### Оптимальная структура для бэкапов Вот как лучше организовать бэкапы на вашем сервере: bash # На сервере (под пользователем git) # Создайте структуру mkdir -p ~/backups/{daily,weekly,monthly} # Ежедневный бэкап tar -czf ~/backups/daily/git-backup-$(date +%Y%m%d).tar.gz ~/repos/ # Очистка старых бэкапов (например, удалять бэкапы старше 30 дней) find ~/backups/daily -name "git-backup-*.tar.gz" -mtime +30 -delete ### 🤖 Автоматизируйте бэкап с cron Добавьте в crontab, чтобы бэкап делался автоматически каждую ночь: bash # Редактируем crontab пользователя git crontab -e # Добавьте эту строку (делает бэкап каждый день в 2 часа ночи) 0 2 * * * tar -czf /home/git/backups/daily/git-backup-$(date +\%Y\%m\%d).tar.gz /home/git/repos/ && find /home/git/backups/daily -name "git-backup-*.tar.gz" -mtime +30 -delete ### 📥 Как восстановиться из бэкапа? Если что-то пойдет не так: # На сервере cd ~/backups # Распакуйте бэкап (замените дату на вашу) tar -xzf git-backup-20260613.tar.gz -C / # Или если хотите посмотреть содержимое бэкапа без распаковки tar -tzf git-backup-20260613.tar.gz | head -20 ### 💡 Важное дополнение Не забудьте про **правило 3-2-1**: - У вас есть оригинал (на сервере) ✅ - У вас есть бэкап (там же на сервере) ✅ - **Скопируйте этот бэкап на внешний диск или в облако** (например, на ваш YandexDisk или Google Drive) ❌ пока не сделано # На вашем локальном компьютере (Windows) scp git@v2670762:~/backups/git-backup-*.tar.gz "C:\Users\Villa-PC\YandexDisk\Backups\"