У меня есть сервер, на котором у меня есть пустой репозиторий для pushing. Однако на моем сервере должна быть рабочая копия главной ветки.
Как получить рабочую копию и только из голого репозитория?
У меня есть сервер, на котором у меня есть пустой репозиторий для pushing. Однако на моем сервере должна быть рабочая копия главной ветки.
Как получить рабочую копию и только из голого репозитория?
Вы можете просто клонировать репозиторий в другой каталог на одном компьютере:
git clone /bare/repo/dir.git
Текущая директория станет не-голым клоном вашего репо, и вы получите проверку ветки master
автоматически. Затем используйте обычные команды, например git pull
, чтобы обновить их по мере необходимости.
В качестве побочного преимущества эта операция очень эффективна - если вы укажете локальный каталог на git clone
, git попытается обмениваться объектами между этими двумя репозиториями, используя жесткие ссылки.
Я искал подход "отдельно взятого рабочего дерева" (как показано здесь):
git init --bare
git config core.worktree /somewhere/else/
git config core.bare false
git checkout -f
Голый репозиторий - это только каталог .git рабочего каталога и запись в локальном файле конфигурации. То, что я сделал для конвертировать голый репозиторий в полный, это:
.git
и переместите все файлы из голого репозитория там.git/config
, чтобы изменить bare = true
на bare = false
Вы можете установить атрибут Hidden в каталоге .git
в Windows, но не в файлах внутри каталога.
Это рифф с двух других ответов, но он заполняет пробел для моего варианта использования - он работает для обновления репо из источника и проверки ветвей и любой операции 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, подключенное к вашему удаленному репо.
Вот как это работает:
$ 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
не делает ваши файлы отображаемыми в рабочем каталоге. Вы должны проверить корневой каталог.
Вы можете использовать 'git show' для этого.
http://www.kernel.org/pub/software/scm/git/docs/git-show.html
В принципе:
git --no-pager --git-dir /path/to/bar/repo.git show branch:path/to/file.txt