Синхронізація та багато репозиторіїв

Локальний перегляд pull-реквесту

Перегляд діфа в браузері каже вам, чи добре читається код. Він не каже, чи застосунок усе ще запускається. Щоб дізнатися це, доводиться запустити гілку — і саме тут люди застрягають, бо pull-реквест із форка живе в репозиторії, який ви ніколи не клонували, а часто ще й не маєте права туди пушити.

Локальний перегляд розв’язує це завдяки факту, який більшості ніколи не доводиться вчити: хостинги публікують head кожного pull-реквесту як звичайний git-реф у цільовому репозиторії. Форк не мусить бути досяжним, API-токен не потрібен, і жоден другий ремоут не додається. Один фетч — і код у вас на диску.

Локальний перегляд: вибір ремоута, pull-реквесту та способу застосування

Хостинг Де живе head пул-реквесту
GitHub, GitHub Enterprise, Gitea, Forgejo, Gogs refs/pull/<n>/head
GitLab (хмарний і самостійно розгорнутий) refs/merge-requests/<n>/head
Bitbucket Cloud, Bitbucket Server refs/pull-requests/<n>/from
Azure DevOps refs/pull/<n>/merge

Gitcito перевіряє всі чотири за один ls-remote, тож незнайомий або самостійно розгорнутий хостинг працює, доки він дотримується однієї з цих конвенцій.

Як його відкрити

  • Список pull-реквестів на бічній панелі — кнопка зі стрілкою на будь-якому записі. Це працює для кожного хостингу, на відміну від детального вигляду, який є лише для GitHub.
  • Палітра команд: Переглянути pull-реквест локально.
  • Усередині детального вигляду pull-реквесту, поруч із кнопкою «відкрити в браузері».

Що ви йому даєте

Ремоут — репозиторій, проти якого відкрито pull-реквест, зазвичай origin. Не форк.

Pull-реквест — номер або вставлений URL із браузера. 7, #7 і https://github.com/owner/repo/pull/7 — усе працює; так само й форми URL для GitLab, Bitbucket та Azure DevOps. Натисніть Знайти, і Gitcito повідомить, який реф він розв’язав і на який коміт той вказує, ще до того, як щось буде зафетчено.

Віддалена гілка — друга вкладка, для випадків, коли жодного PR-рефа не знайти: хостинг, який їх не публікує, або гілка, яку ви просто хочете спробувати. Вкажіть назву гілки такою, якою вона є на ремоуті.

Два способи застосувати

Жоден із них не пише коміт. Це навмисно — перегляд, від якого не можна просто піти, це не перегляд.

Режим Що відбувається Як це скасувати
Локальна гілка Реф фетчиться на власну гілку (типово pr/7), і на неї робиться чекаут. Інші ваші гілки лишаються недоторканими. Скасування повертає вас на гілку, де ви були, і видаляє гілку перегляду.
Незакомічене злиття Реф зливається в поточну гілку з --no-commit --no-ff, і об’єднане дерево лишається проіндексованим, щоб ви могли його зібрати й протестувати. Скасування перериває злиття.

Повторний перегляд того самого pull-реквесту використовує ту саму гілку, пересуваючи її на новий head — зручно, коли автор пушить виправлення, поки ви тестуєте. Якщо така гілка вже існує, Gitcito каже про це і питає, перш ніж її скидати, бо будь-який коміт, що живе тільки там, було б утрачено.

Чого він не робить

  • Він не може вигадати реф, якого хостинг не публікує. Деякі самостійно розгорнуті конфігурації вимикають PR-рефи; у деяких хостингів їх ніколи й не було. Ви отримаєте зрозуміле «немає рефа для #n» і вкладку віддаленої гілки як шлях далі.
  • Він не фетчить теги. Перегляд не повинен тягнути чужий простір імен тегів у ваш репозиторій.
  • Режим злиття потребує чистого робочого дерева. Git відмовляється зливати поверх незакомічених змін; спершу зробіть стеш.
  • Перегляд — це не рев’ю. Він кладе код на вашу машину — він нічого не схвалює, не коментує і не зливає. Це хостинг та pull-реквести.
  • Приватні форки лишаються приватними. PR-реф віддає цільовий репозиторій, тож доступ визначається вашими обліковими даними саме для того ремоута — дивіться безпеку.

Прибирання

Гілка перегляду — це звичайна гілка: видаліть її з бічної панелі, коли закінчите, або натисніть скасування одразу після перегляду. Незакомічене злиття перегляду можна відкинути скасуванням, а можна розв’язати й закомітити, якщо ви все-таки вирішили, що воно вам потрібне, — і в цю мить воно перестає бути переглядом і стає злиттям.

Покращити цей переклад на GitHub