?

Log in

No account? Create an account
про интерфейс гита - Поклонник деепричастий [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

про интерфейс гита [окт. 18, 2018|03:08 am]
Anatoly Vorobey
[Tags|]

Чисто для программистов, но хорошая статья: Two Commits That Wrecked the User Experience of Git

Недружелюбность командного интерфейса git легендарна (хотя всегда находятся желающие подчеркнуть, как это на самом деле все тривиально, просто нубы не втыкают). В этой статье автор подробно разбирает два очень сомнительных решения: поместить два совершенно разных по сути и по духу действий внутрь git checkout, и два других - внутрь git reset. Он подробно объясняет, почему это разные действия, почему им стоило быть разными командами, и как случилось, исторически, во время разработки git, что их поместили в одну. Выходит занимательный мини-урок по дизайну интерфейсов.

Если попрыгать по ссылкам, можно дойти до исходного обсуждения этих решений в 2000-х; любопытно, что хотя сам код написан уже не Линусом, а мейнтейнером гита после него, идею добавить новую функциональность внутрь checkout, а не отдельной командой, продавил именно Линус.

P.S. Две полезные ссылки про гит: https://ohshitgit.com/ и https://git-scm.com/book/en/v2.
СсылкаОтветить

Comments:
[User Picture]From: contuper
2018-10-18 02:24 am

Третья

Третья полезная ссылка про гит https://github.com/k88hudson/git-flight-rules
(Ответить) (Thread)
[User Picture]From: avva
2018-10-18 08:20 am

Re: Третья

Да, хорошая, спасибо.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: occuserpens
2018-10-18 02:29 am
[Oh shit, I accidentally committed to the wrong branch!]

// филoсофски
Запихнуть сотню файлов не в то место - это, конечно, экзистенциально. Чтобы такого не было, можно поступить, например, так.

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

Обрабатываются эти файлы в одном или нескольких рабочих фолдерах. Содержимое рабочего фолдера копируется в соотвтетсвующий буфер и обратно, например, виндосвким робокопи.

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

Тогда риск бардака существенно снижается.


Edited at 2018-10-18 02:50 (UTC)
(Ответить) (Thread)
From: smirnfil
2018-10-18 05:02 am
Нафига такая боль? ну комитнули не в тот бранч - взяли и подвинули бранч обратно. Бранчи это фигня, важно исключительно дерево коммитов.
(Ответить) (Parent) (Thread)
From: jahr2
2018-10-18 07:35 am
Вместо такой боли нужно выучить 2 команды: git rebase --interactive и git cherry-pick.) И гит - под абсолютным контролем независимо от неправильных действий выполненных до этого.)
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: phoonzang
2018-10-18 07:47 am
Вот еще хорошая подборка идиом: https://github.com/k88hudson/git-flight-rules
(Ответить) (Thread)
[User Picture]From: max630
2018-10-18 08:57 am
Сомнительное решение - это относительные таймштампы в логах. А синтаксис команд - это ерунда, только один раз надо выучить
(Ответить) (Thread)
[User Picture]From: cryinstone
2018-10-18 11:04 am
Git, конечно, ужасен, но за годы поднаучился. Tough Love
(Ответить) (Thread)
[User Picture]From: son_0f_morning
2018-10-18 11:23 am

Почему нет хороших CVS для меня загадка

Всё-таки идейно это довольно простая вещь -- граф в котором в узлах находятся "снапшоты" репозитория, а на рёбрах диффы репозитория и флаги "что это за ребро".

Не понимаю в чём сложность сделать под это хороший дизайн.

ПС
И да для всякого "говнокопания в git" без rebase -i и reflog -- действительно сложно обойтись.
(Ответить) (Thread)
[User Picture]From: vlad_suh
2018-10-18 11:48 am

Re: Почему нет хороших CVS для меня загадка

Удивительно, но многие пользуются гитом, как магией, не понимая, что это и как работает.

Вот только что пол часа объяснял коллегам про граф и снапшоты, и как следствие, возможность переписывать локальную историю.
(Ответить) (Parent) (Thread) (Развернуть)
From: smirnfil
2018-10-18 02:03 pm

Re: Почему нет хороших CVS для меня загадка

Проблема в том, что те кто понимает про граф снапшотов может пользоваться гитом. Да у него не самый простой интерфейс, но если ты мыслишь в терминах снапшотов процедура - как то, что я хочу сделать с деревом превратить в комманды гита - не очень сложна. Гит популярен и работает, к тому же на большинстве коммерческих проектов стандартного git workflow хватает за глаза.

Попытки сделать тот же гит, но почеловечески, проваливаются, потому что те кто не может понять про дерево коммитов не могут пользоваться и этими системами.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: livelight
2018-10-19 07:07 am
Модель-то простая, однако уже банальная операция "сделать слияние веток с одновременным разрешением конфликтов" в неё ложится с трудом, а ребейз является далеко не тривиальной операцией над таким графом, переписывающей в хлам кучу рёбер и вершин.
(Ответить) (Parent) (Thread)
[User Picture]From: muzyiyik
2018-10-18 11:48 am
"идею добавить новую функциональность внутрь checkout, а не отдельной командой, продавил именно Линус"

Его аргумент "I suspect that a lot of people would prefer that" и "we error out ("no such branch"). Which isn't even what I want, and almost certainly not what most CVS users want
(they're used to checking out individual files)" выглядит логично. По крайней мере, на тот момент.
(Ответить) (Thread)
[User Picture]From: vlad_suh
2018-10-18 11:50 am
в GIT GUI эти команды изолированы друг от друга. Ну и в целом сразу видеть и staged и unstaged и дерево коммитов удобно.
(Ответить) (Thread)
[User Picture]From: develop7
2018-10-22 08:21 pm
Ахаха, и тут Junio «игнорирую сильные аргументы» Hamano отметился. Прекрасно просто.
(Ответить) (Thread)