Мне нужно создать центральное хранилище Git, но я немного запутался ...
Я создал пустой репозиторий (на моем git-сервере, машина 2) с:
$ mkdir test_repo
$ git --bare init
Теперь мне нужно отправить файлы из моего локального репозитория (машина 1) в пустой репозиторий (машина 2). У меня есть доступ к машине 2 по SSH. Дело в том, что я думаю, что не понимаю концепцию чистого хранилища ...
Как правильно хранить мой код в пустом хранилище? Как я могу перенести изменения из моего локального репозитория в пустой репозиторий?
Правильный ли способ иметь центральное хранилище, чтобы иметь голое хранилище?
Я немного запутался с этим предметом. Пожалуйста, дайте мне ключ к этому.
--shared
опцию,init
если вы планируете, чтобы другие люди подталкивали к этому репо. Он автоматически добавляет групповые разрешения на запись в хранилище - ссылкаЯ добавляю этот ответ, потому что после прибытия сюда (с тем же вопросом) ни один из ответов на самом деле не описывает все необходимые шаги, необходимые для перехода от ничего к полностью используемому удаленному (голому) репо.
Примечание: в этом примере используются локальные пути для размещения чистого репо, но другие протоколы git (такие как SSH, указанный в OP) должны работать просто отлично.
Я попытался добавить некоторые заметки по пути для тех, кто менее знаком с git.
1. Инициализируйте голое репо ...
Это создает папку (repo.git) и заполняет ее файлами git, представляющими репозиторий git. В настоящее время это репо бесполезно - у него нет коммитов и, что более важно, нет веток . Хотя вы можете клонировать этот репо, вы не можете вытащить его.
Далее нам нужно создать рабочую папку. Есть несколько способов сделать это, в зависимости от того, есть ли у вас файлы.
2а. Создайте новую рабочую папку (без существующих файлов), клонируя пустое хранилище.
Эта команда будет работать, только если
/path/to/work
она не существует или является пустой папкой. Примите к сведению предупреждение - на этом этапе у вас все еще нет ничего полезного. Если выcd /path/to/work
и побежитеgit status
, вы получите что-то вроде:но это ложь Вы не находитесь на ветке
master
(потому чтоgit branch
ничего не возвращает) и пока нет коммитов.Затем скопируйте / переместите / создайте несколько файлов в рабочей папке, добавьте их в git и создайте первый коммит.
Эти
git config
команды нужны , только если вы еще не сказали , мерзавцу , кто ты. Обратите внимание, что если вы сейчас запуститеgit branch
, вы увидитеmaster
ветку в списке. Теперь запуститеgit status
:Это также вводит в заблуждение - апстрим не «ушел», он просто еще не создан и
git branch --unset-upstream
не поможет. Но это нормально, теперь, когда у нас есть первый коммит, мы можем нажать и мастер будет создан на голом репо.На данный момент у нас есть полностью функциональное голое репо, которое можно клонировать в другом месте главной ветки, а также локальная рабочая копия, которая может тянуть и толкать.
2b. Создание рабочей папки из существующих файлов Если у вас уже есть папка с файлами в ней (поэтому вы не можете клонировать в нее), вы можете инициализировать новое git-репо, добавить первый коммит, а затем связать его с голым репо.
На данный момент у нас есть наш первый коммит и локальная ветка master, которую нам нужно превратить в ветвь ветки с удаленным отслеживанием.
Обратите внимание на
-u
флаг на git push, чтобы установить (новую) отслеживаемую ветвь вверх по течению. Как и раньше, теперь у нас есть полностью функциональное голое репо, которое можно клонировать в другом месте главной ветки, а также локальная рабочая копия, которая может тянуть и толкать.Все это может показаться очевидным для некоторых, но git смущает меня в лучшие времена (это сообщения об ошибках и сообщения о состоянии действительно нуждаются в доработке) - надеюсь, это поможет другим.
источник
Отвечая на ваши вопросы один за другим:
Голый репозиторий - это тот, у которого нет рабочего дерева . Это означает, что все содержимое - это то, что у вас есть в
.git
каталоге.Вы можете только
commit
обнажить хранилище,push
обратившись к нему из своего локального клона. У него нет рабочего дерева, поэтому у него нет измененных файлов, никаких изменений.Единственный способ иметь центральное хранилище - это иметь
bare
хранилище.источник
Вы также можете попросить Git создать каталог для вас:
источник
Общая практика заключается в том, чтобы иметь центральное хранилище, в которое вы помещаете репозиторий.
Если у вас есть опыт работы с SVN, вы можете связать репозиторий SVN с репозиторием Git bare. У него нет файлов в репо в оригинальном виде. Принимая во внимание, что у вашего локального репо будут файлы, которые формируют ваш «код» в дополнение.
Вам нужно добавить удаленный репозиторий в репо из вашего локального репо и вставить в него свой «код».
Это будет что-то вроде:
источник
git remote add central <url>
, в случае SSH будет ли это включать путь тоже? напр.git remote add central ssh://user@server/home/user/repo.git
Этого должно быть достаточно:
Для получения более подробной информации смотрите « GIT: Как мне обновить мой репо? ».
Ноты:
origin
' для удаленной ссылки на репо.git push --tags origin
для этого.источник
Приятно убедиться, что код, который вы нажали, действительно был зафиксирован.
Вы можете получить журнал изменений в пустом хранилище, явно указав путь с помощью параметра --relative.
Это покажет вам зафиксированные изменения, как если бы это было обычное git-репо.
источник
Основываясь на ответах Mark Longair & Roboprog:
если git версия> = 1.8
Или :
если git версия <1.8
источник
Флаг --bare создает репозиторий, у которого нет рабочего каталога. Пустой репозиторий является центральным репозиторием, и вы не можете редактировать (хранить) коды здесь, чтобы избежать ошибки слияния.
Например, когда вы добавляете файл в свой локальный репозиторий (машина 1) и помещаете его в пустой репозиторий, вы не можете увидеть файл в пустом репозитории, поскольку он всегда «пустой». Тем не менее, вы действительно что-то толкаете в хранилище, и вы можете увидеть это неявным образом, клонировав другое хранилище на вашем сервере (машина 2).
И локальный репозиторий на машине 1, и репозиторий «copy» на машине 2 не являются пустыми. Отношения между голыми и не голыми репозиториями
Блог поможет вам понять это. https://www.atlassian.com/git/tutorials/setting-up-a-repository
источник
Вы можете выполнить следующие команды, чтобы инициализировать ваш локальный репозиторий
Вы должны работать над своим проектом из локального репозитория и использовать сервер в качестве центрального репозитория.
Вы также можете следовать этой статье, которая объясняет каждый аспект создания и поддержки Git-репозитория. Git для начинающих
источник