GIT commit NPE
95 subscribers
298 photos
5 videos
36 links
Кодинг, linux, git, SQL, regex, board games, ножі, треш-індастріал.
Download Telegram
Ахрана Git, атмєна
або
Як вилучити з репозиторію зайві файли, що були додані декілька комітів тому

Минулого тижня товариш з сусідньої команди звернувся з запитанням.

Дано
1. Коміт, до якого помилково потрапив зайвий файл. Також в ньому наявні інші (потрібні) зміни.
2. Після нього зроблено ще декілька корисних комітів.

Треба
Вилучити зайвий файл з історії.

Що нам НЕ підійде
1. Просто видалити файл та зробити коміт.
2. Revert: git revert хешКоміту.
3. Amend: git commit --amend.
4. Hard reset: git reset --hard хешКоміту.

#git
...Чому не підійде?
1. При "просто видаленні" файл зникне з файлової системи, але залишиться в історії.
2. Revert, як і в п. 1, не прибере зайвий файл з історії, а ще ми втратимо ті потрібні зміни, що були закомічені разом з нашим зайвим файлом. Так, ці зміни можна буде отримати досить законними шляхами, але нашо ті танці? Все одно історія не буде змінена, що унеможливлює використання цього способу.
3. Amend виправляє лише останній коміт. У нас проблема не в останньому коміті, а глибше.
4. Після хард резету ми втратимо усі корисні коміти, що зроблені після проблемного, а також ті потрібні зміни, що знаходяться у проблемному.

Що ми будемо робити?
Ми будемо робити інтерактивний рібейз.
Інтерактивний рібейз - це один зі способів переписування історії. Він дозволяє редагувати коміти, переміщувати, зливати їх і т.ін. При цьому гілку ми будемо перебазовувати саму на себе.

Як ми будемо це робити?
Спочатку вилучимо зайвий файл та створимо з цього коміт. Потім запустимо інтерактивний рібейз на коміт, що передує проблемному коміту. Перемістимо коміт-рятівник так, щоб він знаходився одразу після проблемного, та вкажемо опцію "squash", тобто зіллємо з попереднім, проблемним. В результаті цього злиття в один і той самий коміт потраплять обидва діффа - той, де зайвий файл створюється, та той, де він видаляється. Повна анігіляція файлу. Як матерія та антиматерія.

#git
Вже сьомий рік я захоплююся ножами.

Навесні 2014-го, з початком окупації Криму та сходу та ризиком появи ватної тітушні в нашому регіоні, з'явилася необхідність мати при собі в швидкому доступі дозволений інструмент, що в критичній ситуації, можливо, врятує життя та здоров'я. Після вивчення купи матеріалу щодо різновидів, ТТХ, законності придбання та носіння, взаємовідносин з правоохоронцями, першим був обраний склАдень (складний ніж) Spyderco Tenacious. А потім закрутилося - склАдні, фікседи (ножі з фіксований лезом, НЕ-склАдні), навчання поводитися з ножем, захист проти ножа, інтерес до мачете та кукрі і т.ін. Це переросло у хоббі, і зараз ніж для мене - це корисний та обов'язковий побутовий інструмент, що виконує досить багато функцій.

Але інтерес саме до метання ножів з'явився відносно нещодавно, десь восени 2019-го. Форуми, статті, матеріали з ФБ... Теорія - то добре, але теорія без практики - ну, ви розумієте... Взимку було придбано пару "інструментів", які пролежали аж дотепер. Все руки не доходили.
І ось в останні вихідні цього літа сезон нарешті відкрито. Досить раптово, просто поклав оті дві залізяки до рюкзака та пішов подалі від людей.

І почалося... Півтори години жбурляння залізяк та море задоволення. Приблизно 200-250 кидків.

#knives
Голок - різновид лезового інструменту, широко розповсюдженого в Індонезії у якості як господарчого, так і бойового знаряддя.
Це найменування так само використовується для подібного виду зброї в Малайзії, де крім того термін "Голок" є взаємозамінним для більш довгого і шіроколезвійного виду холодної зброї Паранг. Також, Голок відомий тим, що його форму взяли за основу для мачете британської армії, яке використовують з початку 1950-х років.
(c) bbknives.com

#knives
Жбурляння залізяк, серія 2

Перші вихідні осені, трохи хмарне небо, вже знайоме віддалене місце з майже повною відсутністю людей.

Нові відчуття, коли нарешті починаєш розрізняти, як саме ніж вислизає з долоні - саме вислизає, а не вилітає.
Три з половиною години задоволення з перервами на чай.

Спробував зняти, як саме залізяки зустрічаються з ціллю. Відео трохи перетисну вбудованими інструментами Телеграму та додам наступним постом.

...А вкінці з-за хмар нарешті визирнуло сонце.

#knives
Media is too big
VIEW IN TELEGRAM
Жбурляння залізяк, процес.
#knives
2^8 = 256й день у році. А це означає що?
З Днем програміста усіх причетних!
Жбурляння залізяк, серія 3 (фото)
#knives
Жбурляння залізяк, серія 3

Матеріали для початківців, що потрапляли до мого поля зору, давали приблизно одні й ті самі рекомендації щодо дистанції до цілі та положення ножа: більше трьох, ала менше чотирьох метрів, ніж у руці вістрям до себе, ріжучою кромкою від долоні.

