Це буде звучати контрінтуїтивно, але почуйте мене:
Заохочуйте їх почати експериментувати з git
Однією з цікавих речей про git є те, що напрочуд легко зробити будь-яку локальну операцію повністю безпечною. Коли я вперше почав використовувати git, однією з речей, за якими я виявив себе, було застебнення всього каталогу як резервного копіювання на випадок, якщо я щось накрутив. Пізніше я виявив, що це величезна хитрість і майже ніколи насправді не потрібно захищати свою роботу, але вона має честь бути дуже безпечною і дуже простою, навіть якщо ви не знаєте, що в чортові ви робите і як вийде команда, яку потрібно спробувати. Єдине, чого вам слід уникати, коли ви робите це push
. Якщо ви нічого не натискаєте, це 100% безпечний спосіб спробувати все, що завгодно.
Страх приміряти речі є однією з найбільших перешкод у навчанні git. Це дає вам так багато контроль над усім , що це свого роду складною. Реальність полягає в тому, що ви можете дотримуватися декількох дуже безпечних операцій протягом більшої частини свого щоденного використання, але пошук тих команд, які знаходяться, потребує певного вивчення.
Даючи їм відчуття безпеки , вони будуть набагато охочіше спробувати зрозуміти, як робити речі самостійно. І вони матимуть набагато більше повноважень знайти особистий потік роботи на своїй локальній машині, яка працює для них. І якщо не всі роблять те ж саме на локальному рівні , це добре, якщо вони дотримуються стандартів, що їх підштовхують . Якщо потрібно застебнути всю репо перед тим, як зробити операцію, щоб вони відчували себе таким чином, це добре; вони можуть підбирати кращі способи ведення справ, коли вони йдуть і коли вони намагаються. Що-небудь, щоб змусити себе почати пробувати речі і бачити, що це робить.
Це не означає, що навчання марно. Навпаки, навчання може допомогти ознайомити вас з особливостями, закономірностями та нормами. Але це не заміна сидіти і насправді робити речі у своїй щоденній роботі. Ні git, ні SVN - це речі, про які можна просто піти на заняття, і тоді ти все знаєш. Ви повинні використовувати їх для вирішення своїх проблем, щоб ознайомитися з ними та які функції добре підходять для яких проблем.
Перестаньте відмовляти їм у навчанні гри та гри
Я згадував, що нічого не натискати, що насправді суперечить одній із речей, яких ви їх навчали: завжди "Здійснювати та натискати". Я вважаю, ви повинні перестати говорити їм робити це і сказати їм почати робити навпаки. У Git в основному є 5 "місць", де можна змінити:
- На диску, не передається
- Постановочна, але не вчинена
- У місцевому комітеті
- У місцевому сховищі
- Віддалені сховища (лише коміти та теги колись пересуваються та перетягуються між різними сховищами)
Замість того, щоб заохочувати їх тягнути і штовхати все за один крок, заохочуйте їх використовувати ці 5 різних місць. Заохочуйте їх до:
Це спонукає їх перевірити свою роботу, перш ніж вона стане загальнодоступною для всіх, а це означає, що вони швидше зрозуміють свої помилки. Вони побачать прихильність і подумають: "Зачекайте, це не те, що я хотів", і на відміну від SVN, вони можуть повернутися і спробувати ще раз, перш ніж натиснути.
Як тільки вони звикнуть до ідеї зрозуміти, де їх зміни, тоді вони можуть почати вирішувати, коли пропустити кроки та комбінувати певні операції (коли витягнути, оскільки ви вже знаєте, що хочете отримати + злиття або коли натиснути цю опцію «Зв’язати та натиснути») .
Це фактично одна з величезних переваг git над SVN, і git розроблений з урахуванням цієї схеми використання. SVN, навпаки, приймає центральне сховище, тому не дивно, якщо інструментарій для git не настільки оптимізований для одного робочого процесу. У SVN, якщо ваше вчинення невірно, ваш єдиний справжній звернення - це нове зобов’язання скасувати помилку.
Це фактично природно призведе до наступної стратегії:
Заохочуйте їх використовувати місцеві відділення
Місцеві відділення фактично полегшують багато больових моментів роботи над спільними файлами. Я можу внести всі зміни, які я хочу, у своїй власній галузі, і це ніколи не вплине на когось, оскільки я не натискаю на них. Тоді, коли настане час, я можу використовувати всі ті самі стратегії злиття та перезавантаження, тільки простіше:
- Я можу переосмислити свою локальну гілку, що робить об'єднання її в головне тривіальне.
- Я міг би скористатися простим злиттям (створити новий фіксатор) у master, щоб внести в нього зміни моєї місцевої гілки.
- Я можу склеювати всю свою місцеву гілку в єдиний вчинок для господаря, якщо я вважаю, що моя гілка занадто велика безлад для порятунку.
Використання місцевих гілок також є гарним початком для розробки стратегічної стратегії розгалуження. Це допомагає вашим користувачам краще зрозуміти власні потреби розгалуження, тож ви можете вибрати стратегію, виходячи з потреб та поточного рівня розуміння / вміння команди, а не просто падіння Gitflow, оскільки про це чули всі.
Підсумок
Коротше кажучи, git не є SVN і не може так поводитися з ним. Тобі потрібно:
- Усуньте страх, заохочуючи безпечні експерименти.
- Допоможіть їм зрозуміти, чим відрізняється git, щоб вони могли бачити, як це змінює їх нормальний робочий процес.
- Допоможіть їм зрозуміти наявні функції, які допоможуть легше вирішити свої проблеми.
Все це допоможе вам поступово застосовувати краще використання git, поки ви не досягнете того моменту, коли зможете розпочати впровадження набору стандартів.
Особливості
У найближчий термін можуть допомогти наступні ідеї.
База даних
Ви згадали про базу даних і не дуже розумієте її у своєму питанні. Тож ось моя порада: спробуйте те, що я щойно описав. Внесіть деякі зміни локально, тоді як хтось інший натискає на деякі зміни. Внесіть зміни на місцевому рівні . Створіть каталог репозиторіїв як резервне копіювання. Отримати зміни іншої людини. Тепер спробуйте запустити команду rebase і подивіться, що відбувається з вашими зобов’язаннями! Ви можете читати нескінченні дописи в блозі або проходити навчання щодо перезавантаження і того, як слід чи не слід користуватися ним, але жодне з них не є заміною для того, щоб побачити його в прямому ефірі. Тож спробуйте .
merge.ff=only
Це буде питання особистого смаку, але я рекомендую його хоча б тимчасово, оскільки ви вже згадали, що у вас вже є проблеми з вирішенням конфліктів. Я рекомендую настройки merge.ff
дляonly
:
git config --global merge.ff only
"ff" означає "швидкий вперед". Швидке злиття вперед - це коли git не потрібно поєднувати зміни з різних комітетів. Він просто переміщує вказівник гілки вгору до нового коміту по прямій графіці.
Це робиться на практиці - це заважає git автоматично намагатися створювати об'єднання комітетів. Тож якщо я вчинити щось локально, а потім потягнути за чужі зміни, замість того, щоб намагатися створити об'єднання (і потенційно змусити користувача вирішувати конфлікти), злиття просто не вдасться. Насправді, git буде виконаний лише a fetch
. Якщо у вас немає місцевих комісій, злиття проходить нормально.
Це дає користувачам можливість переглядати різні комісії перед тим, як спробувати їх об'єднати, і змусить їх прийняти рішення про те, як найкраще впоратися з їх поєднанням. Я можу перезавантажити, продовжувати злиття (використовуючи git merge --no-ff
для обходу конфігурації), або я навіть просто відкладу злиття моїх змін на даний момент і обробляти це пізніше. Я думаю, що цей невеликий набір швидкості допоможе вашій команді уникнути неправильних рішень щодо злиття. Ви можете дозволити вашій команді вимкнути її, як тільки вони покращать обробку злиття.