1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
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\"
|