Як мені встановити гілку вище за течією, щоб натиснути локальну гілку на magit?


11

З того, що я пам’ятаю, якщо я працюю над гілкою, наприклад, my-feature-branchя раніше міг це робити з magit-statusменю P P, а потім вибирати віддалену гілку зі списку, який був origin/my-feature-branchу верхній частині. Це прекрасно спрацювало.

Нещодавно, під час цієї дискусії , я міг би зробити щось подібне з P -u e(відкриття magit-push-popup, встановлення --set-upstreamпрапора та використання eінших місць), що також дозволило б мені вибрати зі списку гілок, починаючи з origin/my-feature-branch. Це добре працювало і для мене. Проте ще недавно це більше не працює, і я не зміг знайти найкращий спосіб встановити гілку за течією.

Коли я використовую P eперший варіант для гілки, на який потрібно натиснути origin/my-feature-branch, це майже завжди те, що я хочу. Однак origin/my-feature-branchдля моєї місцевої філії він не визначається як вихідний. Використання P uдозволяє мені вибрати гілку верхньої лінії, але origin/my-feature-branchїї немає в списку, і я повинен вводити текст origin/my-feature-branchбез завершення вкладки (я знаю, що це не важко, але він схильний до помилок користувача і повільніше, ніж командний рядок).

Це єдиний спосіб встановити гілку вище за течією чи я щось пропускаю? Я переглянув інші дискусії та документацію, пов'язану з проблемою, але всі джерела, які я знайшов, здаються застарілими.


1
Я думаю, що <remote>/<branch>частина випадково залишилась поза підказкою (див. Цей коментар ). Тим часом можна встановити magit-push-current-set-remote-if-missingнуль.
Кайл Мейєр

Я щойно це зафіксував. Моя відповідь нижче передбачає це виправлення.
Тарсій

Знайдено та виправлено деякі інші супутні проблеми. Вам, мабуть, доведеться почекати кілька годин, щоб Мельпа наздогнала, перш ніж все, що нижче, стане на 100% правильним.
Тарсій

Відповіді:


11

Існує кілька способів встановити верхню течію, одночасно натискаючи або не натискаючи.

Якщо magit-push-current-set-remote-if-missingце не nil(за замовчуванням), ви побачите щось на кшталт:

Push feature to
 p pushRemote, after setting that
 u @{upstream}, after setting that
 e elsewhere

Для того, щоб натиснути origin/featureта встановити це як натисніть, uа потім RETприйняти стандартного кандидата на завершення.

Якщо magit-push-current-set-remote-if-missingє nil, то ви побачили б замість цього:

Push feature to
 e elsewhere

Якщо ви натиснули pзараз, то вам сказали б, що висхідний потік не налаштований (мається на увазі, що ви не можете натиснути на верхній потік, якщо немає верхнього потоку).

Але якщо magit-push-current-set-remote-if-missingє nil, то список перемикачів буде містити перелік комутаторів --set-upstream, щоб ви могли використовувати, P - u pяк ви звикли (за винятком того, що другий p - малий регістр). Однак є одне ускладнення: після зміни значення magit-push-current-set-remote-if-missingвам доведеться перезапустити Emacs, --set-upstreamщоб з’явитися або зникнути.

Нарешті , ви можете встановити вгору по течії , використовуючи «набір вгору по течії (і більше нічого не робити)» команду: b uorigin/masterRET. Зауважте, що, використовуючи такий підхід, ви можете вибрати лише галузь, яка вже існує.


Але краще було б налаштувати push-пульт та натиснути на це. Щоб дізнатися більше про push-пульт та як він відрізняється від висхідного потоку, дивіться вузол розгалуження в інформаційному посібнику (веб-версія ще не оновлена).

В основному гілка вище за течією - це гілка, в яку, зрештою, буде об'єднана ваша галузь функцій (шляхом злиття чи перезавантаження, а не натисканням) origin/master. І за допомогою пульта дистанційного керування ви натискаєте свої гілки функцій під час роботи над ними або так, щоб хтось інший міг їх об'єднати. Якщо локальна гілка названа, featureа push-remote - my-fork, натискання на цю гілку використовує P pби push my-fork/feature. ("Поштовх до гілки" неможливо налаштувати, назва гілки на пульті дистанційного керування завжди те саме, що локальна назва.)

Тож, коли ваше запитання було чимось на кшталт "як я натискаю на висхідний потік, одночасно налаштовуючи висхідний потік", моя рекомендація взагалі не натискати на верхню течію, а замість цього натиснути на пульт дистанційного керування.

Якщо ви не змінили значення, magit-push-current-set-remote-if-missingви можете налаштувати push-remote за допомогою P psome-remoteRET. Але, оскільки ви, ймовірно, натискаєте всі гілки функцій на один і той же віддалений, краще встановити push-remote один раз для всіх гілок і зробити це з ним: bі тоді, M-pпоки не буде обраний правильний пульт.


Також зауважте, що, як правило, не потрібно явно встановлювати гілку вище. Коли ви створюєте нову гілку та вибираєте віддалену гілку як початкову точку, вона використовується як висхідна лінія.

На жаль, початковою точкою зазвичай є локальна гілка, і в такому випадку Git за замовчуванням не використовує її в якості висхідного потоку. Але це легко виправити, запустивши це один раз:

git config --global branch.autoSetupMerge always

Значенням за замовчуванням є true, що означає "встановити початкову точку як вище, за умови, що це віддалена гілка".


До речі, те саме стосується і пуш-пульта. Це теж, як правило, слід встановлювати напівавтоматично у "нових" сховищах. Якщо ви клонуєте сховище, вас запитають, чи хочете ви використовувати його originяк пульт дистанційного керування. Ви повинні відповісти "так", якщо ви не збираєтесь додати ще одне дистанційне, скажімо my-fork, яке слід використовувати як пульт дистанційного керування. Коли ви додасте новий пульт дистанційного керування, M aале його remote.pushDefaultще не встановлено, вам буде запропоновано запитувати, чи хочете ви використати щойно доданий пульт як пульт дистанційного керування.

Це можна налаштувати за допомогою magit-clone-set-remote.pushDefaultта magit-remote-add-set-remote.pushDefault.

Ще один розширений варіант - magit-branch-prefer-remote-upstreamце типовий параметр nil. Якщо встановити його t, а потім вибрати локальну гілку як початкову точку для нової гілки, то висхідна частина вихідної точки може (згідно з деякими правилами див. Doc-string) використовуватись як висхідна, а не сама відправна точка.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.