У меня есть сервер, на котором у меня есть пустой репозиторий для 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