Що я можу зробити для розробників, які не можуть вивчити Git? [зачинено]


68

Контекст

Моя команда з 8 інженерів зараз переходить до Git (з Subversion) для наступної нашої великої справи. У нас є кілька «досвідчених» інженерів, яким важко підібрати Git. Мені задають ті самі тривіальні запитання, незважаючи на те, що я надав посібники користувача, навчальні заходи та сесії на дошці. У нас було два молодших консультанта, які підбирали все за кілька днів, і це справді просвічувало світло. Це не шаблон, обмежений Git, але він став видимим у результаті.

Питання

Я не відчуваю особливої ​​прихильності до інженерів, які не можуть / не навчаться - особливо працівників, які мають тут стаж. Однак я хочу, щоб команда досягла успіху і створила чудовий продукт. Ми використовуємо централізовану модель Git Flow, і я відчуваю, що вся нова термінологія їх бентежить.

Чи можу я щось зробити, щоб допомогти цим працівникам вивчити Git?

Sourcetree - клієнт, яким користується вся команда.


1
Коментарі не для розширеного обговорення; ця розмова перенесена в чат .
maple_shaft

3
Проста бінарна логіка вогню проти зберігання може працювати для комп'ютерів, але не для людей. Ви можете перевірити на робочому місці.stackexchange.com своє питання, як тільки ви будете готові вирішити його за межі аспекту Git.
Френк

Зазначте, що Git добре виглядає в резюме ;-)
Mawg

1
Це справді проблема людей / психології, а не проблема інженерії програмного забезпечення.
Джеспер

@Jesper так і ні. Я збирався поставити це на робочому місці, але вбачав потенціал для дуже конкретних порад Git (які я отримав!), Які можуть бути негайно застосовними.
Гусдор

Відповіді:


148

Подаруйте їм іграшку.

Гіт важкий. Особливо, якщо ви виконували управління джерелами в іншій парадигмі. Я зламав збірку в перший раз, коли я спробував працювати з git. Це зробило мене настільки параноїчним, що я не хотів заїжджати, поки все не було зроблено. Я ховав версії в папках. Тоді я нарешті зрозумів, що мені потрібно, щоб пройти це:

Мені потрібно було безпечне місце для гри.

Після того, як у мене це було, я навмисно створював проблеми, щоб я міг навчитися їх вирішувати - і все це в моєму безпечному місці. Я розробив схему, яку міг би використовувати, навіть якщо перервався і все-таки повернувся до хорошого стану. Невдовзі до мене зверталися люди по допомогу з git. Все тому, що я взяв час, щоб пограти з іграшкою.

Якщо ви просто кинете їх у глибокий кінець, вам пощастить, якщо їм вдасться плисти.


36
Мені подобається ця відповідь, але на мій погляд виникає ще одне питання: як ти мотивуєш їх грати з цією іграшкою, коли вони "занадто зайняті справжньою роботою"?
Девід Арно

18
Дайте їм кредит за те, що це зробите, якщо доведеться. Роздайте сертифікати "Git кваліфіковані", якщо ви думаєте, що можете продати. Але якщо серйозно, якщо це їх не цікавить, природно, у вас є більші проблеми, ніж Git. Усі розробники повинні мати можливість використовувати інструменти для розробників.
candied_orange

48
@DavidArno Скажіть усім витрачати на це годину в день, незалежно від інших робіт. Або навіть дві години. Вміння правильно використовувати джерело управління є життєво важливим для проекту. Вивчення цих інструментів - це "справжня робота".
coinbird

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

18
Я збентежений. Ніхто не згадував обов'язкового xkcd !
GnP

32

Середньому розробнику не потрібно багато смаколиків. Це система управління розподіленими джерелами, але більшість команд використовуватиме її з центральним канонічним репо, щоб проштовхуватися та витягуватися.

Основні команди, які знадобляться вашій команді, це:

  • витягнути та об'єднати зміни з віддаленого та вирішити виникаючі конфлікти (потенційно відновлюючи)
  • виконувати та натискати на віддалене зобов’язання (або натиснути на інсталяцію репо / гілки, щоб зміни витягнулися в основні після перегляду)
  • Для підтримки: виправте безлад, зробивши щось не так.

ті, які потребуватимуть просунутіші користувачі

  • обробляти місцеві коміти
  • управління гілками

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

Переконайтеся, що вони є добре задокументованими та гідно неправдивими доказами.

Це в дусі коміксу xkcd , просто запам'ятайте команди і сподівайтеся, що речі не заплутаються занадто сильно, коли вони запитають професіонала.


8
Він використовує робочий процес gitflow, тому управління гілками не слід вважати розширеною темою - це частина основної команди, яку його розробники повинні розуміти. Загалом, Git трактує управління галузями як щось основне, а не розвинене.
slebetman

5
@slebetman: Надання цього імені не робить його менш складним або складним.
Роберт Харві

3
Ви згадуєте "обробляти локальні послуги", як знадобиться щось більш досвідченим користувачам. Теоретично керування версіями на власному комп’ютері має бути значно нижчим за шкалою складності, ніж управління версіями у віддаленому репо-репортажі, спільним з іншими кодерами.
Тулан Кордова

Можливо, якщо ви працюєте де-небудь, де працює менеджер випусків повного робочого дня, вам не потрібно турбуватися про гілки, але де б там не було, диски повинні підштовхувати функції до тестової гілки кожного циклу, об'єднуючи виправлення з першочерговим завданням від гілки тестування до тесту галузь розробки та робить випуски для виробництва поза тестовою галуззю.
Брайан Гордон

@RobertHarvey: Розгалуження не є ні складним, ні складним. Це основне. Робочий процес gitflow складний у кутових випадках, таких як виправлення помилок, але загальний випадок використання простий.
slebetman

28

Запропонуйте їм використовувати інтерфейс Git.

Якщо вони мають досвід роботи з TortoiseSVN, TortoiseGit (лише для Windows) працює майже точно так само. В іншому випадку SourceTree (Windows + Mac) чудовий - у нас є кілька QA, які не розробники, які змогли легко освоїти складні завдання в Git завдяки SourceTree.


4
+1 для SoruceTree. Для проекту коледжу з близько 30 студентів я провів перехід від Subversion до Git за допомогою SourceTree. Люди адаптувались досить швидко, коли вони засвоїли основи, і ми мали велику кількість посилань на документацію. Я також закликав експериментувати в тестових галузях. Я б сказав, що приблизно 75% людей було зручно користуватися ним до кінця семестру, а деякі навіть почали використовувати командний рядок.
Dewick47

5
Якщо сказати йому, що він користується графічним інтерфейсом, він уже сказав, що він використовує, не дає відповіді на запитання.
WGroleau

9
Оригінальний пост було відредаговано так, щоб джерело використовувалося після розміщення цієї відповіді.
Dewick47

7
Я також запропоную GitKraken. Це те, що я використовував для того, щоб представити Git своїх партнерів у проекті CS capstone. Вони підняли його протягом 15 хвилин - це просто мертвий і має прекрасний, інтуїтивний інтерфейс. І ні, я не з маркетингом GitKraken.
Chris Cirefice

2
git guiі gitkприходьте з самим git, і мені їх було набагато легше вивчити, ніж інструменти командного рядка. Якщо ви, природно, орієнтовані на командний рядок, то прості графічні інтерфейси чудово підходять для самих основ, а ви можете git rebaseі більш складні речі з командного рядка.
Пітер Кордес

25

Ця відповідь намагається розглянути питання про те, як зацікавити старших програмістів git, а не про те, як gitнайшвидше навчитися - для цього чудова книжка з git чудова, або будь-яка кількість навчальних посібників (=> Google). Хорошими посиланнями на цю відповідь є Git - це суто функціональна структура даних або особливо коротка Як git зберігає ваші дані .

Боюся, що я маю на це досить похмурий погляд. Я був саме у вашому взутті - я gitботанік і хотів перетворити команду подалі від svn, давайте поглянемо, недостовірні результати. У моєму випадку це призвело до того, що я активно змінюю своє власне сприйняття і приймаю, що люди просто не можуть бути «змушені до щастя». Люди - це не комп’ютери, програмувати їх неймовірно важко. Я все ще радий тому, що спробував, він досить м'яко показав мені те, чим я займаюся і чим не хочу займатися у своєму професійному житті.

Є люди, які починають мотивуватися, коли залучаються нові речі, і є такі, хто вмотивований. Це не має нічого спільного git, але gitконкретно у вас завжди виникає ефект "навіщо нам взагалі його використовувати, якщо svnце просто добре?", Що є масовим психологічним бар'єром.

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

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

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

GUI

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

Ключовою є (статична) структура даних

Почніть з пояснення внутрішніх типів даних (їх є лише три-плюс-один: блоби, дерева, коміти, анотовані теги, остання з яких на цьому етапі не хвилює) та їх структуру. Ви можете легко зробити це на дошці / олівцем; дерево легко малювати, оскільки його ніколи не можна змінити, ви можете буквально просто додавати речі весь час. Ви можете зробити ігровий сеанс у щойно створеному локальному сховищі та використати git cat-fileдля перегляду фактичних об’єктів, щоб показати їм, що вони насправді такі тривіальні, як рекламовані.

Якщо ви можете допомогти їм зрозуміти це

  • ... в історії є буквально лише 3 типи об'єктів, усі вони дуже прості, майже тривіальні та
  • ... більшість gitпідкоманд просто «масажують» ті об’єкти так чи інакше, причому майже тривіальними операціями (в основному, є лише одне: десь додайте нове фіксування), і ...
  • ... все легко можна побачити прямо перед вами з lsта git cat-file...

тоді вони матимуть ментальний переклад того, що є насправді у сховищі. У цей момент люди похилого віку можуть пам’ятати, що внутрішні органи - svnце таємна магія (коли-небудь виникали проблеми із замками всередині сховища svn, або із «реінтегруючими» гілками тощо?), І це може просто їх трохи мотивувати.

Одна з проблем, зокрема людей, які раніше звикли svn, - звикнути до думки, що одним фіксом (об'єктом, а не дією) завжди є все дерево директорій. В svn, люди використовуються для здійснення окремих файлів. Це кардинально інший підхід. О, і той факт, що той самий термін "фіксування" використовується і для статичного об'єкта, і дія теж не допомагає.

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

Дії, пояснені з точки зору структури

Коли вони зрозуміли, з яких частин складається gitсховище, настав час показати їм саме те, що gitроблять окремі підкоманди щодо них.

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

Коли вони зрозуміли, що ці команди просто вирощують дерево (яке, знову ж таки, на цьому етапі складається з 3-х типів - blobs, дерева, commits, а не тільки comits), ви можете зробити перше git pushі git pull(у швидкому режимі вперед! ) показати їм, що gitбуквально лише штовхає його об'єкти навколо, що хеші насправді є лише хешами вмісту, що ви можете легко скопіювати ці речі за допомогою команди копіювання файлової системи тощо.

Очевидно, що тримайтеся далеко від будь-яких несуттєвих варіантів цих команд, ми говоримо git add hello.txtтут.

Гілки

Зауважте, що розгалуження особливо важко для svnлюдей, оскільки воно зовсім інше. svnМодель набагато легше візуалізувати, так як там в основному немає нічого , щоб візуалізувати - це на увазі. gitМодель не так багато. Переконайтеся, що вони знають з самого початку, що гілки та теги - це лише "наліпки", які кудись вказують, а насправді "не існують" з точки зору статичної, непорушної історії.

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

Якщо у них це вниз, ви можете пояснити, як git pullнасправді git fetch && git merge; як усі репозиторії насправді містять абсолютно однакові об’єкти ( git fetchмайже те саме, що копіювати речі scpвсередині каталогу об’єктів git) тощо.

Ймовірно, якщо до цього часу ви не дотягнулися до того, щоб пробудити їх інтерес, то ви можете так само здатися, але якщо їм вдасться дістатись так далеко, то у них є всі розумові інструменти, і їх має бути мало страх пов'язаний більше. Решта (git workflow ...) повинна бути тоді під гору.

Останні слова

Це звучить як багато зусиль, і це насправді так. Не продайте це як "нам це потрібно для цього проекту", але "це допомагає вам особисто розвиватися і допоможе вам у всіх ваших подальших взаємодіях". Для цього вам потрібно багато часу, а час - це гроші. Якщо ви не маєте на це схвалення керівництва, це може просто не варто; ви можете, можливо, поговорити про це зі своїм начальником.

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


11
Можливо, правда, але проблема такого підходу полягає в тому, що більшість програмістів не хочуть витрачати дні на розуміння деталей контролю над своїм вихідним кодом. Вони просто хочуть, щоб це працювало, просто. . IMO, git не вдається. Досить важко зрозуміти, як працює ваш фактичний код, щоб переживати про краплі.
user949300

1
Ваш коментар на 100% правдивий, @ user949300, отже, в кінцевому підсумку мій запит щодо заміни gitна якийсь супер-порцеляновий, який не потрібноgit ефективно використовувати . Робочій програмі потрібно було б прийняти її (включаючи час, що займається) відповідно до їхньої діяльності. Як я вже писав, я не мав успіху з цим (або будь-яким іншим) підходом, щоб змусити всіх "в складку", але все ж, якби я (змушений) спробувати ще раз, це був би мій підхід знову.
AnoE

1
Чесно кажучи, я думаю, що ти можеш отримати досить далеко у використанні git, не розуміючи, як це працює. Якщо ви знаєте галузь, додайте, натисніть і потягніть, як це 95% того, що типовий чоловік коли-небудь використовуватиме.
Кейсі

6
@ user949300 "Дні" зовсім не відповідають моєму досвіду вивчення Git. У Git є найкраща документація, яку я бачив у будь-якому проекті. Ви можете підібрати всі основи, витрачаючи годину на читання перших трьох розділів Pro Git , написаних у дуже доступному форматі з великою кількістю діаграм. Швидке "як мені ___ в Git" в Google майже незмінно забезпечує решту - як правило, з відповіді Stackexchange.
Джон Бентлі

1
@Gusdor та ін, майте на увазі, що ця відповідь характерна саме для цього питання - як зацікавити старших програмістів про навчання git. Очевидно, що всі інші ресурси (відмінна документація по git, навчальні посібники тощо) також дійсні. Гусдор, якщо ви хочете дізнатися більше, google "git об’єкти" або "git структури даних", і ви швидко знайдете безліч інформації. У відповідь я додав кілька посилань. Ви можете навіть попросити когось із людей похилого віку провести сеанс коричневого кольору. ;)
AnoE

14

Я хотів би віднести вас до цього запису в блозі Джоела Спольського .

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

На додачу до цього, наскільки я не люблю це говорити; хто насправді читає посібники користувача? Зазвичай вони дуже погано пояснюють базове використання. Просто перегляньте сторінку посилань на git в посібнику та подумайте, скільки нових термінів та фраз вводиться тому, хто не досягає цієї концепції. Без гарного вступу я б, швидше за все, відмовився від використання Git тут же.

Моя особиста порада - почати пояснення команд:

  • git add <файли>
  • git фіксувати
  • git pull
  • git push
  • git статус

Далі слід пояснити логічно злиття конфліктів, оскільки це, безумовно, буде вашим першим питанням, коли люди дізнаються, як робити код.

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

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


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

2
Ваше посилання на запис у блозі дало мені непов’язане відео на YouTube.
WGroleau

2
Я вважаю git statusжиттєво важливим, крім чотирьох команд, які ви відзначили.
user949300

1
@JoshuaTaylor Я не збирався говорити, що посібники погані, вони насправді чудові. Однак уявіть, як хтось посилається на людину git і просто говорить; давай, це легко навчитися, просто читай чоловічі сторінки. Моя думка не в тому, що документація не велика, багато з них бездоганно написана і корисна людям, які знають домен, для якого написано, але це, як правило, нікчемно для тих, хто шукає базового використання. EDIT : І останній пункт, здавалося б, є проблемою, з якою виникає ОП.
Робзор

@ user949300 Хороший улов, я абсолютно згоден.
Робзор

11

Git - це головне переосмислення, якщо ви навчилися робити керування джерелами на SVN. Багато звичок, які ви виробили там (які, можливо, були найкращою практикою для SVN), будуть неправильно вводити вас під час використання git. Це передусім тому, що модель розгалуження git настільки принципово відрізняється. Він не використовує папки для гілок, а також можливо зробити його нелінійним, оскільки він був розроблений для кращої підтримки випадків розподіленого використання. Вивчити звички до SVN та зрозуміти, як ви повинні використовувати git, потрібен певний час .

Почати просто

Ви кажете, що вибрали Gitflow як свій стандарт для управління філіями. Це вважає мене найбільшою помилкою.

Цитувати Gitflow вважається шкідливим :

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

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

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

Почати потрібно простіше. Не хвилюйтесь про стандарт розгалуження прямо зараз. Зосередьтеся на тому, щоб звикнути спочатку використовувати git . Вам потрібно дійсно кілька операцій, щоб почати:

  • клон
  • тягнути
  • відділення
  • злиття
  • вчинити
  • поштовх
  • знання про те, як .gitignoreпрацює
  • можливо тег

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

Поступово збільшуйте знання

Звідси ви можете поступово навчати їх на дещо вдосконаленому використанні.

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

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

Потім виберіть стандарт розгалуження

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

  • Вони не мають достатньо знань про інструмент, щоб сказати, чи добре працює стандарт у випадках використання компанії
  • Вони не зможуть запропонувати альтернативні стандарти
  • Вони повинні засвоїти і інструмент, і стандарт одночасно
  • Деякі вважають, що обраний вами стандарт - це єдиний спосіб, коли вони можуть використовувати git
  • Вони не зможуть визначити рідкісні випадкові випадки, коли стандарт приносить більше шкоди, ніж користі

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

Ось декілька альтернатив Gitflow, які ваша команда може розглянути:

Подивіться на них та Gitflow, порівняйте їх із вашими випадками використання та виберіть відповідний.


2
+1 для згадування альтернатив Gitflow. На мій досвід, багато страждань приходять від магазинів розробників, які намагаються прийняти це, коли це надмірно для їх потреб та / або не використовується належним чином. Простіша модель майже завжди краща в тих випадках і має додаткову перевагу, що робить Git набагато легшим у навчанні.
Грім

