diff options
Diffstat (limited to 'GIT_new-2.md')
| -rw-r--r-- | GIT_new-2.md | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/GIT_new-2.md b/GIT_new-2.md new file mode 100644 index 0000000..b7a126b --- /dev/null +++ b/GIT_new-2.md @@ -0,0 +1,218 @@ +**Шаг 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\" + + |
