В этой статье мы сравним функциональность Git в IDE Visual Studio 2022 и в других клиентах Git с GUI. Git внутри VS2022 имеет упрощённый интерфейс по сравнению с некоторыми другими GUI-клиентами наподобие MeGit/EGit и SourceTree. Это привлекает многих разработчиков к платформе VS2022/Git, однако опытным пользователям дополнительно потребуются и другие инструменты.

1. Введение


Git интегрирован в IDE Visual Studio, начиная с версии 2019, а в версии 2022 он получил ещё больше возможностей и постепенно становится любимым инструментом для контроля версий в Visual Studio/Microsoft. В этой статье мы планируем рассмотреть базовые функции GUI-инструментов Git в VS2022.

▍ 1.1. GUI-клиент Git MeGit/EGit для сравнения


Я считаю, что автономный GUI-клиент Git MeGit/EGit [1] — это «правильный Git». Это GUI-инструмент Git, но из всех виденных мной GUI-инструментов Git он ближе всего к «философии и терминологии Git», а ещё мне нравится его поведение и внешний вид. Поэтому я буду использовать его как пример, чтобы лучше показать, как могут выглядеть GUI-опции по сравнению с GUI VS2022. Разумеется, настоящим примером должен быть интерфейс командной строки Git, но мне кажется, что в рамках этой статьи сравнивать с ним было бы слишком сложно. Правда в том, что ни один GUI-инструмент Git не может предоставить всех опций, имеющихся у интерфейса командной строки Git. Но справедливо и то, что пользователю, вероятно не потребуются все эти опции для повседневной работы. Например, я уже много лет работаю с TFS и делаю всё из GUI; при этом мне ни разу не приходилось использовать командную строку TFS [2].



▍ 1.2. Философия Git в VS2022


Изучив GUI-интерфейс Git в VS2022, я пришёл к выводу, что его разработчики имели собственное мнение о том, как должен выглядеть Git. Похоже, они не хотели следовать философии Git во всех подробностях как, например, разработчики MeGit/EGit. Кажется, они думали, что все грязные подробности Git следует максимально скрыть от разработчиков; интерфейс пользователя упростился настолько, чтобы разработчики без знаний Git, имеющие лишь базовые знания концепции контроля версий, могли пользоваться им и коммитить свою работу локально и на сервер контроля версий. Возможно, это был умный подход, благодаря простоте изучения быстро привлёкший к платформе VS2022/Git множество пользователей/разработчиков. Однако некоторым опытным пользователям Git может не хватать некоторых инструментов/опций или может показаться, что Git реализован неправильно.



▍ 1.3 GUI-клиент Git SourceTree для сравнения


Приложение Atlassian SourceTree [3] — это ещё один популярный GUI-клиент Git. Мы покажем, как его панели выглядят по сравнению с VS2022 в одних и тех же операциях. Мы считаем, что MeGit/EGit чуть более мощен и больше соответствует «философии работы Git». Разработчики SourceTree, аналогично разработчикам VS2022, решили сокрыть часть «внутренностей Git», например, информацию HEAD и Refs. Тем не менее, приложение отображает больше информации, чем VS2022.



▍ 1.4 Git не интуитивен для обучения


Я уверен, что многие разработчики попробуют «проложить себе дорогу к Git», просто осваивая GUI-опции Git в VS2022, особенно те, кто пришли с других систем контроля версий, например TFS. И до определённого уровня это сработает, поскольку VS2022 намеренно скрывает некоторые концепции Git, например, staging файлов (обычно пользователи TFS задаются вопросом: что такое staging и зачем он нужен?). Но я считаю, что рано или поздно вам придётся прочитать какую-нибудь книгу по Git, потому что он имеет собственную терминологию и философию, и если у вас когда-нибудь возникнет нерешаемая проблема с Git, то вам нужно будет точно знать, что делать и как правильно решить её. Если вы учитесь при помощи освоения GUI-инструментов, то для изучения Git я рекомендую поэкспериментировать с MeGit/EGit, поскольку так вы увидите больше подробностей, которые намеренно скрывает от вас VS2022.
Это не туториал по Git
Статья не задумывалась как туториал по Git. Она предназначена для разработчиков, имеющих некоторые познания в Git и желающих увидеть, как Git выглядит сегодня в IDE VS2022.

