What's the -practical- difference between a Bare and non-Bare repository?

I've been reading about the bare and non-bare / default repositores in Git. I haven't been able to understand quite well (theoretically) about the differences between them, and why I should "push" to a bare repository. Here's the deal:

Currently, I'm the only one working on a project on 3 different computers, but there will be more people involved in it later, so I'm using Git for the version control. I clone the bare repo on all computers, and when I finish my modifications on one of them, I commit and push the changes to the bare repo. From what I've read, the bare repository does NOT have a "working tree", so if I clone the bare repo, I won't have a "working tree".

I'm guessing that the working tree stores the commit information, branches, etc. from the project. That wouldn't appear in the bare repo. So it seems better for me to "push" the commits to the repo with the working tree.

Then, why should I use the bare repository and why not? What's the practical difference? That would not be beneficial to more people working on a project, I suppose.

What are your methods for this kind of work? Suggestions?

187
задан CharlesB 27 August 2012 в 02:39
поделиться

1 ответ

default/non-bare Мерзавец repo содержит две части состояния:

  1. А снимок изо всех файлов в репозитории (это - то, что "рабочее дерево" означает на жаргоне Мерзавца)
  2. А история из всех изменений, внесенных во все файлы, которые когда-либо были в репозитории (кажется, нет краткой части жаргона Мерзавца, который охватывает все это)

, снимок - то, о чем Вы, вероятно, думаете как свой проект: Ваши файлы кода, файлы типа "build", сценарии помощника и что-либо еще Вы присваиваете версию с Мерзавцем.

история является состоянием, которое позволяет Вам проверять другую фиксацию и получать полный снимок того, на что были похожи файлы в Вашем репозитории, когда та фиксация была добавлена. Это состоит из набора структур данных, которые являются внутренними Мерзавцу, с которым Вы, вероятно, никогда не взаимодействовали непосредственно. Значительно, история только хранит метаданные (например, "Пользователь U добавил это много строк к Файлу F во Время T как часть Фиксации C"), это также хранит данные (например, "Пользователь U добавил эти точные строки в Файл F").

ключевая идея пустого репозитория состоит в том, что у Вас не должно на самом деле быть снимка. Мерзавец имеет в наличии снимок, потому что это удобно для людей и других процессов немерзавца, которые хотят взаимодействовать с Вашим кодом, но снимок просто копирует состояние, это уже находится в истории.

А пустой репозиторий является репозиторием Мерзавца, который не имеет снимка. Это просто хранит историю.

, Почему Вы хотели бы это? Ну, если Вы только собираетесь взаимодействовать со своими файлами с помощью Мерзавца (то есть, Вы не собираетесь редактировать свои файлы непосредственно или использовать их для создания исполняемого файла), можно оставить свободное место, не имея в наличии снимок. В частности, если Вы поддерживаете централизованную версию своего repo на сервере где-нибудь (т.е. Вы в основном размещаете свой собственный GitHub), тот сервер должен, вероятно, иметь пустой repo (Вы все еще использовали бы непустой repo на своей локальной машине, хотя, так как Вы, по-видимому, захотите отредактировать свой снимок).

, Если Вы хотите более всестороннее объяснение пустого repos и другого варианта использования в качестве примера, я описал сообщение в блоге здесь: https://stegosaurusdormant.com/blog/bare-git-repo /

1
ответ дан 23 November 2019 в 05:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: