Каковы общие антипаттерны использования Git?

Как новичок в Git, я понял, что использую его, как если бы это была Subversion. например всегда работает с мастером, не фиксируется локально перед извлечением изменений и т. д. Это часто приводит к ситуациям ручного слияния, которых можно избежать. Какие еще распространенные антипаттерны использования Git?


person Community    schedule 29.09.2009    source источник
comment
У меня такое чувство, что этот вопрос должен быть задан вики сообщества. Или вы действительно планируете принять один из ответов?   -  person innaM    schedule 29.09.2009
comment
Так почему бы вам не сделать это вики-сообществом?   -  person innaM    schedule 29.09.2009
comment
По теме: basilv.com/psd/blog/ 2009 /   -  person Jakub Narębski    schedule 30.09.2009


Ответы (6)


Большой шар изменений

Когда вы пишете сообщение о фиксации и не знаете, что поместить в однострочную сводку изменений, это, вероятно, означает, что вы поместили слишком много независимых вещей в одну фиксацию. Лучше разбить коммит на меньшие, используя «git rebase --interactive» и / или «git add --interactive» и друзей (например, «git stash --keep-index» для проверки сохраненных изменений).

Наличие единственной проблемы на коммит очень поможет при поиске ошибки с помощью "git bisect".

person Community    schedule 29.09.2009
comment
Также git gui в качестве графического интерфейса для git add --interactive. Вы можете выбирать блоки и строки кода визуально. - person Vi.; 06.10.2010
comment
git gui - это в 100 раз более простой способ сделать это. Хотя мне обычно нравится командная строка, и это все, что я использовал в течение долгого времени, я все еще использую графический интерфейс для основных коммитов и gitk для визуализации журнала. - person rjmunro; 29.01.2013
comment
Вы можете добавлять многострочные сообщения git commit. Если вы хотите сделать это из командной строки, откройте цитату, например, git commit -m - person Chris McCowan; 28.09.2018

Перебазирование ветки, которая уже была опубликована или слита из (а затем повторная публикация этой ветки). Это заставит всех вас ненавидеть, так как это приведет к ужасным проблемам, поскольку вы только что переписали историю и потребуете, чтобы те люди, которые слились из вашей ветки до перебазирования, вручную исправили проблемы, вызванные вашей перебазированием.

См. Также http://hades.name/blog/2010/03/03/git-your-friend-not-foe-vol-4-rebasing/, чтобы узнать подробнее.

person Community    schedule 02.11.2010

Это более общий характер, чем специфичный для git, но я видел много проектов с сообщениями о фиксации, такими как «bugfix», «fix foo» или «stuff». Не делайте этого, вместо этого используйте содержательные сообщения о фиксации, такие как «component fiz: Fix foo bug [\ n \ nExtra info]» и «Очистка пробелов». Вы будете благодарить себя, когда неизбежно посмотрите на историю своих коммитов позже, и вам не нужно будет говорить: «Что, черт возьми, я имел в виду, когда совершал« вещи »?»

person Community    schedule 14.07.2010

Не используется git stash

Сценарий: вы работаете над функцией A. На это у вас ушло около 2 дней, и у вас около суток до ее завершения. У вас есть хороший код, но есть еще кое-что, что нужно сделать. Появляется ваш босс и говорит: «Эй, мне нужна функция Б прямо сейчас. Это займет 10 секунд».

Конечно - 10 секунд на запись, 2 дня работы потеряно. Или 2 часа, пытаясь закомментировать и взломать весь код, который вы написали за последние 2 дня, чтобы вернуть все в рабочее состояние.

git stash здесь, чтобы спасти положение. Просто введите git stash в командной строке в корне вашего проекта, и все ваши недавние изменения попадут в «тайник», который представляет собой стек изменений. Теперь вы вернулись туда, где были 2 дня назад, но ваша работа не потеряна. Вы вносите 10-секундное изменение, регистрируете его, затем набираете git stash pop, чтобы вернуть изменения (и удалить их из стека).

