Ответ 1
Я ничего не знаю о самом Трэвисе, но GitHub действительно создает эти refs/pull/number/merge
refs. В частности, на основе наблюдения - документация кажется немного скудной, и я всего лишь случайный пользователь GitHub - когда вы нажимаете "новый запрос на pull" в GitHub, GitHub:
- создает ссылку с именем
refs/pull/number/head
, чтобы сохранить идентификатор комманды, которую вы просите, чтобы кто-то другой слился для вас; - пытается выполнить автоматическое слияние и фиксацию (используя
git merge
), и если это удастся, создается вторая ссылка с именемrefs/pull/number/merge
.
Обратите внимание, что это автоматически созданное коммитирование слиянием не находится ни в одной ветки, оно просто имеет тот же номер, что и номер запроса на извлечение, и ссылку, чье имя очевидно из самого запроса pull (просто замените head
на merge
). Я верю, но не проверял вручную - первый родитель этого слияния - это фиксация наконечника ветки, которую вы запрашиваете у кого-то, "on", когда они выполняют одно и то же слияние, то есть код за кулисами, создающий этот refs/pull/number/merge
ссылка (или достаточно близко):
commithash=... # the commit ID for the pull-request
mergeinto=$(git rev-parse $branchname) # the branch we are to merge into
prnum=... # get next pull request number
# create the pull request itself
git update-ref refs/pull/$prnum/pull $commithash
# create the merge ref, if the merge succeeds
git checkout $mergeinto
if git merge -m "..." refs/pull/$prnum/pull; then
# merge succeeded: create the merge ref
git update-ref refs/pull/$prnum/merge HEAD
else
# automatic merge failed, discard it
git merge --abort
fi
(эта конкретная последовательность кода беспорядочна с индексом и оставляет head
отлаженной, поэтому ее необходимо выполнить с блокировкой хранилища и послеработкой или с использованием временного дерева работ; фактическая последовательность кода вероятно, отличается по ряду причин).
Следовательно:
Итак, кто-то предположительно объединил мою ветку в мастер и создал соответствующий ref. Был ли это GitHub или Travis?
Учитывая, что GitHub будет, Уильям Оккам, предположил бы, что нет необходимости привлекать Трэвиса.: -)
И другой вопрос, могу ли я перечислить все репозитории GitHub repo?
Пока у вас есть доступ:
$ git ls-remote
(при условии, что пульт - это URL-адрес GitHub) будет отображаться все открытые ссылки. Я не видел способ веб-интерфейса для этого, и не нашел его в моем (легком) прочтении документации API GitHub.