Як ви керуєте незначними змінами, які ви хочете зберегти в місцевих обставинах?


9

Я розглядаю можливість міграції 14-річного сховища резюме (історія недоторканою) до меркуріальної. Я думаю, що у мене знизилися всі технічні перетворення, але у мене все ще виникають питання щодо ефективної роботи в роботі.

Одне з речей, які я багато бачу в пісочних скриньках окремих розробників (включаючи мої власні), - це місцеві невмілі зміни, які не готові бути витіснені на основну лінію. Я розумію, що це погано. Більшість моїх експериментів з hg припускають, що неспроможні зміни - це погано. Неможливості злитися з ними достатньо для цього. Отож, я хочу знати, як з цим справляються інші люди, які щодня використовують кодування. Як ви маєте справу з неповними змінами коду, коли настає час оновити ваше сховище? Як ви маєте справу з локальними змінами, якими ви ще не хочете ділитися з іншими розробниками?

Відповіді:


5

Я обробляю це так:

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

Ідея полягає у тому, що віддалений сховище містить лише працюючі, перевірені версії моїх проектів.


3
Чи виявляєте ви, що ваше віддалене сховище захаращується типом "виправлена ​​помилка в останньому комітеті"?
nmichaels

4

Є кілька речей, які я додам.

Перша полягає в тому, щоб запропонувати робочий процес, який з розумом використовує полиці , які постачаються стандартно з TortoiseHg .

Щоразу, коли я хотів зафіксувати частину свого поточного робочого каталогу, я б відклав зміни, які я не хотів зробити, перекомпілювати (щоб переконатися, що я не відклав біти, які в результаті призводять до зламаної компіляції), а потім запускати мої тести . Тоді я б здійснив повний, працюючий і перевірений набір. Нарешті, я б не зайнявся відновленням змін.

Якби у мене були більш постійні зміни, скажімо, я хотів, щоб файл конфігурації на моїй розроблювальній машині завжди вказував на порт localhost 3333, а не на виробничий сервер, то я б розглядав використання розширення Mercurial Queues, яке постачається як з Mercurial, так і з TortoiseHg .


4

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

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

Якщо ви будете зберігати їх у робочій копії, вхідні зміни працюватимуть нормально, тому вам просто потрібно уникати створення вихідних змін, а це означає уникати їх внесення. Якщо файли нові, це просто - просто не робіть hg addїх. Якщо вони вже відстежуються, ви можете спеціально виключити їх із комітетів hg commit --exclude foo.txt. Якщо у вас є велика кількість файлів, які потрібно виключити, або виключаєте їх із багатьох комісій (наприклад, для постійної зміни локального файлу конфігурації), подивіться на розширення виключення .

Якщо ви готові відсунути зміни вбік, у вас є інший набір варіантів. Найпростіша річ - просто використовувати hg diffу файлах для створення патча з їх описом, який ви зберігаєте десь у безпеці, а потім hg patch --no-commitповторно застосувати цей патч, коли ви хочете, щоб зміни були повернені. Ви можете зробити це Smoother, встановивши розширення сукна , на розширення горища , або який - або інший родич. Ви також можете використовувати розширення черг , але це використовує кувалду, щоб зламати гайку. Ви можете навіть просто здійснити зміни, а потім оновити батьківську програму та виконати там іншу роботу, залишивши зміни в анонімній гілці впертого - hg commit -m 'temporary branch' && hg up $(hg log -r 'parents(.)' --template '{node}')(хоча це може бути простіше зробити вручну!). Тоді вам доведеться подбати про те, щоб не натиснути набір змін.


3

Для розділення потоків розвитку використовуються два основні підходи.

  • Названі відділення. Ідея полягає в тому, що ви працюєте над власною гілкою, nmichaels_branch_of_awesome. Таким чином ви можете здійснити свої зміни, не обсмажуючи чужі роботи. Потім ви зливаєтеся з іншими людьми, коли вам потрібна їх робота, і коли настає час для функції, ви переходите до більш стабільної галузі для інтеграції. Я віддаю перевагу названим гілкам.

  • Анонімний клон. Це створює окремий сховище для вашої пісочниці. Тут ви розігруєтесь, поки не отримаєте те, що хочете, потім (напевно) зробіть патч MQ для своїх зобов’язань і перейдіть туди, звідки ви почали. Мені не подобається такий підхід, оскільки він вимагає управління каталогами та потенційно роботу з MQ, що може бути хитромудрим. І з деякими репостами вони можуть почати отримувати для цього трохи більше. Однак, цьому, здається, віддають перевагу розробники печей.


Здається, є хтось, чия робота полягає в тому, щоб робити інтеграційні біти. Мені не хочеться додати mq до списку нових речей, які люди повинні дізнатися негайно, але я подумаю про своє первісне неприязнь до ідеї названих гілок. Це може бути недостатньо обґрунтованим.
nmichaels

Що стосується другої кулі, чому б не зробити клону, не працювати та натискати лише тоді, коли закінчите? MQ звучить тут складним чином
TheLQ

@TheLQ: Це теж працює, але не відрізняється від прямого клонування з базового репо. MQ б'є скромно в один кут.
Пол Натан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.