to post messages and comments.

Все вокруг говорят про 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-ключ? в настройках репозитария можно добавить ключ, но доступ только ридонли. Как нормально этим ведром пользоваться не вводя логин-пароль на каждый пуш?

I found a workaround (but it will only work on windows).
Start git daemon with verbose from cmd.exe:
"C:\Program Files\Git\bin\sh.exe" --login -i -c 'git.exe daemon --verbose '
Not tested, if it works directly in git bash. Maybe it will.
Then (before starting any clone, pull, fetch,...) select some text in the window (note: "Quick Edit Mode" must be enabled (can be found in: cmd.exe --> Properties (click the top left corner of your cmd window) --> Edit Options)) in which git daemon runs. That will prevent it from printing any further messages in that window.
When the output thread of git daemon is blocked that way, then the error does not happen