Приватный репозиторий git представляет собой часть файловой системы, являющуюся хранилищем данных и репозиторием инициализированным при помощи git init. В отличие от github, где можно размещать только репозитории с публичным доступом приватный репозиторий можно организовать на собственном сервере в специально выделенном для этих целей каталоге.
Настройки необходимо производить как в локальном репозитории из которого будут отправляться данные, так и на удаленной машине. В примере — на виртуальном сервере в корневом каталоге /tmp
На локальном сервере:
Перейдем в каталог, который будет использоваться в качестве локального репозитория и в котором будут размещаться файлы проекта
cd ~123/
Инициализируем репозиторий
git init
Указываем, что внешний репозиторий будет иметь адрес 123.123.123.123 .
Адрес взят для примера, реальный можно посмотреть выполнив ip a на удаленной машине.
Пример:
git remote add origin 123.123.123.123
Создадим тестовый файл с произвольным содержимым
mcedit 1.txt
Hello
Добавляем файл в индекс
git add 1.txt
Просмотрев статус можно вывести список всех измененных файлов, готовых для commit-а
git status
# On branch master
# Initial commit
# Changes to be committed:
# (use «git rm —cached <file>…» to unstage)
# new file: 1.txt
Представляемся указывая имя и адрес электронной почты
git config --global user.email "[email protected]"
git config --global user.name "server admin"
Коммитим изменения добавляя в качестве комментария слово first
git commit -m 'first'
[master (root-commit) 5d81a6d] first
1 files changed, 7 insertions(+)
create mode 100755 1.txt
Пробуем отправить данные в удаленный репозиторий
git push origin master
fatal: '123.123.123.123' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
На удаленном сервере:
cd /tmp
git init
На локальном сервере:
Чтобы исправить возникшую ранее ошибку выполняем следующую команду устанавливая полный путь к репозиторию
git remote set-url origin 123.123.123.123:/tmp
Повторяем попытку отправить данные
git push origin master
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Такая ошибка может возникнуть если на локальной машине мы работаем не от имени root, исправить можно так:
git remote set-url origin [email protected]:/tmp
git push origin master
Сейчас запрашивается SSH пароль root на удаленном сервере, это означает, что подключиться получилось.
Данные после ввода пароля вновь не передаются, возникает сообщение оканчивающееся на
! [remote rejected] master -> master (branch is currently checked out)
На удаленном сервере:
Чтобы данные передавались нужно переключиться из дефолтной ветки master на удаленной машине
git checkout -b newbrunch
На локальном сервере:
git push origin master
Counting objects: 3, done.
Delta compression using up to 16 threads.
Compressing objects: 100% (1/1), done.
Writing objects: 100% (3/3), 913 bytes | 0 bytes/s, done.
Total 8 (delta 0), reused 0 (delta 0)
To [email protected]:/tmp
* [new branch] master -> master
Передача данных удалась
На удаленном сервере:
Сейчас если просмотреть содержимое каталога, который используется как репозиторий только что переданного файла 1.txt в нем не будет
ls -al
total 24
drwxrwxrwt 6 root root 4096 Дек 21 18:00 .
drwxr-xr-x 23 root root 4096 Янв 11 2016 ..
drwxr-xr-x 8 root root 4096 Дек 21 18:04 .git
Причина в том, что мы находимся в ветке newbrunch, изменения же были отправлены в master
Переключаемся на ветку master
git checkout master
Switched to branch 'master'
Сейчас в выводе ls будет тестовый файл, что означает, что он добавлен в репозиторий успешно. При необходимости его можно скачать с машины выполнив git pull [email protected]:/tmp/.
При этом потребуется ввести пароль root пользователя на сервере. Эта защищенность означает, что фактически создан приватный репозиторий git.
Его можно использовать для одного проекта, в случае если проектов и разработчиков много гораздо удобнее работать с предназначенными для хранения репозиториев решениями.
Самые популярные из них это Gitlab и Jenkins.
Репозиторий можно использовать как по прямому назначению — для упрощения процесса разработки, так и для деплоя приложений