Я читал о репозиториях «голые» и «не голые / по умолчанию» в Git. Я не смог понять (теоретически) достаточно хорошо о различиях между ними и о том, почему я должен «подтолкнуть» к пустому хранилищу. Вот сделка:
В настоящее время я единственный, кто работает над проектом на 3 разных компьютерах, но позже в него будет вовлечено больше людей, поэтому я использую Git для контроля версий. Я клонирую голое репо на всех компьютерах, и когда я заканчиваю свои модификации на одном из них, я фиксирую и помещаю изменения в голое репо. Из того, что я прочитал, пустой репозиторий НЕ имеет «рабочего дерева», поэтому, если я клонирую пустой репозиторий, у меня не будет «рабочего дерева».
Я предполагаю, что рабочее дерево хранит информацию о коммите, ветвях и т. Д. Из проекта. Это не появится в голом репо. Так что, мне кажется, лучше «протолкнуть» коммиты в репо с рабочим деревом.
Тогда почему я должен использовать пустой репозиторий, а почему нет? В чем практическая разница? Полагаю, это было бы не выгодно большему количеству людей, работающих над проектом.
Какие у вас методы для такой работы? Предложения?
источник
git clone
вы можете свободно конвертировать между открытыми и открытыми хранилищами.git clone --bare
вы получите голое репо, а если вы побежитеgit clone
, вы получите не голое. Каждый общедоступный проект, который вы когда-либо клонировали (например, на github), представляет собой пустой репозиторий на другом конце.Ответы:
Еще одно различие между пустым и не пустым хранилищем заключается в том, что в пустом хранилище нет удаленного исходного хранилища по умолчанию :
Со страницы руководства для
git clone --bare
:Предположительно, когда он создает пустой репозиторий, Git предполагает, что пустой репозиторий будет служить репозиторием источника для нескольких удаленных пользователей, поэтому он не создает удаленный источник по умолчанию. Это означает, что basic
git pull
иgit push
операции не будут работать, поскольку Git предполагает, что без рабочей области вы не собираетесь вносить какие-либо изменения в пустой репозиторий:источник
git clone --no-checkout
может также создать и не-пустое хранилище без файлов рабочей области.git init
, что создаст непроявленное хранилище без указания удаленного.clone
отредактирован. Если оно былоinit
отредактировано локально, оно не будет иметь такого происхождения. Это не имеет никакого отношения к тому, является ли это голым или нет.Различие между «пустым» и «не пустым» Git-репозиториями является искусственным и вводящим в заблуждение, поскольку рабочая область не является частью репозитория, а для репозитория не требуется рабочая область. Строго говоря, репозиторий Git включает в себя те объекты, которые описывают состояние репозитория. Эти объекты могут существовать в любом каталоге, но обычно существуют в
.git
каталоге в каталоге верхнего уровня рабочей области. Рабочая область - это дерево каталогов, которое представляет определенный коммит в хранилище, но оно может существовать в любом каталоге или не существовать вообще. Переменная окружения$GIT_DIR
связывает рабочее пространство с хранилищем, из которого оно происходит.Команды Git
git clone
иgit init
обе имеют опции,--bare
которые создают репозитории без начальной рабочей области. К сожалению, Git объединяет две отдельные, но взаимосвязанные концепции рабочего пространства и хранилища, а затем использует запутанный термин « голый» для разделения двух идей.источник
Пустой репозиторий - это не что иное, как сама папка .git , т.е. содержимое пустого репозитория такое же, как содержимое папки .git внутри вашего локального рабочего репозитория.
источник
5 лет опоздал, я знаю, но на самом деле никто не ответил на вопрос:
Цитировать прямо из книги Loeliger / MCullough (978-1-449-31638-9, p196 / 7):
источник
Неполное хранилище просто имеет проверенное рабочее дерево. Рабочее дерево не хранит никакой информации о состоянии хранилища (ветви, теги и т. Д.); скорее, рабочее дерево - это просто представление реальных файлов в репо, которое позволяет вам работать (редактировать и т. д.) с файлами.
источник
git clone --no-checkout
. В этом случае в репозитории non-bare есть место для рабочей области, но Git не извлекает файлы в эту рабочую область.Чистое хранилище имеет преимущества в
источник
Репозиторий Non голый позволяет (в ваше рабочее дерево) записывать изменения, создавая новые коммиты.
Голые репозитории изменяются только путем переноса изменений из других репозиториев.
источник
Я, конечно, не Git "эксперт". Я какое-то время пользовался TortoiseGit и удивлялся, о чем идет речь, когда меня спрашивали, хочу ли я делать «голое» репо всякий раз, когда я его создаю. Я читал этот учебник: https://www.atlassian.com/git/tutorials/setting-up-a-repository/git-init, и в нем рассматривается проблема, но я все еще не совсем понял концепцию. Это очень помогло: http://bitflop.com/tutorials/git-bare-vs-non-bare-repositories.html . Теперь первый тоже имеет смысл!
Согласно этим источникам, в двух словах, «голое» репо используется на сервере, где вы хотите настроить точку распространения. Он не предназначен для использования на вашей локальной машине. Обычно вы отправляете коммиты с вашего локального компьютера в пустое хранилище на удаленном сервере, а вы и / или другие извлекаете из этого пустого хранилища на локальный компьютер. Таким образом, ваш репозиторий GitHub, Assembla и т. Д. Представляет собой пример, где создается «голое» репо. Вы бы сделали его самостоятельно, если бы настраивали собственный аналогичный «центр обмена».
источник
Репозиторий Git по умолчанию / не пустой содержит два состояния:
Снимок является то , что вы , вероятно , думаете , как ваш проект: ваш код файлы, файлы сборка, вспомогательные скрипты, и все , что вы версия с Git.
История является состоянием , которое позволяет проверить различные фиксации и получить полную картину того , что файлы в вашем хранилище выглядят, когда, выделяющая было добавлено. Он состоит из набора структур данных, которые являются внутренними для Git, с которыми вы, вероятно, никогда не взаимодействовали напрямую. Важно отметить, что история не просто хранит метаданные (например, «Пользователь U добавил столько строк в файл F в момент времени T как часть фиксации C»), но также хранит данные (например, «Пользователь U добавил эти точные строки в файл F»). ).
Основная идея чистого репозитория заключается в том, что вам на самом деле не нужно делать снимок. Git сохраняет моментальный снимок, потому что это удобно для людей и других не-Git-процессов, которые хотят взаимодействовать с вашим кодом, но моментальный снимок просто дублирует состояние, которое уже есть в истории.
Голое хранилище представляет собой хранилище Git , который не имеет снимка. Это просто хранит историю.
Зачем тебе это? Что ж, если вы собираетесь взаимодействовать со своими файлами только с помощью Git (то есть вы не собираетесь редактировать свои файлы напрямую или использовать их для создания исполняемого файла), вы можете сэкономить место, не сохраняя снимок. В частности, если вы поддерживаете централизованную версию своего репо на каком-либо сервере (то есть вы в основном размещаете свой собственный GitHub), этот сервер, вероятно, должен иметь голое репо (вы все равно будете использовать неполное репо на своем сервере). локальный компьютер, хотя, так как вы, вероятно, захотите отредактировать ваш снимок).
Если вы хотите получить более подробное объяснение простых репозиториев и другого примера использования, я написал сообщение в блоге здесь: https://stegosaurusdormant.com/bare-git-repo/
источник
Это не новый ответ, но он помог мне понять различные аспекты ответов выше (и это слишком много для комментария).
Используя Git Bash, просто попробуйте:
То же самое с
git --bare
:источник
$ git help repository-layout
источник