Вы можете получить любой реф с любого пульта (если сервер готов предоставить его вам).Ключом к извлечению ссылок за пределами refs/heads/
является предоставление полных путей ссылок, которые начинаются с refs/
.При желании вы можете даже извлечь из репозиториев, которые не настроены как удаленные ( git fetch может взять URL вместо имени удаленного).
По умолчанию настроенные удаленные устройства будут получать только изпространство имен refs/heads/
удаленного репозитория, поэтому они ничего не обнаружат внутри refs/remotes/
.Но вы можете сослаться на ссылку внутри него, используя полный ref, такой как refs/remotes/trunk
(remotes/trunk
может также работать, но может быть и неоднозначным).
Если в извлеченном refspec не указан целевой ref, он будет сохранен в специальной ссылке FETCH_HEAD
Извлеките refs/remote/trunk
хранилища в FETCH_HEAD и отметьте его как отдельную ГОЛОВУ:
git fetch remote-name-or-url refs/remotes/trunk &&
git checkout FETCH_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/*'
Чтобы избежать возможных коллизий, в приведенном выше примере настраивается fetch для хранения ссылок в непересекающихся пространствах имен (…/heads/
и …/remotes/
).Вы можете выбрать разные имена, если хотите.Если вы уверены, что не будет никаких конфликтов, вы можете даже заполнить их оба непосредственно в refs/remotes/remote-name/
.