Будни разработчика
14.5K subscribers
1.38K photos
404 videos
8 files
2.3K links
Download Telegram
#такое дня

Итак, что же произошло?

Жена изучает Wordpress и React. Вот вы знали, почему Gutenberg — конструктор блоков в Wordpress — так боготворят? Вот я раньше не знал, пока, собственно, жена в колледже не начала его изучать.

Если коротко, каждый блок в Gutenberg можно описать в React. А потом рендерить WYSIWYG в конструкторе и PHP-версию для сайта. Исконный SSR как он есть :) На самом деле, я был почти в восторге.

И для этого процесса имеется кодогенератор.

Он сгенерирует JSON-схему блока, стили и начальные скрипты для редактора и клиентской части сайта, package.json с нужными скриптами, PHP-обвязку, readme... В общем, с десяток файлов.

Но вы не за этим тут собрались, верно?

Итак, нагенерировали 9 блоков, три из них практически полностью закончили, остальные — оставили в виде кодгена. И попросила жена меня помочь уложить всё в git. Последить, что все сделано правильно.

Как показали события, нашла, конечно, кого просить.

Ну, первый раз чтоле:
git init
touch .gitignore
git add .
git status
...так, index.php же не нужен...
git reset --hard
echo "index.php" >> .gitignore
...блять

89 файлов исчезли, осталось лишь то, что было открыто в файлах.

Зачем я сказал сделать хард-ресет — я сам не очень понимаю, если честно. Даже не спрашивайте. Я привык работать инкрементально: и добавлять файлы с самого начала, и ветки на каждый чих и так далее. Потому ресет для меня был инструментом простой подчистки мусора.

Теперь-то понятно, что от этой привычки надо избавляться.

К счастью, в git ничего не пропадает бесследно. Есть возможность вытащить «подвисшие» файлы из индекса, пока не произошёл коммит. Как-то так:

git fsck --lost-found

Эта команда вытащит подвисшие файлы в директорию .git/lost-found/.

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

К счастью, мы же помним, что у нас кодогенератор? Содержимое каждого из этих файлов явно говорит, к чему оно относится. Так что, вооружившись списком файлов, который мне ранее дала команда git status, я создал 89 пустых файлов с верными именами и пошёл копировать один за одним. Полчаса из жизни.

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

Да, во многи редакторах присутствует концепция локальной истории, но тот же VS Code реагирует только на открытые файлы.

В общем, было весело. И немного стыдно, да.

P. S. удалять index.php из списка добавленных файлов надо было так:

git reset index.php

Или просто

git reset

...чтобы очистить список файлов к добавлению.

#git #wordpress #fail
17🫡13👍7🤩1
#статья дня

7 апреля 2025 года системе контроля версий Git исполнилось 20 лет!

По этому поводу GitHub (а кто же ещё) провели с автором — Линусом Торвальдсом — интервью.

Выдержки:

– Он не хотел писать систему контроля версий — это казалось скучным. Но BitKeeper перестал быть вариантом, и пришлось самому.

– У него не было «плана» или видения. Всё делал на ходу, по мере необходимости. Даже не знал, насколько всё это станет популярным.

Git задумывался не как «инструмент для всех», а как «инструмент для меня». И, по мнению Линуса, именно в этом причина успеха.

– Его подход: «не делать предсказаний», особенно в open source. Он сам не ожидал, что Git проживёт 20 лет.

– Команду git bisect называет «одной из умных штук», но уклоняется от выбора любимой команды: «это как выбирать любимого ребёнка».

А прочитать целиком рекомендую тут: https://github.blog/open-source/git/git-turns-20-a-qa-with-linus-torvalds/

Кстати, интервью скоро обещают выложить в формате видео!

#git #anniversary
👍135🤬1🤩1🫡1
#инструмент дня

Разобраться в концепциях Git просто не только лишь всем. Кто-то схватывает на лету, кто-то продирается сквозь ветки и листья документации. Кто-то забивает на всё, использует UI любимой IDE и ничего сложнее git pull origin master не разруливает.

Но насколько проще было бы, если появился бы симулятор происходящего под капотом. И ведь такой есть!

И называется он git-sim, вот так вот буквально.

Нужно разрулить конфликтный cherry-pick? Слить несколько веток вместе? Посмотреть последствия reset, stash, rebase? Да запросто! Просто вместо git команда пишете git-sim команда и наслаждаетесь.

Ах да, ссылки на примеры от авторов (много видео и иллюстраций): https://initialcommit.com/tools/git-sim

И на GitHub проекта: https://github.com/initialcommit-com/git-sim

Очень уютная штука.

#git #sim #tool #бородач
👍164🤩3
This media is not supported in your browser
VIEW IN TELEGRAM
#расширение дня

А что, если история гита может быть представлена не в виде вертикального списка?

А что, если можно правильно использовать анимации, акцентируя внимание на изменениях?

А что, если можно не открывать интерфейс git blame на каждый чих?

