Где должны быть созданы репозитории git? - PullRequest
10 голосов
/ 01 апреля 2011

Я спрашиваю об этом, потому что веб-поиск этого вопроса не дает хороших ответов.Это основной вопрос, может быть, настолько простой, что он не знает, но я не знаю ответа.Итак, немного поподробнее: можно ли создать git-репозитории внутри папки, в которой осуществляется управление версиями, или же репозиторий должен быть размещен вне этой папки?Или это возможно?Имеет ли значение местоположение хранилища?

Ответы [ 6 ]

16 голосов
/ 01 апреля 2011

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

Обычно с git вы будете использовать непокрытый репозиторий или репозиторий с рабочим деревом .По умолчанию каталог, содержащий каталог .git, будет находиться на верхнем уровне вашего рабочего дерева для этого репозитория.Например, если вы создали такой репозиторий в каталоге с именем toaster-simulator, структура каталога может выглядеть следующим образом:

toaster-simulator/
    .git/
        HEAD
        config
        index
        objects/
        refs/
        ...
    README
    Makefile
    src/
        toaster.c

На верхнем уровне вашего каталога находится только один каталог .git.репозиторий. 1 Этот каталог содержит всю историю вашего репозитория, все его ветви, объекты, которые составляют каждый файл каждого коммита в вашей истории, и т. д. (Например, каталог .git/objects содержитбаза данных, которая отображает имена объектов в файлы, коммиты и т. д .; HEAD указывает на текущую ветку и т. д.) Никогда не следует вручную удалять или изменять файлы в этом каталоге, иначе вы рискуете повредить ваш репозиторий.Все, что находится за пределами каталога .git, является вашим рабочим деревом.Вы просто отредактируете эти файлы в обычном режиме при разработке проекта.

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

Другой тип репозитория - голое хранилище , что по сути похоже на каталог .git, но без рабочего дерева.Обычно вы используете это для репозитория, в который многие люди будут вносить свои изменения - вы не будете разрабатывать этот репозиторий, поэтому рабочее дерево будет только мешать.Условно вы бы назвали каталог, содержащий пустой репозиторий, с именем проекта и расширением .git.Например, на удаленном сервере у вас может быть пустой репозиторий для проекта симулятора тостера, который выглядит следующим образом:

toaster-simulator.git/
    HEAD
    config
    index
    objects/
    refs/
    ...

Когда вы впервые используете git, вам, вероятно, не понадобится использовать bareрепозитории, но хорошо знать о них.Когда вы спрашиваете в своем вопросе о возможности иметь репозитории за пределами вашего рабочего дерева, они вполне могут быть пустыми репозиториями, которые вы используете для обмена кодом с другими людьми.

Я описал выше обычный макет репозитория, но на самом деле каталог git и рабочее дерево могут быть любыми двумя каталогами в вашей файловой системе, если вы используете для git определенные переменные или параметры среды - однако это выходит за рамки базового использования git:)

Сноски

1 Фактически можно иметь вложенные репозитории, каждый со своим каталогом .git, например, с помощью функции подмодуля git.Однако, учитывая ваш вопрос, вам не нужно беспокоиться об этом на данный момент.

5 голосов
/ 01 апреля 2011

Git-репо создается в том же месте, что и ваш исходный код. Помните, что git не похож на Subversion, где у вас есть один репозиторий в центральном месте (например, на сервере). Вместо этого каталог с исходным кодом равен вашему git-репо, например:

$ cd mysources
$ git init . 
$ git add ...

Теперь mysources/.git будет содержать базу данных объектов git, и вы можете добавить / commit / branch / etc.

2 голосов
/ 01 апреля 2011

Git-репозиторий (папка .git в корневом каталоге) по умолчанию создается внутри папки с контролем версий.Вы можете создать его вне его, но это не нужно, и это особый случай.

2 голосов
/ 01 апреля 2011

git init создаст git-репозиторий внутри корневого каталога вашего проекта. Насколько я знаю, git-репозиторий всегда создается в корневом каталоге проекта (или в папке, в которой вы хотите управлять версиями), над которой вы работаете.

git создает папку .git в корневом каталоге со всеми версиями / branch / commits и т. Д.

1 голос
/ 01 апреля 2011

Любой возможен, но если быть кратким, да, это имеет значение.В моем объяснении будет вызывать хранилище, куда вы нажимаете и извлекаете из хранилища super .Это просто чтобы прояснить ситуацию.

Вот ваши 2 варианта:

  1. super хранилище вне папки с управлением версиями: если вы сделаете это на своем локальном ПК, вы, конечно,понести стоимость хранения всего более одного раза.Фактически, вы будете хранить где-нибудь свой репозиторий super , плюс извлеченную версию (ваш рабочий каталог), а также файлы для текущей извлеченной ветки.Однако, как правило, в наши дни хранение не так уж важно.Большим преимуществом этого метода является то, что вы можете клонировать / тянуть / толкать свой репозиторий super из любой точки мира.

  2. super хранилище внутри папки с контролем версий: вы не используете дополнительное хранилище.Однако есть большой недостаток: ваш репозиторий не будет bare.Это означает, что он получил проверенные файлы.Если вы в настоящее время находитесь в филиале A, невозможно будет нажать на эту ветку A из удаленного местоположения.Сначала вам нужно изменить рабочую ветку на ветку B, прежде чем кто-то другой сможет работать с веткой A.

Итак, если вы просто хотите контролировать версию, но неЕсли вы планируете работать над своим проектом на любом другом ПК, создание репозитория super внутри папки вашего проекта - это хорошо.Если вы планируете работать в другом месте, создайте репозиторий bare super где-нибудь еще на вашем ПК.Репозиторий bare не имеет извлеченной ветви.

Следующие команды создадут новый пустой репозиторий git и отправят в него ваши текущие данные.С этого момента вы должны иметь возможность git push, git pull, ... как вам угодно.

cd
mkdir myproject.git
cd myproject.git
git init --bare
cd
cd project_folder
git init
git add *
git commit -m "Initial push"
git remote add origin ~/myproject.git
git push origin master

[Редактировать] Сделано объяснение более четким.

1 голос
/ 01 апреля 2011

Расположение репозиториев git не важно, их можно размещать где угодно.

Хотя размещение репозиториев в других репозиториях не очень желательно, поскольку внешний репозиторий git также будет отслеживать изменения во внутреннем репозитории.

Что вы можете сделать, это использовать подмодулей .Вы в основном импортируете другие существующие репозитории в свой репозиторий и отслеживаете определенный коммит из него.

...