2. VS2022 против MeGit


▍ 2.1. Методология тестирования


Мы рассмотрим один и тот же репозиторий Git из четырёх инструментов: VS2022, MeGIt, SourceTree и GitBash.

Мы локально создали проект простого приложения на C# и выбрали в качестве удалённого репозитория GitHub.


Тестирование выполнялось со следующей версией Visual Studio:



▍ 2.2. Просмотр истории коммитов в репозиторий


Одна из базовых и важных функций: просмотр пользователями содержимого их репозитория.

❒ 2.2.1. История из GitBash


Команда Git git log отображает лог всех коммитов.

Вот все коммиты текущей ветки master.


Вот коммиты всех веток с текущей веткой master.


Вот «граф», который может создавать GitBash — все коммиты всех веток с текущей веткой master.



❒ 2.2.2. История из MeGit


Вот соответствующий граф, создаваемый MeGit. Это красивая графическая визуализация.


Она выглядит аналогично «графу», создаваемому GitBash. Обратите внимание, что в графе GitBash содержалась дополнительная информация — местоположение создания «хранилища» (stash), коммит ac95254. MeGit может показать это местоположение, но только по запросу (при нажатии на конкретный stash).

❒ 2.2.3. История из VS2022


Я нашёл в VS2022 три графа истории, и все они были хуже, чем даже граф Git командной строки. Похоже, разработчики не особо беспокоились о его реализации. Панель History VS2022 фильтрует и отображает коммиты, только относящиеся к текущей выбранной ветке.

Первый граф для той же структуры репозитория с текущей веткой master выглядит так:


Есть и ещё более простая версия, без других веток:


Также существует ещё одна версия, с показанными ссылками на ветки:


Я считаю, что графы истории VS2022 хуже, чем граф истории MeGit, но опытному пользователю они могут оказаться полезными. В них можно удобно просмотреть изменения в репозитории.

Часто люди в Интернете задают вопрос: зачем вообще нужен красивый граф? Для меня ответ прост: интерфейс пользователя называется графическим, поэтому здорово иметь качественный граф, сравнимый, например, с графом истории MeGit.

К сожалению, стоит заметить, что VS2022 не показывает в графе местоположение ссылки HEAD, хотя и GitBash, и MeGit чётко отображают ссылку HEAD. Похоже, разработчики VS решили, что терминология Git наподобие ссылок HEAD должна быть скрыта от пользователей. Не уверен, что на самом деле возможно компетентно использовать Git в течение длительного времени, не зная, что такое ссылка HEAD.

❒ 2.2.2. История из SourceTree


Вот соответствующий граф, создаваемый SourceTree. Он имеет красивый графический вид.


Но разработчики SourceTree тоже решили скрыть от пользователя концепции наподобие HEAD и ссылок.

▍ 2.3. Просмотр веток, тегов, ссылок


❒ 2.3.1. Ветки, теги, ссылки в MeGit


Ветки, теги и ссылки в проекте/репозитории заметить очень легко:


Обратите внимание, что помечена текущая checkout-ветка master. Также вы видите, что ссылка HEAD ref указывает на последний локальный коммит ec56b90 ветки master.

Чтобы выполнить checkout ветки Feature1, нужно нажать на нужную ветку правой клавишей мыши и выбрать в контекстном меню опцию.



❒ 2.3.2. Ветки, теги, ссылки в VS2022


В VS2022 отображается более скромная информация:


Насколько я понимаю, список тегов недоступен сам по себе, а применённые теги видны только в графе истории. Список ссылок также недоступен, разработчики решили, что он слишком низкоуровневый и не нужен, поэтому скрыли эту информацию.

Обратите внимание, что текущая checkout-ветка master выделена жирным шрифтом. Кроме того, текущую checkout-ветку можно увидеть в правом нижнем углу.