Как может быть очевидно, если у вас УЖАСНЫЙ день, вы можете спрятать его несколько раз, хотя очевидно, что чем больше вы это делаете, тем менее увлекательным может быть слияние, когда вы, наконец, git stash вытолкните их все. Если вам удастся накопить много денег за месяцы работы, у вас есть git stash list, чтобы просмотреть их, git stash pop и git stash drop, чтобы выбрать, какие из них стоит вернуть, а какие лучше просто выбросить, и git stash clear, если вы прячете только ужасные идеи .

person Community    schedule 29.09.2009
comment
Хороший совет, но в чем антипаттерн? - person u0b34a0f6ae; 29.09.2009
comment
Конечно, без использования git stash. - person innaM; 29.09.2009
comment
Это в отличие от создания ветки. Типичный провайдер sc, такой как svn, заставит вас создать новую ветку, видимую для всех в репозитории. В широко используемом репозитории это может быть нежелательным и разрушительным, и теперь вам нужно подумать о хорошем понятном имени ветки ... А затем зарегистрируйтесь, переключитесь обратно на магистраль, и, наконец, можно приступить к 10-секундному исправлению. Все это или просто git stash. - person Chris Moschini; 06.10.2009
comment
Вам не нужно регистрироваться и переключаться обратно, вы можете просто создать ветку удаленно, переключиться на нее и оформить транк где-нибудь еще. - person detly; 14.07.2010
comment
git stash можно потерять. Ветки намного стабильнее и заметнее. А когда у вас есть ветка, вы можете делать коммиты несколько раз, вместо того, чтобы полагаться на один blob в качестве двухдневной работы, потому что на самом деле вы никогда не должны работать в течение 2 дней без каких-либо коммитов. - person Kzqai; 25.08.2011
comment
git stash особенно подходит, когда вы, вероятно, просто продолжите работу, спрятанную в новой ветке. Но я бы посчитал, что месяцы накопления тайников само по себе является антипаттерном. Как и в случае с тайниками без указания имен / комментариев к тайникам - на случай, если вы не вернетесь к этому. - person Bob Kerns; 09.10.2012
comment
В этом случае я бы создал новую локальную ветку в начале двух дней. И 2 дня работы означают много коммитов в этой ветке. Вместо того, чтобы прятать, я иногда совершаю коммит с сообщением журнала, например [временная фиксация], зная, что могу исправить это с помощью git commit --amend или git rebase -i позже. - person rjmunro; 29.01.2013
comment
Обсуждаемые здесь сроки зависят от вашего рабочего процесса; если вам нужно быстро отложить код для эксперимента, срочного изменения и т. д., git stash часто упускается из виду, особенно новички в git. - person Chris Moschini; 30.01.2013

Как человек, который много использовал SVN до того, как в последнее время начал все больше и больше использовать Git, я могу сказать, что моя худшая привычка - это делать git commit, git push, git commit, git push, git commit, _6 _...

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

После начального обучения, необходимого для отказа от этой привычки, мой рабочий процесс загружается быстрее. Одно из встроенных преимуществ Git - то, что локальная фиксация выполняется намного быстрее, чем удаленная фиксация. Еще одним преимуществом является то, что неспособность выполнять почти постоянные удаленные коммиты, вероятно, не убьет вас в будущем (особенно, если это небольшая команда, даже если это большая команда).

Для меня здесь нет реальной аналогии в SVN (который не вызывает " большой шар перемен " Якуба Наребски).

person Community    schedule 14.07.2010

Перенос одного большого репозитория из SVN и т. Д. В одно большое репозиторий git - это явный антишаблон. Git спроектирован так, что вы не можете выполнять частичные проверки, и даже коммиты могут быть медленными. Лучше разбить на модули и использовать репо для каждого компонента. По крайней мере, репо на команду. Определенно не репо на организацию.

person Community    schedule 24.08.2012
comment
+1 по этому поводу, хотя я бы сосредоточился на том факте, что подмодули Git предоставляют встроенную поддержку для разработки компонентов, а не о возможных ограничениях Git с большими репозиториями (я не сталкивался с теми, о которых вы упомянули). - person André Caron; 17.03.2014