summaryrefslogtreecommitdiff
path: root/GIT_new-2.md
diff options
context:
space:
mode:
Diffstat (limited to 'GIT_new-2.md')
-rw-r--r--GIT_new-2.md218
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\"
+
+