5
@Thunderforge Я не згоден з тим, що називаю це "overkill", оскільки це говорить про те, що це якось більш потужно або гнучко, або якимось чином вигідніше. Я дійсно не вірю, що Gitflow має якісь переваги. Здається, це є кроком назад: намагаються приймати складні робочі процеси, необхідні в інших інструментах контролю версій, таких як SVN, і просто використовувати Git таким же чином. Однак Git має гнучкість, що дозволяє в першу чергу спрощувати робочі процеси. Я думаю, що звернення полягає в тому, що воно дає ілюзію, що потрібно менше думати (правила та інструкції), не виконуючи їх. Але ваша думка взята. Дякую.
jpmc26

4
Я згоден з вашим підходом. Ми не так давно перейшли в Git із SVN. Ми надали іншим розробникам список команд, які вони ОБОВ'ЯЗКОВІ використовувати, список команд, які НЕ БУДУТЬ використовуватись без допомоги, і список команд, які НЕ БУДЕ НІКОЛИ використовувати (принаймні, не без допомоги місцевих експертів Git). Ми провели кілька тренінгів з основ роботи Git і як ним користуватися. Протягом кількох місяців наша команда повільно звикала до цього. Зараз у нас виникають лише випадкові проблеми з розгубленням диска.
Кайл A

1
@Gusdor У вашому запитанні сказано: "зараз переходить. Що це означає? Крім того, якщо ви не отримуєте покупку, Gitflow навряд чи вдасться, оскільки вона настільки велика вага, чи вважаєте ви, що має переваги чи ні.
jpmc26

2
@Gusdor Моя порада вам полягає в тому, що вам може знадобитися розвивати свої навички викладання. Вам потрібно краще визначити першопричину непорозуміння або відсутньої інформації. Вам потрібно вміти розбиратися, де чиїсь міркування йдуть не так. Щоб писати документацію, вам потрібно не лише вміти дражнити її у людини, але й потрібно передбачити, де люди заплутаються або що змусить їх відмовитися від спроб її використання.
jpmc26

11

Я знайшов stackoverflow дуже корисним, коли я вперше підбирав термінологію Git. Питання на кшталт цих були дуже корисними для мене (в основному через їх стислість), і я тримав їх відкритими на вкладках протягом перших двох тижнів, якими я користувався. Можливо, роздрукувати пару відповідей жирним шрифтом? Особливо схема на першому.

Які відмінності між "git commit" та "git push"?

Яка різниця між "git pull" та "git fetch"?

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

Окрім цього, цей біт, мабуть, належить до коментаря, але мені не вистачає представника: я один з молодших консультантів, згаданих у питанні. Перш ніж я почав, я мав уявлення, що таке система управління джерелами, і я буквально двічі ткнув SVN, Гусдор дає мені більше кредитів, ніж я заслуговую. У всій команді були якісні спеціалізовані тренування Git, іграшки та час для гри. Проблема не в інструкції Гусдора. Я сподіваюсь, що для цього є хороше альтернативне рішення, щоб я міг важко зробити закладку і дізнатися більше.


Чудові посилання. Я збираюся вкрасти це зображення потоку даних!
Гусдор

9

Купіть їм книгу

Чесно кажучи, я прямо впав у табір, який ви описуєте. Я прийшов з фонових джерел SourceSafe та ClearCase. Спочатку Гіт був для мене абсолютно невразливим, незважаючи на те, що мій начальник кілька разів проходив по ньому.

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

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

Найкраща здогадка про книжкову рекомендацію:

