Вхід Реєстрація
Реклама
Ваше рекламне місце
Забронюйте цей слот без конкуренції на обраний період.
Купити рекламу →
Логотип телеграм спільноти - Євгеній Гизила
Додано 06 січ 2025 🌐 UK

Євгеній Гизила

@hyzyla_blog
Кількість підписників: 598
Фото: 61
Посилання: 142
Опис:
Автор @hyzyla Пишу про різне зі світу веб розробки: власний досвід, Python, React, TypeScript, стартапи і власні думки
Джерело

Євгеній Гизила | Останнім часом використовую git worktree, щоб паралельно робити кілька...

Логотип телеграм спільноти - Євгеній Гизила Євгеній Гизила @hyzyla_blog
605 Охват/переглядів 2026-08-04 08:28 Повідомлення №228
Останнім часом використовую git worktree, щоб паралельно робити кілька задач по одному й тому ж проєкту. І вилізла очевидна проблема, що в кожному такому клоні проєкту немає всього, що зазвичай лежить незакомічене в мене проєкті, для прикладу, .venv, node_modules, .mypy_cache, etc. Відповідно кожен такий worktree не безплатний і займає відчутно місця і часу на налаштування. Думаю, що окей, вмовили і треба вже нарешті почати використовувати нормальні інструменти. Ну ті які десь там глобально зберігають залежності і просто лінкують їх у проєкт. Для python вже використовую uv, тому — готово ✅, pnpm наче не старшний, тому можна зʼїхати з npm — okay i guess 👌, а з кешами, чорт їх побрав, не вартують моїх зусиль щоб робити — забʼю хуй 🙅

А потім, щось прибирався на кухні, слухав ютуб і мені прийшла в голову геніальна думка. Я ж на macOS працюю, а тут же ж copy-on-write файлова система — APFS! А ну дай пошукаю, як так взяти і скопіювати папку, щоб це було і швидко і займало три гроша. Якусь готову команду не найшов, тому накидав такий скрипт, який напряму робить syscall:

cow_clonedir() { python3 -c "import ctypes,ctypes.util,sys,os;l=ctypes. CDLL(ctypes.util.find_library('System'),use_errno=True);sys.exit(0 if l.clonefile(sys.argv[1].encode(),sys.argv[2].encode(),0)==0 else os.strerror(ctypes.get_errno()))" "$1" "$2"; }

і шо ви думаєте? виглядає страшне, а я вже тиждень користуюся і не можу нарадуватися як воно добре працює:

node_modules: 544 MB, 51,705 files: clonefile() copies it in 1.2s vs 103s for cp -Rc (~84×). Real disk cost is 20 MiB — just new inodes over shared blocks.

1. Create space-saving clones on macOS with Python
2. Is it possible to clone directories in APFS?