Wpis z mikrobloga

Mirki, przyszedł mi do głowy problem czysto teoretyczny (czyt. taki który nie wymaga rozwiązania, tylko mnie zaciekawił).

TL; DR


Bywają duże projekty, ale dla uproszczenia weźmy kernel - ok 100k plików i 3GiB miejsca. Powiedzmy że macie X starych projektów, gdzie po pewnym czasie - nawet gdyby ktoś chciał - nie sposób trzymać zmian w postaci łatki. Strata miejsca i i-węzłów na trzymaniu X kopii, przeszukiwanie dysku jest wolniejsze.

Przyszło mi do głowy by trzymać sobie takie projekty w kontenerze. Czyli tworzę sobie projekt.img, formatuję jako btrfs, montuję i volia. Dla dodatkowej oszczędności można by jeszcze projekt.img trzymać jako sparse. Łatwo i szybko można taki projekt otworzyć (w stosunku do trzymania go w jakimś zipie), można go po zamontowaniu zaktualizować jeśli potrzeba. Jedyne co, to nawet przy niewielkiej zmianie można oczekiwać że X GB kontener będzie trzeba synchronizować z backupem w dużej części. Gdyby to było archiwum tar, to ok, niewielka zmiana w "zamontowanym" archiwum zmieni tylko niewielki kawałek kontenera.

Zastanawiam się czy ktoś rozważał kiedyś podobną kwestę i na co się zdecydował. W przypadku gdy projekt już nigdy nie będzie aktualizowany to sprawa wydaje się w miarę prosta - rozważasz tylko kompromis między siłą kompresji i czasem jaki chcesz czekać na rozpakowanie. Jaka jest twoja ulubiona forma przypadku częstych aktualizacji? Usuwasz katalog roboczy zostawiając tylko ".git"? Wrzucasz do paczki swojego ulubionego formatu pakującego? Czy w ogóle bajzel, wszystko jedno i leży katalog z plikami i tyle ;)

#programowanie
  • 7
@Oo-oO: a co do trzymania to IMO wymyśliłeś problem, którego nie ma. Wrzucasz na githuba/gitlaba i fajrant. Jak masz kontrolę nad repo to możesz użyć git filter-repo, żeby usunąć śmieci z starych commitów (głównie binarki i skompresowane pliki). Jeśli nie chcesz trzymać całej historii na dysku to robisz używasz sztuczek używanych w monorepo: spare checkout i shallow clone
@Saly - projekty komercyjne które robiłeś - też wrzucasz na GH? ;) o tym że problem jest teoretyczny piszę przecież w pierwszej linijce...ale czy tak zupełnie teoretyczny? Wolisz backupować jedną kaczkę wielkości konia czy milion koni wielkości kaczki...

Idąc dalej - nie wiem czy pracowałeś nad dużymi projektami - ale podejrzewam że wiesz, że w zasadzie często - 1 projekt to niejedno repo. Można się bawić w repo manifesty jak android, czy
projekty komercyjne które robiłeś - też wrzucasz na GH?


@Oo-oO: przecież masz prywatne repa. Zresztą chyba nie powiesz mi, że istnieje pracodawca, którego życzeniem jest trzymanie swojego cennego kodu na czyimś laptopie ( ͡° ʖ̯ ͡°)

Idąc dalej - nie wiem czy pracowałeś nad dużymi projektami - ale podejrzewam że wiesz, że w zasadzie często - 1 projekt to niejedno repo. Można się bawić w repo manifesty
@Saly: haha, no nie powiem. Choć w jednej umowie widziałem zabawne stwierdzenie zobowiązujące pracownika do składowania i przechowywania w trakcie pracy wszystkich notatek, dokumentów itd itp. Na pytanie czy dotyczy to także składowania żółtych karteczek samoprzylepnych odpowiedzi było brak :D

No moim zdaniem porządkuje jak najbardziej. Po pierwsze przyjmijmy sobie założenie że ktoś z jakiejś przyczyny pracował w dwóch projektach androida, i trzyma je na dysku. Mógłby oczywiście używać jednego repo
@Oo-oO: wydaje mi się, że liczby nie są na tyle duże, żeby kombinować. Dla przykładu bare repo linuxa zajmuje u mnie 3.6 GB. Po skompresowaniu przy pomocy git gc --aggressive mam 1.8GB. Nawet jak będę pracował nad 10 repo w skali linuxa (co wydaje mi się nieprawdopodobne) to czym jest 20GB w dzisiejszych czasach?
no, ale to same repka linuxa. I jasne, to nie jest stricte problem miejsca, chyba że mówimy o projektach których powiedzmy build trwa na smutnym lapku po parę godzin (hello yocto!) i zajmuje po parędziesiąt gigabajtów. Choć może i fakt, jest to przekombinowany pomysł póki co. Niemniej fajnie było się chwilę pozastanawiać, no i dzięki za linka - choć dałbym głowę że to było w jakimś innym kontekście nazywane stability. No, nieważne.