Чтобы выполнить checkout ветки Feature1, нужно нажать на нужной ветке правую клавишу мыши и выбрать в контекстном меню опцию.


Кроме того, вы можете выполнить checkout ветки во всплывающем меню в правом нижнем углу:



❒ 2.3.3. Ветки, теги, ссылки в SourceTree


Ветки и теги проекта/репозитория легко заметны, однако ссылки в GUI не отображаются. Разработчики тоже решили скрыть подробности Git от пользователя.


Обратите внимание, что текущая checkout-ветка master выделена жирным шрифтом.

Чтобы выполнить checkout ветки Feature1, нужно нажать на нужную ветку правой клавишей мыши и выбрать в контекстном меню опцию.



▍ 2.4. Просмотр состояния Detached HEAD


Просмотреть состояние «Detached HEAD» легко. Достаточно выполнить checkout коммита, не находящегося на конце ветки, а затем закоммитить новые изменения. Давайте посмотрим, как отображается такое состояние.

❒ 2.4.1. Detached HEAD в MeGit


Вот как выглядит состояние Detached HEAD в панели History:


Как видите, HEAD указывает на коммит 40c21ff, а не на конец какой-то ветки. В терминологии Git этот коммит находится в состоянии Detached HEAD. В панели просмотра веток это представлено в следующем виде:


Обратите внимание, что ни одна ветка не отмечена как выбранная, а ссылка HEAD содержит значение id этого коммита 40c21ff.

❒ 2.4.2. Detached HEAD в VS2022


Теперь взглянем на ту же ситуацию с репозиторием в VS2022. Вот как она выглядит в панели Branches:


Обратите внимание, что ни одна ветка не выделена жирным шрифтом. то есть ни одна не является checkout-веткой.

Кроме того, состояние Detached HEAD отмечено в правом нижнем углу:


Как мы видим, все упоминания ссылки HEAD в VS2022 избегаются, хотя интуитивно непонятно, что происходит с репозиторием и как устранить состояние Detached HEAD. Именно поэтому я считаю, что пользователь должен обладать реальными познаниями Git, а инструменты, скрывая от него концепции Git, не помогают ему в этом.

❒ 2.4.3. Detached HEAD в SourceTree


Вот как выглядит состояние Detached HEAD в панели History:


Как видите, HEAD указывает на последний коммит, а не на конец какой-то ветки. Хэш коммита можно увидеть в нижней панели, он равен 40c21ff. В терминологии Git этот коммит находится в состоянии Detached HEAD. Любопытно, что разработчики внезапно отображают нечто под названием HEAD, хотя до этого скрывали эту концепцию в приложении.

В панели просмотра веток это представлено в следующем виде:


Обратите внимание, что ни одна ветка не помечена как выбранная.

❒ 2.4.4. Намеренное создание «висячего коммита»


Допустим, мы решили устранить состояние Detached HEAD, выполнив checkout ветки master и оставив новый коммит 40c21ff висячим. Доступ к такому коммиту невозможно получить ни по какой из ссылок и он не будет больше отображаться в History.

❒ 2.4.5. Восстановление висячего коммита/Detached HEAD в MeGit


Теперь в истории и ветках отображается checkout-ветка master, а упоминания коммита 40c21ff отсутствуют.



Что, если мы совершили ошибку и теперь хотим восстановить висячий коммит 40c21ff? Это возможно, мы можем найти его в панели Reflog:


Можно нажать на него правой клавишей мыши и выбрать опции меню для его восстановления:


И мы снова оказались в ситуации, когда этот коммит 40c21ff является checkout и мы можем делать всё, что угодно.



❒ 2.4.6. Восстановление висячего коммита/Detached HEAD в VS2022


Вот как та же ситуация выглядит в VS2022:


Теперь в истории и ветках отображается checkout-ветка master, а упоминания коммита 40c21ff отсутствуют. Можем ли мы выполнить восстановление коммита 40c21ff? Проблема в том, что в VS2022 нет панели Reflog.

Этот коммит 40c21ff по-прежнему находится в репозитории, однако через GUI VS2022 доступ к нему получить невозможно.

