Pull to refresh

Comments 24

Хочу предупредить новичков о подводных камнях связки fetch + merge. Об этом обычно почему-то не говорят — но очень многие инструменты различают первый коммит и второй среди предков коммита слияния. И историю считают по первому.

В итоге, если делать fetch+merge — получится будто бы в ветке вы сделали коммиты 3 и 4, а потом коммитом 6 влили в нее чужой коммит 5. Если по такой истории будет, к примеру, автоматически строиться changelog — то коммит 5 попадет в него после пуша еще раз.

Поэтому нужно переключаться на внешнюю ветку и сливать туда свои локальные коммиты.

Кстати, в github/gitlab flow такой проблемы нет.

В качестве GUI-клиента под Windows (настоятельно) рекомендую GitExtensions.
И не рекомендую TortoiseGit — его команды действуют совершенно неожиданно.

А я посоветую SourceTree для визуалов и не посоветую SmartGit, который сломал мой репозиторий на обычном fetch.
SourceTree, в свое время, неожиданно сделал мне коммит даже не задавая никаких вопросов, хотя я просто тыкался по дереву, в попытках вывести информацию об определенной ревизии, чем, в общем-то, убедил меня знакомство не продолжать. GitExtension таких вольностей себе не позволяет, пока явно в кнопку «коммит» не ткнешь — не закоммитишь.

Можно подробностей в чем заключалась поломка? Давно пользуюсь SmartGit он гораздо шустрее и адекватнее SourceTree.

Я согласен, что он шустрее в интерфейсе, именно поэтому решил его попробовать. Но при первом же знакомстве он просто сломал мой git svn репозиторий на fetch, поломав всю историю для веток. Дальше знакомство я не продолжал.
А вы точно git svn правильно настроили?.. Если что, я знаю кучу способов поломать ему историю :-)
Предполагаю, что если я работаю с этим репозиторием в двух других клиентах уже полгода нормально, то вероятно проблема не в репозитории.
UFO just landed and posted this here

TortoiseSVN, TortoiseGit и TortoiseHg похожи только черепашкой на логотипе.

UFO just landed and posted this here
Лично я про «лучше» ничего не утверждал (и не минусовал). По мне — каждому инструменту своя задача и TG я использую. А про эту «омонимику», когда все Tortoise существенно не похожи — не вы первый спотыкаетесь.
Спорить о клиентах git вообще неконструктивно. Они все — обёртка консоли, и если человек не понимает, что делает, то не понимает примерно одинаково, что в GUI, что в консоли.

(ответ также к начальному вопросу sumanai)


если человек не понимает, что делает, то не понимает примерно одинаково, что в GUI, что в консоли.

В моём случае (это было 5 лет назад) с TortoiseGit я совершенно не понимал, что делает та или иная кнопка, в то время как в консоли у меня проблем не возникало. Хуже того, не понимали другие пользователи, которые не умели в консоль. Никто не смог разобраться.


Обычный тогда сценарий: пользователь хочет закоммитить, жмет кнопку, рраз — и последние n коммитов испорчены и залиты на сервер. Пользователь жмёт "отменить", и на сервер льётся ещё бОльшая ерунда (частично изменённые файлы и т.п.) Затем я делаю git push -f, и бегу делать git reset --hard тем счастливчикам, кто успел получить дозу трэша с сервера.
Не все данные удавалось восстановить (у того, кто накосячил).


Может, сейчас TortoiseGit более юзабелен. Может, у нас всех были кривые руки (но уже тогда я умел в svn, hg, git и в консоли, и в GUI).
Но тогда первое впечатление было ужасно.

Так GUI да и вообще общие принципы вроде одинаковые. По крайней мере в Git/Hg
UFO just landed and posted this here

Сколько не кручу гит, никогда одним клиентом не могу обойтись.

А чего в GitExtensions не хватает? И какой клиент к нему нужен в дополнение?

Как-то сложилось, что под виндой я использую до 4 клиентов. Просто для разных задач.


  • Консоль.
    "+" Максимальная гибкость, удобно работать в zsh.
    "-" Неудобна для просмотра, а под виндой та консоль, то что идёт в поставке (mingw) работает слегка "инородно".
  • SourceTree
    "+" Хорошо для просмотра, неплохо для совсем простых действий, фоновый фетч, если нужно. HG из коробки
    "-" Функциональность слабая, шаг вправо, шаг влево и "не шмогла". Спорное лицензирование, странное тяжёлое поведение, неспешность развития.
  • Клиент в IDE.
    "+" Рядом.
    "-" Недостаточно функциональный (что в VS, что в IDEA), не очень удобно работать, когда репозиторий содержит несколько проектов (особенно разноязычных)
  • TortoiseGit или (на работе одно, дома другое)
    "+" функционал примерно посередине между консолью и SourceTree. Кажется это единственный клиент, который умеет понятно и удобно squash-ить
    "-" Дурацкий интерфейс
  • GitExtensions использую как замену SourceTree под Linux.

Правила, которые сами выработались:


  • В IDE не делать пушей. Ни в какую ветку. Зато коммитить чуть реже, чем сохранять :)
  • Push делать в клиенте-обозревателе (GE, ST). Это чтобы осмотреться и оценить перед отправкой.
  • Консоль использовать для повторяющихся команд, или автоматизации, или как убер-ковырялку, или для сложных команд. Под zsh, впрочем, использую очень активно.
  • TG только для Revision Graph (там он другой, для реп с ветвистой историей удобный) и для squash.
  • Любой клиент только обёртка над консолью и всегда надо понимать что выполняет клиент (благо они все, кажется, пишут точную команду)

Ну собственно в GE не хватает revision graph (свернутого) и удобного squash. Плюс я не помню есть ли там удобный cherry pick, кажется нет.

В GitExtensions есть вкладка с консолью, ей довольно удобно пользоваться. Клиент в IDE за отдельный клиент считать бесполезно, поскольку он обычно не устанавливается отдельно; кстати к консоли это тоже относится.

Остался TortoiseGit, причем в плюсах у него — только squash… Скажите, а чем в GitExtensions этот squash не нравится?
Скажите, а чем в GitExtensions этот squash не нравится?

Комменты сам не собирает.


Вкладка консоли в GE есть, но в ней хоткеи смешаны от GE и bash, а когда запущено приложение, то еще и от приложения, часть приложений работает с глюками (tig в частности). Мне сильно проще отдельно запустить кривоватый git bash, который работает относительно предсказуемо.


На самом деле у каждого клиента еще куча своих "тараканов" и фич. У ST есть суперфича "обратить блок" (прямо в основном окне). Эта фича незаменима, если вам надо вручную пройти по >1K изменений и часть из них вернуть. Зато если надо работать с однобайтными кодировками — он пасует. TG может сделать reverse commit, cherry-pick, squash из окна просмотра истории (контекстное меню), но визуализация основного процесса (fetch-pull-add-commit-push) у него отвратительна (имхо) и неочевидна.


Тут спор "какой клиент лучше" по конструктивности примерно как "какие трусы лучше": кому какие удобны, тот те и использует.

А не подскажете какой нибудь клиент с аналогом чего то типа p4 reversion graph(чтобы "рельсы" лога были горизонтальны). Что Git extensions что smart git такого не умеют.

Кажется это единственный клиент, который умеет понятно и удобно squash-ить

Никто не умеет так наглядно сквошить, как консольная утилита ключом "-i":
git rebase -i origin master

Синтетические примеры, конечно хороши. Но вот где-бы перенять боевой опыт матёрого GitGlow?

Sign up to leave a comment.