Pro Git від Скотта Чейкона (посилання Amazon для зручності ... купуйте у кого завгодно: https://www.amazon.com/dp/1484200772/ref=cm_sw_r_cp_dp_T1_BNruzbBQ8G9A6 )

Примітка : Чи не НЕ купити довідник для Git. Це зовсім не допоможе.


6
Pro Git, безумовно, є тим, хто повинен піти на ІМО. Ви можете отримати його безкоштовно з веб-сайту Git . Не потрібно платити за це, якщо ви дійсно не хочете отримати копію на папері.
Джон Бентлі

4

З мого досвіду, деякі люди можуть комфортно користуватися git, не розуміючи цього. Вони знаходять основний підручник, підбирають основні команди і їм добре йти. Це, мабуть, там вам підходять молодші консультанти. Я не вірю, що ти дійсно можеш навчитися git за кілька днів!

Інші люди не можуть цього зробити, їм потрібно зрозуміти, що робить git, і це потребує більше часу. Я був у цій категорії; Мені було дуже корисно грати зі вмістом .gitкаталогу, і тоді мені почали клацати речі. Також допомогли один на один сеанси з нашим технічним керівником.

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


4

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

У програмі Peopleware основними тезими всієї книги є:

Основні проблеми нашої роботи мають не стільки технологічний, скільки соціологічний характер .

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

Давайте подивимось на це з вашої точки зору, як на людей, а не на технічні машини:

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

Мабуть, тому юніори взяли до цього краще - можливо, вони не розібралися svnі gitє їх шанс кинути його ^.

Хоча люди похилого віку насторожено ставляться до можливих витрат - якщо вони навчаються git, то вони не такі:

  • Реактивність навчання / Кутова / Швидка / Блокчейн / Котлін (якась інша річ, на яку вони вважають, що повинна вчитися).
  • Робити "робити сам" / побігати / плавати / поезія / глокенспіель / все, що вони насправді хочуть робити.
  • Проводить час зі своїми дітьми / родичами / друзями / значущими іншими.
  • Здійснення цієї "великої нової речі" - термін, бюджет тощо. Вони, мабуть, переживають за це.

    "Мені потрібно зробити все вищезазначене. Навіщо мені користуватися, git коли у нас вже є контроль над джерелами?"

Які причини ви їм дали перейти від однієї речі, в якій вони хороші, до іншої, яка відверто незграбна, коли ви новачок у цьому, і вимагає повного переосмислення того, як ви робите розробників? Ви пояснили переваги gitфункцій?

Затягування запитів? Дрібнозернисті чеки? Розподілене джерело? Вилки?

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

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

Удачі.


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

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


3

Я думаю, це менше питання інженерії програмного забезпечення, а більше питання психології. Я хотів би звернутися до цього Algorithms to Live By: The Computer Science of Humand Decisions. У ньому автор переходить до теми дослідження / використання компромісу. Люди зазвичай проходять фазу розвідки, а потім через фазу експлуатації (використання) того, що вони досліджували. За цим існує певна суцільна математична теорія, чому це так, щоб оптимально використовувати щось за певний проміжок часу.

Це також поширюється на вік і досвід. Люди бачать власне життя як інтервал, і після певної фази дослідження оптимально почати використовувати свої знання. Вони цитували дослідження, в якому старших учасників запитували, чи хочуть вони зустріти когось із відомих, кому вони подобаються, а точніше - члена сім'ї. Зазвичай вони обирали члена родини, тоді як молодші люди скоріше вибирали відому людину. Однак коли його попросили уявити, як вони вирішать, якби вони на 20 років молодші, люди похилого віку також обирали відому людину. Що говорить про те, що люди припиняють будувати свої соціальні мережі, коли вони вважають, що їх менше від розвідки, ніж від використання того, що вони вже знають.

Ваші старші інженери, мабуть, старші, вони, мабуть, пройшли кілька систем управління версіями. SVNце, мабуть, найкращий, який вони використовували до цих пір (принаймні, дивлячись на старі системи версій, якими я користувався, SVN переміг їх усіх).

Їх оптимальною стратегією є використання SVN, оскільки вони провели своє дослідження і виявили, що це найкраще, що вони зараз експлуатують.

Це основна людська психологія, і сотні тисяч років еволюційної оптимізації, з якою ви боретеся.

Вам потрібно буде показати їм: а) скільки тривалої кар'єри вони мають перед собою, щоб продемонструвати їм думки з іншого погляду на проміжок часу, на який вони бачать себе, і b) запитати у них, що вони вважають за велике і що вони роблять ' повторно відсутня в SVN. Ви можете викласти сотні переваг git, але вони вже матимуть чітке уявлення, чому SVNце найкраще, адже вони, мабуть, відчували 5 систем управління версіями раніше. Вам потрібно знайти шматок у броні цього аргументу, а потім побачити, чи gitзможуть вирішити ці проблеми, тоді вони переконали себе.


2

Не давайте їм інструмент чи графічний інтерфейс для використання Git. Це лише заплутає речі. Задум Git запускався в командному рядку так, що, мабуть, має бути місцем, про яке він дізнався. Будь-який графічний інтерфейс може мати свої умови та особливості, дотримуватися простого.

Далі слід переглянути деякі проблеми, які робить Git краще, ніж SVN. Для того, щоб ваша команда вивчила це, вам потрібно мотивувати їх, щоб зрозуміти, чому краще git.

  • Можливість вчиняти, не підключаючись до мережі
  • Можливість складати та грати з власними гілками
  • Патчі, які можна надіслати між собою і все ще об'єднати доріжку
  • збирання вишні без болю.
  • звільнення змін
  • знаходження помилок із зрощенням git

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