Для опытного пользователя это может быть проблемой и ему может понадобиться использовать другой инструмент для выполнения нужных действий. Разработчики VS2022 посчитали, что такие ситуации настолько редки, что среднестатистическому пользователю никогда не доведётся с ними сталкиваться.

❒ 2.4.7 Восстановление висячего коммита/Detached HEAD в SourceTree


А вот как выглядит теперь ситуация в SourceTree. Теперь в истории и ветках отображается checkout-ветка master, а упоминания коммита 40c21ff отсутствуют.


Как нам восстановить коммит 40c21ff? Проблема в том, что в SourceTree нет панели Reflog. Но в нём есть значок для запуска GitBash, поэтому из командной строки мы можем получить нужную нам информацию, а именно хэш коммита:


Итак, мы можем выполнить в командной строке git reflog и получить нужный хэш:


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




После выполнения checkout этого коммита 40c21ff, на этот раз как части новой ветки, мы можем делать всё, что угодно.

▍ 2.5. Просмотр панели Unstaged-файлов/Staged-файлов/коммитов


Одна из основных функций GUI Git — выполнение коммитов работы в репозиторий.

❒ 2.5.1. Панель Unstaged-файлов/Staged-файлов/коммитов в MeGit


MeGit, в соответствии с философией Git, имеет отдельные формы Unstaged- и Staged-файлов.

Здесь вы видите, что были внесены изменения в файл ClassA.cs, а Git указывает изменения в форме Unstaged-файлов («Working directory changes»):


Но чтобы выполнить коммит (обратите внимание, что кнопка Commit недоступна), необходимо использовать значок «плюс» и добавить изменения в форму Staged-файлов, после чего можно будет выполнить коммит изменений в репозиторий.



❒ 2.5.2. Панель Unstaged-/Staged-файлов/коммитов в VS2022


VS2022 в качестве диалогового окна коммитов по умолчанию отображает опцию выполнения коммитов файлов непосредственно из «Working directory changes» (Unstaged-файлов):


На самом деле, это соответствует правилам Git, поскольку такая команда существует в командной строке Git. Это схоже с выполнением git commit -am "<commit message>.

Если вы хотите просмотреть форму «Staged files» и выбрать, для каких файлов нужно выполнить stage и коммит, нужно использовать значок «плюс» и добавить в Staged те файлы, коммит которых нужно выполнить:


Теперь диалоговое окно коммитов выглядит как диалоговое окно MeGit.

Разработчики VS2022 решили «срезать углы», отображая непосредственный коммит в форме «Working directory changes».

Обычно пользователи задаются таким вопросом: зачем мне нужно сначала выполнять Stage файлов? Ответ прост: это необязательно, это только опция для ситуаций, когда, например, вы изменили пять файлов, а хотите закоммитить только три из них. Такую ситуацию можно разрешить, выполнив Staging этих трёх файлов и закоммитив только staged-файлы.

❒ 2.5.3. Панель Unstaged-файлов/Staged-файлов/коммитов в SourceTree


SourceTree, в соответствии с философией Git, имеет отдельные формы для Unstaged- и Staged-файлов.

Здесь вы видите, что были внесены изменения в файл ClassA.cs, а Git указывает изменения в форме Unstaged-файлов («Working directory changes»):

Image 44

Однако для выполнения коммита (обратите внимание, что кнопка Commit недоступна) нужно использовать кнопку Stage Selected и добавить изменения в форму Staged-файлов, после чего можно будет закоммитить изменения в репозиторий.

Image 45


2.6. Просмотр Stash


В обоих инструментах есть удобные панели для просмотра «хранилищ» (stash).

❒ 2.6.1. Stash в MeGit


Список всех stash в репозитории:

Image 46

Выберем один stash, Stash с индексом [0]. Тогда мы сможем просмотреть подробности об этом stash:

Местоположение в истории, когда был сделан stash:

Image 47

Подробная информация об этом stash:

Image 48

Разница в файлах, демонстрирующая изменения по stash:

Image 49


❒ 2.6.2. Stash в VS2022


Список всех stash в репозитории:

Image 50

