LINUX.ORG.RU

git: чистый репозиторий. данные


0

0

Разбираюсь с git.

Не могу понять такую вещь:

  • Есть локальный git-репозиторий, назовём его «A».
  • На его основе создаётся чистый (bare) репозиторий на git-сервере. При этом на сервере лежит только служебная информация.
  • Есть новый/другой удалённый пользователь, который хочет клонировать репозиторий проекта, с git-сервера. Естественно, что этот удалённый пользователь ничего не знает о локальном репозитории «А».

Вопрос: откуда _новый_ удалённый пользователь будет брать исходные тексты проекта? На сервере, их нет, как я понял, связь сервера с локальным git-репозиторием не обязана существовать.

★★★★★

Последнее исправление: Jurik_Phys (всего исправлений: 2)

Надо заpushить коммиты из А на сервер. После другой пользователь сpullит их к себе

(если я правильно понял вопрос)

megaplaks
()
Ответ на: комментарий от megaplaks

Удалённый репозиторий — это обычно голый (чистый, bare) репозиторий — Git-репозиторий, не имеющий рабочего каталога. Поскольку этот репозиторий используется только для обмена, нет причин создавать рабочую копию на диске, и он содержит только данные Git'а. Проще говоря, голый репозиторий содержит только каталог .git вашего проекта и ничего больше.

Т.е. исходных текстов проекта никаких нет. Дальше, вот тут описывают как создать удалённый репозиторий:

$ git clone --bare my_project my_project.git
Initialized empty Git repository in /opt/projects/my_project.git/
Комментарий: это примерно то же самое, что и это:
$ cp -Rf my_project/.git my_project.git
т.е., исходных текстов проекта нет. Дальше заливают полученный --bare репозиторий на сервер:
$ scp -r my_project.git user@git.example.com:/opt/git
И дальше:

Теперь другие пользователи могут склонировать ваш репозиторий, выполнив:

$ git clone user@git.example.com:/opt/git/my_project.git

Я так понимаю, что у новых пользователей должен появиться полноценный проект, со всей структурой каталогов, со всеми файлами. Но, откуда он тут может взяться?

Jurik_Phys ★★★★★
() автор топика
Ответ на: комментарий от Jurik_Phys

Он ещё при клонировании в репозитарий добавился. Не мучайся с копированием сделай логичней:

git@server:~/repo.git$ git init --bare

user@home:~/project$ git init
user@home:~/project$ git remote add origin git@server:repo.git
user@home:~/project$ git push origin master

Kalashnikov ★★★
()
Ответ на: комментарий от Jurik_Phys

т.е., исходных текстов проекта нет

Почему это? Ничего, что внутри .git лежат не только исходные тексты проекта, но и вся история их изменений?

Sorcerer ★★★★★
()
Ответ на: комментарий от Jurik_Phys

$ git clone user@git.example.com:/opt/git/my_project.git

Скачается служебная директория и описание репа, а когда на сервер уже зальют какие-то коммиты, то в рабочей директории надо будет просто

git pull

megaplaks
()
Ответ на: комментарий от Sorcerer

Разобрался!

Ничего, что внутри .git лежат не только исходные тексты проекта, но и вся история их изменений?

Прогнал тестовый пример, всё встало на свои места. Я только разбираюсь и вот эта фраза меня ввела в заблуждение:

Удалённый репозиторий — это обычно голый (чистый, bare) репозиторий — Git-репозиторий, не имеющий рабочего каталога. ... он содержит только данные Git'а.

Очень не явно, что данные git'a содержат сам проект.

P.S. Спасибо ЛОР!

Jurik_Phys ★★★★★
() автор топика
Последнее исправление: Jurik_Phys (всего исправлений: 1)
Ответ на: Разобрался! от Jurik_Phys

лол, а что ещё он может содержать? Откуда он например diff предыдёщих ревизий брать будет, если НЕ хранит исходники проекта.

anonymous
()
Ответ на: комментарий от anonymous

лол, а что ещё он может содержать?

У меня была идея такая (до этого никогда с системами контроля версий не имел дела, думал, это что-то очень туманное и сложное): .git содержит diff предыдущих ревизий, рабочий каталог содержит исходые файлы, на которые эти diff'ы накладываются.

Всё из-за слов в статьях чистый, пустой, плюс были «песни», что серверу не требуется много рессурсов, мол, он не содержит рабочего каталога и т.д.

Jurik_Phys ★★★★★
() автор топика
Ответ на: комментарий от Jurik_Phys

git содержит diff предыдущих ревизий

он не diffы хранит, а файлы целиком в сжатом виде

dt1 ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.