Ответ 1
Вы можете получить любой реквизит с любого удаленного (если сервер готов предоставить его вам). Ключ к извлечению ссылок за пределами refs/heads/
заключается в том, чтобы предоставить полные пути ref, начинающиеся с refs/
. При желании вы можете даже вытащить из репозиториев, которые не настроены в качестве пультов (git fetch может использовать URL вместо удаленного имени).
По умолчанию сконфигурированные пульты будут извлекаться только из пространства имен удаленных репозиториев refs/heads/
, поэтому они ничего не заберут внутри refs/remotes/
. Но вы можете ссылаться на ref внутри него, используя полный ref как refs/remotes/trunk
(remotes/trunk
также может работать, но может также быть неоднозначным).
Если выбранный refspec не указывает адресат ref, он будет сохранен в специальном FETCH_HEAD ref.
Извлеките репозитории refs/remote/trunk
в FETCH_HEAD и проверьте его как отдельный HEAD:
git fetch remote-name-or-url refs/remotes/trunk &&
git checkout FETCH_HEAD
То же самое, но создайте локальную ветку с именем, а не используя отдельный HEAD:
git fetch remote-name-or-url refs/remotes/trunk &&
git checkout -b trunk-from-remote FETCH_HEAD
То же, но прямо в локальную ветвь:
git fetch remote-name-or-url refs/remotes/trunk:trunk-from-remote &&
git checkout trunk-from-remote
Если вы работаете с настроенным удаленным компьютером, вы можете переписать его конфигурацию remote.<remote-name>.fetch
и добавить дополнительную запись, чтобы автоматизировать выборку из refs/heads/
и refs/remotes/
.
# fetch branchs of remote into remote-name/heads/*
git config remote.remote-name.fetch '+refs/heads/*:refs/remotes/remote-name/heads/*' &&
# fetch remotes of remote into remote-name/remotes/*
git config --add remote.remote-name.fetch '+refs/remotes/*:refs/remotes/remote-name/remotes/*'
Чтобы избежать возможных столкновений, приведенный выше пример настраивает выборку для хранения ссылок в непересекающиеся пространства имен (…/heads/
и …/remotes/
). Вы можете выбрать разные имена, если хотите. Если вы уверены, что конфликтов не будет, вы можете даже записать их непосредственно в refs/remotes/remote-name/
.