Подтвердить что ты не робот

Получение рабочей копии открытого хранилища

У меня есть сервер, на котором у меня есть пустой репозиторий для pushing. Однако на моем сервере должна быть рабочая копия главной ветки.

Как получить рабочую копию и только из голого репозитория?

4b9b3361

Ответ 1

Вы можете просто клонировать репозиторий в другой каталог на одном компьютере:

git clone /bare/repo/dir.git

Текущая директория станет не-голым клоном вашего репо, и вы получите проверку ветки master автоматически. Затем используйте обычные команды, например git pull, чтобы обновить их по мере необходимости.

В качестве побочного преимущества эта операция очень эффективна - если вы укажете локальный каталог на git clone, git попытается обмениваться объектами между этими двумя репозиториями, используя жесткие ссылки.

Ответ 2

Я искал подход "отдельно взятого рабочего дерева" (как показано здесь):

git init --bare

git config core.worktree /somewhere/else/
git config core.bare false

git checkout -f

Ответ 3

Голый репозиторий - это только каталог .git рабочего каталога и запись в локальном файле конфигурации. То, что я сделал для конвертировать голый репозиторий в полный, это:

  • Создайте новый подкаталог .git и переместите все файлы из голого репозитория там
  • Отредактируйте файл .git/config, чтобы изменить bare = true на bare = false
  • Отметьте нужную ветку. Это извлекает все файлы из репозитория в рабочий каталог.

Вы можете установить атрибут Hidden в каталоге .git в Windows, но не в файлах внутри каталога.

Ответ 4

Это рифф с двух других ответов, но он заполняет пробел для моего варианта использования - он работает для обновления репо из источника и проверки ветвей и любой операции git, потому что вы заканчиваете с нормальным полным git repo.

git clone /path/to/bare/repo /new/path/to/full/repo
cd /new/path/to/full/repo
git remote set-url origin [email protected]:swift/swift.git

После выполнения этих трех строк кода вы можете затем git pull и git branch и git checkout some_branch и так далее, потому что теперь у вас есть нормальное полное репо git, подключенное к вашему удаленному репо.

Ответ 5

Вот как это работает:

$ git init --separate-git-dir /path/to/existing-bare-repository /path/to/workdir
$ cd /path/to/workdir
$ git checkout .

Вуаля!

Информация: git init сообщит: Reinitialized existing Git repository in /path/to/existing-bare-repository. Но будьте уверены. man git-init говорит: Запуск git init в существующем репозитории безопасен. Он не будет перезаписывать вещи, которые уже существуют.

Магия в том, что только git init не делает ваши файлы отображаемыми в рабочем каталоге. Вы должны проверить корневой каталог.