Выберем один stash, Stash с индексом [0]. Тогда мы сможем просмотреть подробности об этом stash:

Подробная информация об этом stash:

Image 51

Разница в файлах, демонстрирующая изменения по stash:

Image 52

VS2022 не содержит опции отображения позиции в графе истории, где был сделан stash. Похоже, кто-то из разработчиков VS2022 ненавидит графы истории Git.

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

❒ 2.6.3. Stash в SourceTree


Список всех stash в репозитории:

Image 53

Выберем один stash, Stash с индексом [0].

Разница в файлах, демонстрирующая изменения по stash:

Image 54


2.7. Просмотр Blame


▍ 2.7.1. Blame в MeGit


Найти функциональность Blame немного сложно, потому что на этот раз MeGit использует не термин Git «Blame», а «Revision information». Всё выглядит хорошо:

Image 55

Как вы видите, мы смотрим на файл Program.cs и на строку 12. Последний раз её изменял автор MarkPelf в коммите cef7440, а ниже показана подробная информация об этом коммите, в том числе и граф истории.

Также мы видим diff файла для этого коммита cef7440.

Image 56


▍ 2.7.2. Blame в VS2022


Для того же сценария (файл Program.cs и строка 12) VS2022 изначально показывает меньше информации, но можно нажать правой клавишей мыши, чтобы получить больше информации о том, кто и в каком коммите в последний раз менял эту строку:

Экран Blame:

Image 57

Нажмём правой клавишей мыши на интересующей нас строке кода:

Image 58

Подробности коммита cef7440:

Image 59

Граф истории для коммита cef7440:

Image 60


▍ 2.7.3 Blame в SourceTree


Для того же сценария (файл Program.cs и строка 12), SourceTree изначально показывает меньше информации, но можно нажать правой клавишей мыши, чтобы получить больше информации.

Image 61

Нажмём правой клавишей мыши на интересующей нас строке кода:

Image 62

Подробности коммита cef7440:

Image 63


3. Заключение


В этой статье я привёл краткий обзор GUI-интеграции Git в IDE VS2022 и сравнил её с GUI-клиентами Git MeGit/EGit и SourceTree. Мы показали, что UI клиента MeGit более подробен и ближе соответствует «философии и терминологии Git». Мы показали, что разработчики VS2022 решили пойти по пути упрощения UI Git для пользователя и что многие внутренности Git спрятаны от пользователя.

Это хорошо тем, что привлекает к платформе Git множество новых разработчиков и стимулирует их переходить на Git благодаря простоте UI и удобству обучения. Плохо это тем, что некоторые важные концепции Git наподобие ссылок HEAD скрыты от пользователя, а некоторые опции Git намеренно ограничены. Опытным пользователям Git могут понадобиться другие инструменты Git, например, GitBash или какой-то другой GUI-клиент Git (MeGit/EGit [1], Sourcetree [3]), чтобы лучше понимать свои репозитории и выполнять сложные операции, не поддерживаемые GUI Git в VS2022.

Ясно одно — интеграция Git в IDE VS2022 определённо повысит популярность системы контроля версий Git.

4. Ссылки



