Как долго вы можете восстановить/восстановить удаленную ветку на GitHub?
Это не вопрос о том, как восстановить потерянные ветки в Github, а скорее, как долго вы должны восстановить удаленную ветвь с помощью следующей истории случая пользователя:
В запросе на перенос (часто используемом как место для просмотра кода) ветвь может быть объединена, а затем удалена, все в графическом интерфейсе github. Если вы решите удалить его, вам предоставляется опция с жирным и подчеркнутым словом, чтобы "восстановить" ветвь.
Я подозреваю, что этот параметр имеет ограничение по времени и что github не позволяет использовать его неограниченно.
Имеет ли github ограничение времени на то, как долго вы можете это сделать? Если это так, каков этот лимит времени?
Ответы
Ответ 1
Я спросил поддержку GitHub, это был их ответ (внимание мое):
Мы используем отдельное пространство имен ref для всех запросов Pull, которые мы используем для различных вещей, включая восстановление ветки. Поскольку мы сохраняем эти [Pull Request] refs неопределенно, нет ограничений по времени на восстановление ветки.
Вы можете увидеть эти специальные ссылки на своем пульте, используя следующее:
$ git ls-remote | grep pull
From [email protected]:<username>/<remote>.git
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa refs/pull/1/head
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb refs/pull/1/merge
cccccccccccccccccccccccccccccccccccccccc refs/pull/2/head
dddddddddddddddddddddddddddddddddddddddd refs/pull/2/merge
Ссылки именуются под refs/pull/<pull request number>/
. Контрольная точка head
указывает на конец ответвления, который запрашивается, т.е. Последний фиксатор на ветке. Я не уверен, что ссылка merge
.
Ответ 2
Поддержка GitHub будет иметь определенный ответ, но я подозреваю, что она основана на периоде по умолчанию 90 дней до автоматической очистки reflog
.
gc.<pattern>.reflogexpire
git reflog
expire удаляет записи reflog
старше этого времени; по умолчанию до 90 дней.
С " <pattern>
" (например, " refs/stash
") посередине настройка применяется только к ссылкам, которые соответствуют <pattern>
.
Но... у вас была локальная копия с той ветвью, которая все еще объявлена в ней... ничто не помешает вам отодвинуть эту ветку обратно в репозиторий gitHub;)
Ответ Cupcake (upvoted) дает ответ поддержки: нет предела, что означает, что обе эти настройки установлены на never
:
-
gc.reflogexpire
-
gc.reflogexpireunreachable
Это имеет смысл для службы репо хостинга, которая не изменяет эти репо локально, а сохраняет только те изменения, которые были выданы сторонними участниками.
Обновление Git 2.22 (Q2 2019, пять лет спустя): этот последний случай (когда gc.reflogexpire
и gc.reflogexpireunreachable
never
gc.reflogexpireunreachable
) лучше обрабатывается.
См. Коммит bf3d70f, коммит 978f430 (28 марта 2019 г.), коммит fe66776, коммит a65bf78, коммит cd8eb3a, коммит e5cdbd5 (15 мар 2019 г.) и коммит 8bf1444 (13 мар 2019 г.) от Арва Арнфьорда Бьярмасона (avar
).
(Объединено Junio C Hamano - gitster
- в коммите f3c19f8, 25 апреля 2019 г.)
gc
: обрабатывать и проверять конфигурацию gc.reflogExpire
Не запускайте избыточно " git reflog expire --all
", когда gc.reflogExpire
и gc.reflogExpireUnreachable
установлены на " never
", и немедленно gc.reflogExpire
gc.reflogExpireUnreachable
, если эти оценщики конфигурации плохие.
Как показывает более раннее "утверждение об отсутствии досрочного выхода" в тестах " git reflog expire
", ранняя проверка gc.reflogExpire{Unreachable,}
вообще не нужна для " git reflog expire
", но имеет смысл для " gc
" потому что:
-
Аналогично 8ab5aa4 (" parseopt
: обрабатывать некорректные аргументы --expire
более красиво", 2018-04-21, Git v2.18.0-rc0) мы теперь умрем раньше, если переменные конфигурации будут установлены в недопустимые значения.
Мы запускаем " pack-refs
" до " reflog expire
", что может занять некоторое время, только чтобы затем умереть в недопустимой gc.reflogExpire{Unreachable,}
.
-
Совсем не вызывать команду означает, что она не будет отображаться при выводе дорожки, что делает происходящее более очевидным, когда для обоих задано значение " never
".
-
Как более поздние документы об изменениях, мы блокируем ссылки при циклическом истечении срока действия ссылок, даже в тех случаях, когда мы ничего не делаем из-за этой конфигурации.
Ответ 3
Обратите внимание, что на некоторых страницах запроса тяги на GitHub не будут отображаться кнопки кнопки удаления/восстановления, даже если ссылки безопасно сохранены как описано Cupcake.
Это, вероятно, означает, что одна и та же ветвь использовалась снова в более позднем запросе на растяжение. Найдите репо (в GitHub) для имени ветки и проверьте последний запрос на перенос в этой ветке. Вы должны найти пользовательский интерфейс для восстановления (или удаления) ветки там.