Именно так подумал Родриго Помбо и нафигачил прекрасное расширение для Visual Studio Code: Git File History.

Принцип действия понятен по виде, устанавливайте: https://marketplace.visualstudio.com/items?itemName=pomber.git-file-history

Всем git, котаны!

P. S. вы же в курсе, что устанавливать расширения можно из консоли?

Как-то так:

code --install-extension pomber.git-file-history


Если команда code недоступна, решение тут.

#git #history #vscode #бородач
👍133👎1
#фишка дня

Сидишь такой и не вдупляешь, что происходит в пулл или мёрдж-реквесте?

GitHub и GitLab соответственно

Или, возможно, пытаешься вспомнить, а как ты вообще задачу решил? Надо же описание внести какое-то, а в голове туман...

Современный ответ: так проведи ревью от Copilot!

Но а) не везде он включён б) не везде разрешён к применению в PR/MR в) в GitLab вообще ничего нет.

Ничего страшного, на это есть решение!

Кто-то из олдов наверняка помнит, что вот этот раздельный вид в веб-интерфейсе с удалёнными и добавленными строками — штука сравнительно новая. Ещё во времена царя-гороха царило понятие diff- или patch-файлов. Вот ссылка на вики: https://en.wikipedia.org/wiki/Patch_(Unix)

Формат простой до безумия:
++++ добавлено
---- удалено


Я думаю, людям, прошивающим всякие там андроиды и ардуинки процесс хорошо известен: скачиваешь исходники библиотеки или конфига, скачиваешь patch-файл от анона с форума и накладываешь его командой, буквально, patch. Я так делал с Rockbox для iPod недавно, например.

Ладно, к чему этот экскурс вообще?

А к тому, что изменения из PR/MR легко можно получить в таком же виде! Все добавления и изменения в одном файле.

Просто берите ссылку на ваш реквест и добавьте к нему .patch. Вот так: https://patch-diff.githubusercontent.com/raw/edvardchen/eslint-plugin-i18next/pull/145.patch

А что делать потом? Cкормить это ChatGPT или Gemini или что там в вашей компании разрешено конечно же!

LLM-ки отлично справляются с разбором таких вещей! И на понятном языке и объяснят, что происходит, и найдут косяки, и напишут описание.

Вкусно? Не то слово! Пользуемся.

#git #patch #ai
👍273🤩3
#инструмент дня

git-absorb — инструмент, который автоматизирует работу с fixup!-коммитами.

Да-да, я тоже про fixup вот только что услышал, когда мне лид про absorb рассказывал.

Когда вы исправляете старый коммит (например, после ревью), многие делают так:

git commit --fixup <хэш_коммита>
git rebase -i --autosquash


Git потом «вплетает» эти fixup!-коммиты прямо в нужные места истории.
Красиво, но муторно, особенно если правок много.

git-absorb делает всё это сам.

Он смотрит, какие строки вы изменили, определяет, к какому коммиту они относятся, и автоматически создаёт нужные fixup!-коммиты:

git add .
git absorb

Дальше — одно git rebase -i --autosquash, и у вас идеальная чистая история, будто вы никогда не ошибались. Идея пришла из Mercurial (hg absorb).

Для тех, кто любит порядок в истории, но не хочет заниматься им вручную.

👉 github.com/tummychow/git-absorb

Я всё равно буду делать атомарные коммиты, впрочем. Я человек простой.

#git #fixup
9👍5🤩2
#дайджест недели

1️⃣ Понедельник
CSS Scroll Snap теперь умеет делать автопрокрутку чата вниз без костылей на JS.
Есть пример прямо в спецификации и демо от Брамуса. Старый баг с Chrome уже пофиксили.
https://xn--r1a.website/htmlshit/3823

2️⃣ Вторник
Линус Торвальдс ругает rustfmt за «эвристику», которая ломает историю коммитов.
https://xn--r1a.website/htmlshit/3824

Как уменьшить вариативный шрифт с 785 до 58 КБ.
https://xn--r1a.website/htmlshit/3826

3️⃣ Среда
› 'wtf' instanceof String — false
› typeof 'wtf' — 'string'
https://xn--r1a.website/htmlshit/3827

5️⃣ Четверг
git-absorb автоматизирует fixup-коммиты.
Сам находит, что вы правили, и создаёт нужные fixup! перед rebase.
https://xn--r1a.website/htmlshit/3829

Вышла документалка о Vite. Любовные сцены сняты прекрасно:
https://xn--r1a.website/htmlshit/3831

5️⃣ Пятница
Evil Martians показали, как сделать офлайн-поиск в Astro без бэкенда.
JSON-индекс на сборке, MiniSearch в браузере — и всё работает мгновенно.
https://xn--r1a.website/htmlshit/3832

— Это код, он не может сделать больно!
Код:
https://xn--r1a.website/htmlshit/3838