Комментарии (26)


  1. Ares_ekb
    24.08.2022 17:29
    +5

    Я безуспешно пытался найти какой-то нормальный GUI под Linux сначала для SVN, потом для Git. А потом забил и понял, что вполне достаточно командной строки + Meld + GitLab для ревью мержреквестов. Иногда дерево коммитов можно посмотреть в том же GitLab или локально в Gitg, если что-то пошло не так. Для каждодневной работы достаточно нескольких команд: commit, pull, push, rebase, add, switch - и всегда понятно что происходит.

    А GUI, как это ни парадоксально, иногда оказывается даже сложнее. Потому что в него добавляют кучу команд, которые нужны достаточно редко. Или нужны, но не всем, например, мы вообще не используем merge, но люди, которые погружаются в проект, поначалу пытаются что-то мержить, у них каким-то образом получаются длинные безумные цепочки коммитов. При этом те команды, которые нужны "упрощают" так, что ничего не понять.


    1. TonyKentnarEarth
      24.08.2022 18:59
      +1

      Sublime Merge пробовали?


      1. Ares_ekb
        24.08.2022 20:42
        +3

        Спасибо! Попробовал, он конечно выглядит достаточно мило, но если кликнуть по коммиту в ветке, то появляется контекстное меню с 24 пунктами, среди которых "Rename branch", "Copy branch" и другие штуки, которыми мы не пользуемся никогда, потому что у нас ветки существуют не очень долго и удаляются после мержа в master. Какие-то совершенно неведомые штуки для обычного пользователя типа "Set upstream", "Unset upstream" - я просто пушу ветку с ключом -u и всё, зачем мне в каждодневной работе эти команды.

        Есть команда "Rebase master onto название_ветки" - я честно говоря вообще не понял, что эта штука сделала. Заребейзила мастер на ветку? Ощущение, что всё сломалось :) Мне нужно наоборот заребезить ветку на мастер - я так и не разобрался как это сделать, хотя это как-раз относительно частое действие. Плюс он периодически предлагает купить лицензию.

        Я понимаю, что на разных проектах разная схема работы с Git и в GUI вытаскивают команды, которые могут пригодиться разным людям. Но на мой взгляд такой GUI только запутывает. Возможно я к нему не привык и не разобрался, но ощущение, что быстрее и проще разобраться в CLI.

        Я встречал инструменты, в которых например, реализован Git Flow - там большие кнопки: создать ветку, смержить ветку - это реально упрощает работу для разработчиков не очень знакомых с Git. Но у нас не используется Git Flow и ещё мы используем rebase вместо merge. Для нашего проекта идеальный инструмент такой:

        1. Есть большая кнопка создания новой ветки. Причём ветки в первую очередь создаются от master, а если человек пытается создать ветку от другой ветки то выдается предупреждение

        2. Есть возможность переключения между ветками и чтобы дерево при этом не перестраивалось - master всегда первый. Возможность скрывать остальные ветки или сделать их более бледными, потому что от них двоится в глазах

        3. Есть работа с индексом, commit, push и pull - в Sublime Merge они сделаны вполне норм, как и в большинстве таких инструментов. Удобно что выводится имя и email текущего пользователя, потому что иногда забываешь их настроить для нового репозитория

        4. Есть кнопка rebase на текущий master с понятными разрешением конфликтов. Чтобы было видно сколько коммитов уже применено и сколько осталось

        Это основные действия, которые должны быть с большими понятными кнопками. Все остальные команды или не нужны или должны быть где-то спрятаны.

        Если ревью и мерж в master делается в GitLab, то в GUI это не особо нужно. Если нужно сделать какие-то сложные вещи типа исправления предыдущих коммитов, то всё это должен делать человек, который хорошо разбирается в Git и ему проще и надёжнее сделать это через командную строку. Большинство GUI сделаны непонятно для кого, наверное для всех сразу. Я думаю тут нужен максимально НЕ гибкий и НЕ универсальный интерфейс с несколькими предопределенными схемами работы (типа Git Flow), от которых в принципе невозможно отойти.


        1. fshp
          25.08.2022 07:06
          +1

          что быстрее и проще разобраться в CLI.

          Но ведь onto это параметр rebase. Там никакой магии, все тоже самое что в консольке.


          1. Ares_ekb
            25.08.2022 08:40

            Да, но обычно ребейзится ветка на мастер, а не наоборот. Он мне предлагает ненужный и неправильный вариант, а как сделать то, что нужно я сходу не нашел.


            1. fshp
              25.08.2022 16:17
              +1

              Тут не наоборот, тут просто при onto base может быть не равен target.

              git rebase master == git rebase --onto=master master


        1. Mingun
          25.08.2022 09:58

          Это все потому, что единственный нормальный GUI для Git — TortoiseGit. Если бы еще и на Linux запускался, цены бы ему не было.


    1. ReadOnlySadUser
      25.08.2022 03:00
      +2

      VSCode IMHO подходит в качестве гуя для гита лучше.

      1. Есть встроенный терминал, так что не надо переключать окна для того, чтобы управлять гитом (я не переношу GUI для pull, merge, rebase, очень долго выходит)
      2. Удобно добавять/удалять файлики в stage
      3. Удобно делать stash одного файла, если очень надо
      4. На мой взгляд разрешать merge-конфликты в VSCode в 7000 раз приятнее Meld. Сам пользовался Meld года 3, но один раз увидев как оно сделано в VSCode - забросил Meld навсегда. Правда недавно (вроде в 1.70) завезли 3-way merge, но он откровенный кал. Слава богу в настройках отключается на "классику".
      5. Есть удобный плагин Git Lens, который по нажатию Alt + B делает git blame. Оч удобно.


      1. NN1
        25.08.2022 07:34
        +1

        Ещё умеет графический интерфейс для интерактивного ребейса.

        https://user-images.githubusercontent.com/641685/99691407-3682df80-2a57-11eb-9ba6-1d9e12b8c774.png


  1. autyan
    24.08.2022 18:10
    +2

    После работы с десятком GUI-оболочек для гита, я пришел к оболочкам с терминальным интерфейсом (TUI). Больше всего понравилась lazygit, в которой сейчас и работаю. А если есть проблемы с запоминанием кучи горячих клавиш, то можно попробовать gutui, который слегка сыроват.


  1. Stawros
    24.08.2022 20:40
    +2

    Как же я опечален новым Git Expirience в 2022 студии. Старый Team Explorer был очень компактным, но при этом за счет разделения через меню на Sync\Changes\Branches\etc. удобным. Теперь же всё запихнули в одну вкладку, если пушить череp Git Changes - ты не видишь, что ты пушишь - надо открывать Git Repository, там раскрывать Outgoing. Плюс Git Repository не закрепить нигде - она всегда закрывается после закрытия студии.


  1. Ne4to
    24.08.2022 21:19
    +7

    Мои поиски GUI клиента остановились на Git Extensions, он покрывает все ежедневные потребности.


  1. zartarn
    24.08.2022 21:30
    +1

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

    Гуишные оболочки использую только посмотреть графики, ну в студии иногда разрулить конфликты. Все остальное как то проще и быстрее через консоль.


  1. Sazonov
    24.08.2022 23:07
    +3

    Использую платный GitKraken. Есть определенные трудновоспроизводимые баги, скорее связанные с нашим гит сервером. Порой подпедаливает при нестабильном соединении. Иногда не срабатывает интерактивный rebase (когда нужно мержить обновления сабмодулей).

    Из хорошего: приятный gui, корректная работа с lfs, с пол тыка полноценная интеграция с кучей сервисов, включая GitHub/GitLab. Одинаковый интерфейс на Win/Ubuntu/Mac.


    1. volk0ff
      25.08.2022 16:07

      Навскидку после статьи, сравнивая с MeGit, что лучше ? Я на кракена тоже посматриваю - визуально он очень хорош, а вот по поводу остального функционала так мнений и не нашел


      1. Mingun
        25.08.2022 16:40
        +1

        На больших репозиториях (~40 Gb) подтормаживает, часто бывает, что вдруг начинает полностью грузить одно ядро. Раньше этот жрущий процесс (похоже, это GUI) мог скатываться до выжирания памяти и падения, но в последних версиях это починили — теперь в целом около 2 Гб кушает, в нажорных пиках до 5 доходит, но через пару минут успокаивается.


        Нет официальной поддержки worktrees, но на самом деле поддерживает нормально (список stash-ей един на все деревья, но возможно, это особенность самого гита) — при открытии репозитория не распознает worktree как репозиторий, но открывает нормально.


        Функционал Blame нерабочий — грузит долго, а если прогрузит, то по двухпиксельной цветной полосочке не понять, что к чему относится, и информация об авторах пустая. Попытка нажать на эту полосочку опять запускает какой-то рескан.


        Интерактивный rebase примитивный — нельзя остановится в любом месте или добавить дополнительный коммит, первый коммит нельзя пропустить. Только reword, squash, drop и pick. В целом почти достаточно. Да, и двигать коммиты приходится по одному мышкой — кнопок не предусмотрено.


        Ребейз довольно хрупкий, дискардом изменений из клиента, если это последний файл, после разрешения конфликта можно запросто прервать процесс ребейза. Поэтому этого лучше не делать, делайте из консоли.


        Минус — непонятный редактор мерджа изменений при конфликтах. Непонятно, что было, какие изменения слева, какие справа. Показывает какое-то несуществующее состояние.


        Редактирование файлов в Diff-ах возможно только в платной версии — малость неудобно, но это не так уж и часто требуется.


        Граф коммитов конечный — на длинной истории может закончится. Это иногда мешает, хотя очень редко — я 10000 поставил, в целом хватает.


        В целом, все же самый адекватный клиент под Linux, другие еще непонятнее. Но если кто TortoiseGit умудрится запустить, то пойдет кракен в корзину.




        MeGit сегодня попробовал и что-то мне сразу не понравилось. Граф и текущее состояние рабочей копии разнесены по разным вкладкам, worktrees не понимает. Плохо проработаны акценты — где сообщение коммита, где измененные файлы — так с первого взгляда и не понять.


        Из плюсов — на том же 40 гиговом репозитории около 900 Мб потребляет, по первому впечатлению гораздо отзывчивее. Впрочем, я его только 5 минут посмотрел


        1. volk0ff
          26.08.2022 11:07

          уф... вы прям серьёзно в вопрос погрузились. я даже не знал, что worktree так активно юзается


          1. Mingun
            26.08.2022 12:16

            В домашних проектах я его не использую, а на работе 5 версий поддерживаются, так что лучше по рабочей копии на каждую ветку иметь, чтобы мерджить туда-сюда и проверять, что получилось. Проект большой, просто ветками замучаешься переключаться и пересобираться после этого. Там на самом деле SVN, но я через git svn работаю с ним. В целом получается, что размер worktree как один SVN checkout, но с гитом плюс, что при том же общем размере у меня вся история есть локально


  1. Kazzman
    24.08.2022 23:19
    +2

    Есть еще вполне годный Fork. Пробуйте, автор отзывчив.


    1. nevack
      25.08.2022 14:43

      Очень классный условно-бесплатный GUI для Git, на Mac пользуюсь ежедневно.

      Версии для Linux вроде как нет, к сожалению.


  1. miscusi
    25.08.2022 01:39
    +4

    не нашел для себя ничего лучше клиента от jetbrains

    остальные клиенты особо не заморачиваются и делают обычный вызов команд гита в удобном ui, но они сделали поверх него много чего интересного и многое происходит проще и в автоматическом режиме


    1. Sazonov
      25.08.2022 13:13

      А они standalone версию выпустили? Или это ставить идею надо? У меня кроме CLion ничего не куплено.


      1. nevack
        25.08.2022 14:45

        Отдельного клиента нет, хотя вроде как было большое кол-во желающих такой продукт иметь.

        Это всё же плагин, отвязать его от IntelliJ нетривиальная задача будет. Разве что делать связку IDEA с только этим плагином, но всё равно жирно получается, имхо.


      1. miscusi
        25.08.2022 15:53

        к сожалению нет, но есть во всех их IDE в виде плагина


  1. toxicdream
    25.08.2022 13:13
    +3

    Ну раз все меряются делятся своими предпочтениями, вставлю и свои 5 копеек.

    Перетыкал в свое время разные клиенты, начиная от CLI и TortoiseGit и заканчивая Source Tree и VS2022.

    Лучше всех других мне подошёл Smart Git - всё нужное на виду, ненужное не лезет в глаза. При обучении новички на лету схватывают идеологию Git-а. Интеграция с GitHub/GitLab. И, правда платный, плагин для разруливания Пул/Мердж реквестов, чтобы не заходить на веб-интерфейс.

    Вообще удивлён что про него так мало знают/пишут. Рекомендую попробовать


  1. Stingray42
    25.08.2022 18:06

    Мои поиски GUI клиента для GIT остановились на Intellij IDEA (да, я и не искал). Лучше ничего не видел.