Все вокруг говорят про gitflow, о том чем он лучше или хуже альтернатив, я собрался с духом и прочитал таки исходную статью ( nvie.com ). И что имею сказать.

Во-первых, автор перепутал ветки. Мастер у него там где у людей maintenance. А там где у людей мастер у него develop. Эта разница, хотя и только в наименованиях, напрочь застит всем глаза и они считают это как что-то существенное. Также, мне кажется, это порождает следующуй пункт.

Во-вторых, во многих местах можно спросить только "зачем". Зачем мержить новых релиз в мастер? Ведь в мастере нет ничего интересного, всё что там есть уже должно быть смержено в релиз, если бы он назывался "версия N-1" это было бы очевидно, а тут вот нет. Релиз просто надо собрать и выложить, с чего он будет уже не релиз а следующий maintenance. Зачем хотфикс отдельно мержится в master и develop? Почему бы просто не мержить master в develop как только там появляется что-то новое (в том числе хотфикс, независимо от того сделан он веточкой или прямо там). Оно всё равно там в итоге окажется, со следующим хотфиксом. Только будет непонятно почему этот merge commit приехал именно сейчас.

В общем, если это всё подчистить, получается то что именуют github flow + maintenace бранчи (o которых github flow скромно умалчивает). Никакой коренной разницы между ними нет.

Я понимаю почему он выглятит так: потому что это писалось в 2010 году когда гит использовался только красноглазыми ублюдками (ТМ) в виде git-svn, а компании только-только начинали обращать внимание что это за хуйня такая. Но сейчас-то уже можно закопать стюардессу.

После #2884467 меня окончательно достал SourceTree, и я поставил GitKraken.
После недели использования:

Что понравилось:
* Сделано для людей.
* Не пугает диалогами с выхлопом консоли.
* Drag'n'drop — в т.ч. легко управлять ветками не переключаясь между ними.
* Squash называется squash.
* Показывает stash'и в дереве.
* Автоматически делает и применяет stash когда нужно.
* Встроенный юзабельный 3-way merge для разрешения конфликтов.
* Можно добавлять в staged изменения построчно. Чуть менее удобно, чем в GitHub Desktop, но всё же.
* Не пушит теги без спросу.
* Интеграция с GitHub и BitBucket.
* Активные блог разработчика и канал на ютубе.

К чему можно придраться:
* TreeView модифицированных файлов свёрнут по умолчанию, что нивелирует его удобство и приходится использовать обычный FullPath.
* Дерево более гнутое, чем могло бы быть — часто изгибает более значительную ветку, отдавая приоритет менее значительной или stash'у. (Похоже, это проявляется на старых ветках, а то, что сделано уже в самом GitKraken — отображается нормально. Странно.)
* Auto-Fetch это хорошо, но было бы неплохо ещё отображать как-то, что он выполняется успешно или же нужно взаимодействие с пользователем (ввести пароль от ssh ключа).
* Сворачивание меток бранчей в дереве коммитов. Если моя ветка и мастер совпадают, то я не могу найти мастер визуально. (Я знаю где он находится или могу выбрать его в левой колонке, просто мелкий раздражающий фактор.)
* Любимый всеми Electron — 300+ МБ оперативной памяти.

Отправил несколько фидбэков — есть удобная форма для этого в программе. Но без платной подписки они могут и в dev/null отправляться, кто знает. Можно было бы, конечно, попробовать Pro Trial активировать и повторить... Ну или в slack заглянуть.

Общее впечатление:
В целом сейчас это лучший из GUI клиентов git под Windows. Заменит мне и GitHub Desktop и SourceTree. Можно рекомендовать всем, в т.ч. хорошим людям™, если Electron и "Free for non-commercial use" не напрягают.

А чем сейчас модно и молодежно работать с git под вендой, ну помимо плагинов к eclipse и idea? Сто лет назад народ помниться любил черепашку. Или лучше сразу ставить IDE? Сам просто ничего не понимаю про работу с git через GUI.