Ніж виходить приблизно паралельно землі (насправді ні, але нехай) руків'ям вперед, робить у польоті півоберта та входить вістрям. Таким чином ми реалізуємо метання ножа з обертанням.

Можна відійти трохи подалі та жбурляти за руків'я, у цьому випадку ніж зробить один повний оберт. Можна відійти ще далі та жбурляти на півтора оберта. Або ще далі - і на два.

Більша дистанція - більше вплив збурень, що ми завдаємо ножу, коли він вислизає з долоні. В результаті збурень він обертається не у площині кидку, має додаткові обертання навколо своєї "осі", і тут ота вся фізика з проекціями сил на площину цілі і т.ін.
Менше досвіду - більше збурень. Тому нєфіг ходити далеко, вчись жбурляти свої залязяки з отих трьох метрів та радій.

У попередніх серіях Раніше я дотримувався цих рекомендацій, та цього разу почав експериментувати. Збільшив дистанцію, що збільшило кількість обертів (з 0.5 до 1) та змінило початкове положення ножа - "руків'я до себе, ріжуча кромка від долоні".
Та-а-ак, він приходив у ціль... принаймні, в дерево влучав (майже завжди, ага). Не будемо уточнювати, якими саме частинами, під якими кутами та куди потім був рикошет. З понад 15 кидків лише два були вдалими, результат одного з них - на третьому фото.

Медитативний процес, скажу я вам... Тим більше, якщо додати до нього термос з чаєм. Ранок видався не занадто теплим, тому гарячий вміст досить гармонічно заповнював паузи у жбурлянні.
Доречі, термос цей був подарований у 2012-му однією хорошею людиною, з якою ми тоді працювали на одному підприємстві та періодично ходили геокешити. Геокешинг відбувався восени та взимку, тому термос ставав у нагоді і там.

#knives
Про скомпонованих портових вантажників,
що не бажають працювати

Пишемо свій docker-compose.yml з блекджеком і плюхами, робимо docker-compose up. Сервіси піднялися, та деякі з них одразу ж і зупинилися. Бува. Залежить від того, як було зібрано image.
Але є потреба зайти в оболонку такого сервісу з метою виконати якусь магію у ввімкнутому контейнері.

Наші дії?

* docker-compose exec <service> <command> ?
Не прокатить, сервіс не запущено.
* docker-compose start <service> ?
Сервіс стартане та одразу й зупиниться, ніякого шеллу ми не отримаємо. Та і команду всунути нікуди.
* docker-compose run <service> <command> ?
А це взагалі створить новий сервіс.
* rm -rf /
Оу, а це тут звідки? Воно... фіксить трохи інші проблеми. Не намагайтеся виконати це на свої машині. І так, тут не вистачає двох фрагментів.

То які наші дії? Добре було б мати щось накшталт опцій -it , як у docker run ...
Так маємо ж!

Перед тим, як робити перший "up", відкриваємо docker-compose.yml та додаємо до сервісу
  stdin_open: true  # це як docker run -i
tty: true # це як docker run -t
І далі docker-compose up. Сервіс створюється, стартує та не зупиняється. При необхідності може бути зупинений та знову запущений через docker-compose stop та docker-compose start.
Жбурляння залізяк, серія 4 [20 вересня] (фото)
#knives
Жбурляння залізяк, серія 4 [20 вересня]

Коли я тільки-но починав цим займатися, то майже не звертав уваги на рекомендації щодо стійки: виконуючи кидок лівою рукою, ліва нога була трохи попереду, або стояв фронтально. Так здавалося зручніше.

Цього разу я перечитав рекомендації та намагався їм слідувати.
Правостороння стійка. Ліва нога позаду, замах лівою рукою супроводжується одночасним жестом правої руки в сторону цілі, кидок виконується з розворотом корпусу, а в кінці задня нога ще й довертається у напрямку розвороту. Для правші - те ж саме, але дзеркально.

“Добре, - сказав я. - Спробуємо”. Кидок, другий, третій… Нєа, фігня якась виходить. Рука оця права до цілі - нашо? Довертання ногою - незручно.
Жбурляв, жбурляв… І якоїсь миті, коли почав замахуватися, щось в голові перемикнулося: права рука сама пішла на реверс в сторону цілі (ну реверс же! як в ножовому бої та в бойових мистецтвах!), а в кінці руху ліва нога сама довернулася у напрямку развороту. Випустивши ніж, ліва рука “за інерцією” пішла вправо через низ по дузі та, коли повністю погасила швидкість, опинилася десь у районі захисту “зони вішалки” (© Valde Khan) з правої сторони корпусу. Ймовірно, готувалася до наступного руху.
Тіло самостійно запозичило вже знайомі рухи з діагонального порізу:)

Ось так вдруге у житті я зрозумів на власних відчуттях, як це воно, коли одна техніка автоматично накладається на чимось схожу іншу.

P.S.
Трохи потренувавшись, спробував жбурнути декілька п'ятиметрових однообертових (відстань приблизно 5.5 м, один повний оберт), застосовуючи нову стійку. З чотирьох чи п'яти кидків два підряд увійшли в ціль. Не дуже стабільно та нижче, ніж треба було, але увійшли. На фото НЕ вони, на фото "традиційні" 3.5-метрові на півоберу.

#knives