Дізнатися нову річ, і є достатньо подібностей, які можуть заплутатись, але насправді в 2017 році DCVS - це дуже важливий навик для кожного розробника.


1
+1 Інше, що дуже розвинені теми, такі як збирання та звільнення вишні (для мене ракетна наука), навчання командному рядку - це порада, яка насправді має багато сенсу. Це єдиний спосіб насправді навчитися Git. Ви вперше вивчаєте HTML, перш ніж використовувати Dreamweaver, правда? Я б створив кілька псевдонімів до найпоширеніших команд перед початком руху. Наприклад, команда Log - візантійська і таємнича, просто створіть для них псевдонім, який друкує приємну історію.
Тулайн Кордова

7
Я абсолютно не згоден. Огляд DAG - це найважливіший інструмент для розуміння того, що відбувається. Перегляд, який надходитиме лише з графічного інтерфейсу.
Есбен Сков Педерсен

1
git log --graph --abbrev-commit --decorate --date=relative --all
Джеремі Френч

1
git guiі gitkпоставляйтеся з основним пакетом git, і не намагайтеся зробити так, щоб git виглядав як щось інше. Вони чудові, особливо gitk --allдля перегляду всіх гілок та для скидання поточної гілки для вказівки на інші коміти або подібні речі. У gitk "вишня вибору" - це один із варіантів, які ви отримуєте, коли клацніть правою кнопкою миші на фіксації. Він використовує ту саму термінологію, що і інструменти командного рядка.
Пітер Кордес

3
@JeremyFrench ASCII мистецтво не дуже корисний спосіб перегляду графіку, такого складного, як git repo.
jpmc26

2

Скажіть їм не хвилюватися

У Git, коли робота зроблена, втратити майже неможливо. Єдина робота, яку ви можете легко втратити, - це робота, яка ще не була зроблена.

Покажіть їм, як це git reflogпрацює. Вони не повинні знати, як ним користуватися; вони просто повинні знати, що це там, щоб вони могли отримати допомогу, щоб повернути свою роботу, якщо щось піде не так.

Тоді вражіть на них це одне просте правило: коли сумніваєтесь, виконайте. Вони завжди можуть відмовитись від виконання зобов’язань пізніше (навіть віддалено!).

Не використовуйте графічний інтерфейс

GUI дасть їм швидший початок, але вони ніколи не зрозуміють Git. Крім того, я виявив, що не "майже неможливо втратити" віддану роботу під час використання графічного інтерфейсу Git. Я бачив, як графічні інтерфейси роблять жахливі речі, як-от представити контрольний список під час злиття, а потім, якщо користувач зніме елемент, видалить цей файл з історії без попередження та запису про нього. Графічний інтерфейс набагато гірший, ніж просто вивчення командного рядка Git.

Код програми-програми вчиняється

Навчання, git add -Aза яким git commitслід, не повинно бути надто важким, але особливо при злитті (або відновленні) проти дистанційного, їм буде потрібна допомога. Дайте зрозуміти, що будь-хто може будь-коли просити допомоги. Очікуйте, поки вони набирають команди та роблять нотатки. З часом вони поступово збільшуватимуть кількість ситуацій, з якими можна впоратися без сторонньої допомоги.

Git вже безпечний

Хтось вище говорив про те, щоб "було безпечне місце для гри". Але Git - це безпечне місце. Є лише два звичайних, щоденних випадки, коли легко втратити роботу:

  • Незапущений код
  • Використання графічного інтерфейсу

Переконайтесь, що вони здійснюють рано і часто, і що вони не починають неправильний шлях за допомогою GUI, і незабаром побачать, що можуть довіряти Git зі своїм кодом навіть більше, ніж інші системи управління джерелами в минулому.


1

Я б порадив поглянути на Gitless . Це обгортка над мерзотником , що спрощує основний робочий процес багато (не потрібно турбуватися про плацдармі, філії тримати свої власні робочі копії файлів, простіші застосування git rebaseобробляються з gl fuseі т.д.), зберігаючи при цьому основний репозиторій для спільної роботи або якщо вам потрібно зробити щось незвичне. Також повідомлення трохи зручніші для початківців. І команди досить близькі, щоб git діяв як трамплін, якщо їм потрібно з будь-якої причини використовувати систему без gitless на ній.


1
Це дуже цікава ідея, але я мушу задуматися: якщо Gitless не справді просто-таки мертвий (а що це таке?), То інвестиції в його вивчення можуть бути марною тратою часу. Ви також можете докласти трохи додаткових зусиль, щоб навчитися правильно git, що було б більш універсальним і товарним навиком. Можливо, якби ми могли переконати Торвальда, Хамано та ін. щоб інтегрувати інтерфейс Gitless, тоді ми справді мали б щось.
Коді Грей