error: Ваши локальные изменения в указанных файлах будут перезаписаны при слиянии:
...
...
Сделайте коммит или спрячьте ваши изменения перед слиянием веток.
Прерываю
Как убрать эту хуйню? Как вообще избавиться от всех локальных изменений? Я хочу чтобы pull мне всё притащил!

Каждый раз такое дерьмо! Я ненавижу блядский git

кстати, вот когда гитовский шелл запускаешь как git bash из windows — он косячит длинные строчки. А когда как mintty из другого шелла — нет. Что за хуйня — непонятно. Я сначала думал версия mintty виновата, а на даже если системный запустить, то же самое

Git

Как вы понимаете вот это из man gitignore

If the pattern does not contain a slash /, Git treats it as a shell glob pattern and checks for a match against the *pathname relative to the location of the .gitignore file* (relative to the toplevel of the work tree if not from a .gitignore file).

Я так понимаю (пометил звёздочками) что просто "foo" в top-level .gitignore должно матчить только foo в руте. Т.е. "foo" матчит /foo но не /a/foo (от рута рабочего дерева, не файловой системы, понятно).
Но эксперимент показывает, что матчит где кгодно в дереве.

Я плохо понимаю man или это баг в man?

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

Git

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

a --- [b <нужная ветка>] --- c --- [d <HEAD>]

Я же хочу, чтобы это просто была одна ветка. Что я могу сделать? Создать новую ветку, поместить туда коммиты c и d, потом переключиться на нужную ветку и замержить новую.
А нельзя ли просто переместить указатель нужной ветки на коммит d? Какой командой?

Есть один репозиторий...

$ git push origin <branch>
...
Counting objects: 25, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (23/23), done.
Writing objects: 100% (25/25), 4.02 KiB | 0 bytes/s, done.
Total 25 (delta 13), reused 0 (delta 0)
_

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

Если сделать свежий клон, ничего не коммитить и только бранч обновить/создать, то получается так:

$ git push origin <branch>
...
Total 0 (delta 0), reused 0 (delta 0)
_

С тем же безуспешным результатом.

Изучены
stackoverflow.com
stackoverflow.com
stackoverflow.com
stackoverflow.com
reddit.com

Испробовано:
* push -u;
* разные версии git и разные гуи;
* запуск на другом ПК через другого провайдера;
* манипуляции с MTU;
* что-то ещё.

Не испробовано:
* sudo chown -R git.git /srv/git/ на сервере. Но если это, видимо, только у меня не работает, то маловероятно, что проблема с правами?

Если не найду причину, останется только патчи по почте слать.

Чят, привет. У меня в быдлокоде есть два байта, в которых может храниться версия программы. Как бы прикрутить сюда git, чтобы эти байты как-то соответсвовали коммитам?
Может быть, как-то время коммита туда засунуть?..

Я с этим git'ом поседею. Как я добился вот такого и, главное, что теперь делать?

% git status
On branch bugfix/MDD-1934-XXXX
Your branch is ahead of 'origin/bugfix/MDD-1934-XXXX' by 2 commits.
(use "git push" to publish your local commits)
nothing to commit, working tree clean

% git push
Everything up-to-date
%

Git ?

Жила-была строчка кода, работала збс. Через тыщу коммитов её не стало или она изменилась до неузнаваемости. Что нажать чтобы узнать когда конкретно она так изменилась, не дроча руками бисект?

Git ?

нужно зафорсить, чтобы у всех на всех ОС были во всех текстовых файлах переносы LF. "* text=auto core.eol=lf core.safecrlf=true" в .gitattributes сработает? "core.safecrlf" вообще можно там использовать? Ебанашки-авторы ведь сделали, чтоб там можно было написать что угодно, т.е. на sgushyonka=atyatya оно не ругнётся. В "git check-attr --all ." результат отображается.

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