6️⃣ Суббота
Что происходит, когда вы посещаете сайт — пошагово от DNS до рендеринга.
И бонусом — крестики-нолики на чистом CSS и без HTML.
https://xn--r1a.website/htmlshit/3839

#js #css #git
Please open Telegram to view this post
VIEW IN TELEGRAM
6
#такое дня

А вы знали, что «долой» переводится как «down with the»?

«Долой короля» — «Down with the king» и так далее. Так вот, это я к чему.

У меня теперь все коммиты в гит называются так:

down with the bootstrap
down with the enzyme
down with the reselect
down with the react-async

Я не знаю, зачем вам эта информация. Как вы называете ваши коммиты? :)

#git #work
🤩26👍7🫡21
#инструмент дня

Монорепозитории имеют неприятное свойство разрастаться. Сюрприз-сюрприз.

Со временем файловая структура перестаёт что-то говорить: папок много, вложенность глубокая, понять где живой код, а где мёртвый — сложно.

Git Truck решает эту проблему через визуализацию репозитория. Он строит интерактивную «карту» проекта на основе git-истории: видно размеры файлов и директорий, активность изменений, вклад разных авторов, а также как структура менялась со временем.

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

https://github.com/standardgalactic/git-truck

#git #dev #tool
15👍7
#инструмент дня

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

Rebased — новый открытый графический Git-клиент, который быстро набирает обороты.

Все, кто работал с IDE от JetBrains, знают — их Git-инструменты долгое время считались одними из самых удобных. Особенно Diff.
Но пока рынок уходил в сторону AI-разработки, JetBrains топтались на месте — и многие пользователи начали искать альтернативы.

И вот появляется разработчик, который берет IntelliJ Community Edition (open source), вырезает оттуда всё, связанное с языками программирования, оставляет только Git — и собирает из этого отдельный продукт.

Так и появился Rebased.

Для тех, кто привык к экосистеме JetBrains — интерфейс будет знакомым.

В итоге:
• Полностью open source (Apache 2.0)
• Продвинутый Diff / Code Review (на базе JetBrains)
• Полноценные VCS-инструменты: Commit, Git Log, ветки
• Интерактивный rebase + визуальное решение конфликтов
• Полнотекстовый поиск
• Встроенный терминал (с вкладками)
• Нативная поддержка Git Worktree
• Те же хоткеи и UX, что в IntelliJ

Минус: потребляет больше памяти, чем другие клиенты. Но всё ещё заметно легче полноценной IDE.

На фоне быстрого развития agentic-разработки, удобный и привычный Git-клиент это очень важно, котаны.

GitHub: https://github.com/DetachHead/rebased

Скрины отсюда.

#git #ide #jetbrains
1🔥142👍2
#инструмент дня

Разобраться в концепциях Git просто не только лишь всем. Кто-то схватывает на лету, кто-то продирается сквозь ветки и листья документации. Кто-то забивает на всё, использует UI любимой IDE и ничего сложнее git pull origin master не разруливает.

Но насколько проще было бы, если появился бы симулятор происходящего под капотом. И ведь такой есть!

И называется он git-sim, вот так вот буквально.

Нужно разрулить конфликтный cherry-pick? Слить несколько веток вместе? Посмотреть последствия reset, stash, rebase? Да запросто! Просто вместо git команда пишете git-sim команда и наслаждаетесь.

Ах да, ссылки на примеры от авторов (много видео и иллюстраций): https://initialcommit.com/tools/git-sim

И на GitHub проекта: https://github.com/initialcommit-com/git-sim

Очень уютная штука.

#git #sim #tool #бородач
👍4🤩4
#статья дня

Мы как-то с вами уже обсудили, какими разными бывают .*ignore-файлы. И что не .gitignore-ом единым, вот тут: https://xn--r1a.website/htmlshit/3989

Но я упустил из виду, что у автора есть ещё статья-продолжение! И она — конкретно про разные вспомогательные файлы уже самого git.

Ну, например, с .gitignore всё уже понятно. А что насчёт .gitattributes?

А этот файл помогает разобраться, как поступать с разными файлами. Например, merge strategy:

package-lock.json merge=ours

и всё, разрулится как надо. Или вот шипите вы мультиплатформу:

*.sh text eol=lf
*.bat text eol=crlf

А? По-моему, очень круто. Но давайте дальше.

.gitmodules — конфигурация подмодулей git, .mailmap — хендлит обновление почты в старых коммитах, .gitmessage — шаблон сообщения коммита, .git-blame-ignore-revs — позволяет не включать преттиер и линтер в blame (Привет, Саша!).

Ну и, например, как зашиппить пустую папку в git? Положите в неё файл .gitkeep! Но это не стандартный файл, это просто соглашение. Таких много.

Короче, всё это — вот тут: https://nesbitt.io/2026/02/05/git-magic-files.html

Я вообще этот блог люблю, автор жёстко упарывается по менеджерам пакетов и гиту. Алгоритмы разбора зависимостей, диффов, уязвимости — вот это вот всё.

#git #config
👍5🔥1