Ну, це так просто, як ви збираєтеся потрапити в рамки сумісного з Git порцеляни. Усі звичайні команди - це операційні одиниці з чіткими іменами та не потрібні аргументи.
Девід Хейман

0

Я спробував документувати основи використання командного рядка git. Це все ще було заплутано - як для себе (який мав досвід використання Perforce та Source Safe), так і програмістів, які вважали за краще стару парадигму "просто застебнути відповідні папки". Турбує те, що непрозорий інструмент змінює вміст мого робочого каталогу, і часто мені доводиться сперечатися з інструментом, щоб включити певні зміни до мого робочого каталогу.

Натомість я використовую два види непрямості.

  • Я використовую GitKraken для надання візуальної історії моїх гілок та графічного інтерфейсу, який приховує оператори командного рядка. GitKraken обробляє взаємодію між віддаленим сховищем "походження" та тим, що git вважає моїм локальним робочим каталогом.

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


0

Чи можу я щось зробити, щоб допомогти цим працівникам вивчити Git?

Ви впевнені, що проблема - це Git, а не щось інше? Що я отримую від коментаря, це те, що керівництво вирішило щось змінити, не купуючи у старших учасників, і доручає комусь молодшому, щоб вони змінили зміни. Це здається гарною відправною точкою для невдач, що б там не було. Складність Git не є проблемою, проблема полягає в тому, що зміна, в якій вони не відчувають потреби, примусово застосовується до них.

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


0

Часто Git вводять у користування в компанії для вирішення проблем з філіями. Так, це краще на гілках, ніж Subversion, але це не робить ніякої магії.

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

  • Створені гілки як керівництво не готові вирішувати між конфліктуючими вимогами
  • Використовували відділення для кожного клієнта, а не комутатори конфігурації.
  • Доводилося мати відділення для виправлення помилок для кожного клієнта, оскільки керівництво не бажало змушувати всіх клієнтів до оновлення до однієї версії програмного забезпечення
  • І т.д.

Тому, як тільки деякі мені кажуть, що інструмент добре розгалужує мій погляд, каже мені.

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

Крім того, концепція того, що двоє людей одночасно працюватимуть над одним файлом, є «добре», просто не прийнятна для того, хто пережив добре проведений проект, тому просування Git як інструменту для цього навряд чи отримає досвід розробники вам подобаються.

Кожного разу, коли я переглядаю історію в Git, дуже важко зрозуміти, чому змінився код, оскільки 50% або більше історії є злиттями, що логічно ніколи не повинно бути публічним, і вони стають безглуздими, як тільки код залишає розробників верстат.

Але я хотів би працювати десь там, де:

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

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

Тому в будь-якому місці, яке дозволяє розробнику просуватися від локального Git до центрального Git, робить це неправильно; контрольований автоматизований процес повинен приймати зміни від розробників, після тестування їх тощо, і перевірка злиття нормально оновлює центральний Git, вирівнюючи все галузей тощо, які не представляють довгострокового інтересу.

Я сподіваюся, що Kiln ( http://www.fogcreek.com/fogbugz/devhub ) або навіть GitHub, використовуючи робочий процес "запит на потягу", залишили б задоволеними досвідчених розробників, наприклад, не почніть з низького рівня, почніть з покращеного процес.


1
Причинами переходу на Git є: 1. Поради та документація спільноти 2. Широка сумісність інструментів 3. Немає блокування постачальника. Ми створили інструментальний конвеєр (в основному jira> bitbucket> bamboo), який застосовує перевірку коду та тестування одиниць перед реінтеграцією. Що дало тобі думку, що ми ковбої?
Гусдор

@Gusdor тому, що GIT був створений для організацій без центрального контролю, наприклад, ковбоїв .....
Ян

З питань запитання: "Ми використовуємо централізовану модель Git Flow ..."
Гусдор

1
Це цікавий момент. Коли мене вперше прийняли на роботу, VCS натрапила, і мене попросили про думку про заміну. Я вибрав SVN, оскільки вважав, що GIT не можна використовувати централізовано. Не впевнений, що багато наших хлопців переглядають ТАК: O
Гусдор

1
@Ian Цими міркуваннями всі користувачі Інтернету просуваються американські військові інтереси, оскільки прото-Інтернет був створений спочатку військовими та для них (DARPA). Крім того, кожен, хто носить ремінці на липучках, очевидно, є NASA, тому що липучка була винайдена для застосувань із нульовим рівнем G.
maple_shaft
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.