Git - ignorowanie plików wykonywalnych Delphi

0

Witam i dzięki za zajrzenie!

Na wstępie chciałbym zgłosić pewną uwagę. Jak widać w temacie mam pewne wątpliwości dotyczące Git. Jednak nie wiedziałem w którym dziale się poradzić. Zdecydowałem się na ten dział, dlatego że większość innych postów(Szukaj... -> Git) znajdowało się tu. Gdybym ich nie znalazł ich to bym zdecydował się na Newbie, Inżynieria oprogramowania lub Off-Topic. Moim zdaniem przydałby się dział na temat kontroli wersji. :)

Jeżeli chodzi o Git to z tego co przeczytałem wynika, że w pierwszym commicie jakiegoś pliku tekstowego Git przechowuje cały plik. W drugim commicie(i kolejnych) tego pliku przechowuje tylko różnice pliku między commitem pierwszym a drugim. Mam racje?

Co się stanie, gdy w przykładzie powyżej commitujemy plik wykonywalny? W tedy Git będzie robił kopie całych plików przy każdym commicie, jeżeli znajdzie jakąś różnice? I to za każdym razem całości?

Pytam się, bo jeżeli moje przypuszczenia są prawdziwe to mogę mieć dużo syfu w historii Gita: wiele plików wykonywalnych. Martwię się o przestrzeń dyskową.
Wiem, że ten problem można rozwiązać za pomocą .gitignore, jednak co w sytuacji, gdy kilka plików wykonywalnych zostało commitowanych i nagle dochodzę do wniosku, że mi są nie potrzebne. Da się pojedyncze pliki usunąć, które zostały już commitowane?

Pracuje zarówno na Debianie i Windowsie. Właśnie dzięki Git mogę łatwo współdzielić pracę między dwoma laptopami, zamiast biegać z Pendrive'em. Jeżeli chodzi o pliki wykonywalne pod Windowsem to problemu aż takiego nie ma, bo można do .gitignore dodać *.exe, ale co w sytuacji, gdy np. Lazarus od Delphi na Debianie generuje pliki wykonywalne bez rozszerzenia? Jak to dodać do .gitignore?

No i chyba ostatnia wątpliwość: Czy można tworzyć kilka plików .gitignore w różnych poziomach katalogów? Żeby zobrazować o co mi chodzi:

~/A$ tree -a
.
├── B
│   └── .gitignore
└── .gitignore

Załóżmy, że folder A jest korzeniem Git'a. Oczywistym jest to, że wpisy w .gitignore, który jest w folderze A dotyczą wszystkich katalogów/plików, które są w niżej - czyli też B. Ale czy wpisy w .gitignore w folderze B dotyczą tylko folderu B(ewentualnie podfolderów folderu B)? Czy Git dopuszcza/widzi .gitignore niżej niż w katalogu zawierającym folder .git?

0
Jojek01 napisał(a):

Na wstępie chciałbym zgłosić pewną uwagę. Jak widać w temacie mam pewne wątpliwości dotyczące Git. Jednak nie wiedziałem w którym dziale się poradzić. Zdecydowałem się na ten dział, dlatego że większość innych postów(Szukaj... -> Git) znajdowało się tu. Gdybym ich nie znalazł ich to bym zdecydował się na Newbie, Inżynieria oprogramowania lub Off-Topic. Moim zdaniem przydałby się dział na temat kontroli wersji.

Gdyby każdy użytkownik miał swój dział, to strona główna forum byłaby bardzo długa.

Jeżeli chodzi o Git to z tego co przeczytałem wynika, że w pierwszym commicie jakiegoś pliku tekstowego Git przechowuje cały plik. W drugim commicie(i kolejnych) tego pliku przechowuje tylko różnice pliku między commitem pierwszym a drugim. Mam racje?

Nie, to SVN i inne tego typu badziewia tracą czas na liczenie różnic. Git przechowuje całe zmienione pliki. Te, które się nie zmieniły linkuje do wersji z poprzedniego commita.

Co się stanie, gdy w przykładzie powyżej commitujemy plik wykonywalny? W tedy Git będzie robił kopie całych plików przy każdym commicie, jeżeli znajdzie jakąś różnice? I to za każdym razem całości?

Tak, każdy zmieniony plik wykonywalny w całości zostanie umieszczony w repozytorium.
Dziwne, że tym razem pytasz tak, jakbyś jednak wiedział, że Git przechowuje całe pliki, a nie ich różnice...

Pytam się, bo jeżeli moje przypuszczenia są prawdziwe to mogę mieć dużo syfu w historii Gita: wiele plików wykonywalnych. Martwię się o przestrzeń dyskową.

Nie trzyma się w repozytorium plików wykonywalnych, ustawień solucji, logów, plików cache, plików tymczasowych IDE, wyników testów ani filmów z kotami, wtedy tego problemu nie ma.

co w sytuacji, gdy np. Lazarus od Delphi na Debianie generuje pliki wykonywalne bez rozszerzenia? Jak to dodać do .gitignore?

./katalog/podkatalog/*

0
somekind napisał(a):
Jojek01 napisał(a):

Na wstępie chciałbym zgłosić pewną uwagę. Jak widać w temacie mam pewne wątpliwości dotyczące Git. Jednak nie wiedziałem w którym dziale się poradzić. Zdecydowałem się na ten dział, dlatego że większość innych postów(Szukaj... -> Git) znajdowało się tu. Gdybym ich nie znalazł ich to bym zdecydował się na Newbie, Inżynieria oprogramowania lub Off-Topic. Moim zdaniem przydałby się dział na temat kontroli wersji.

Gdyby każdy użytkownik miał swój dział, to strona główna forum byłaby bardzo długa.

Nie chodzi mi przecież o dział dla mojego tematu, tylko dział o nazwie "Systemy kontroli wersji", bo tematy, które znalazłem są porozrzucane po forum. Chyba te systemy są częścią chyba każdego większego projektu, w każdym języku. o0

somekind napisał(a):

Jeżeli chodzi o Git to z tego co przeczytałem wynika, że w pierwszym commicie jakiegoś pliku tekstowego Git przechowuje cały plik. W drugim commicie(i kolejnych) tego pliku przechowuje tylko różnice pliku między commitem pierwszym a drugim. Mam racje

Nie, to SVN i inne tego typu badziewia tracą czas na liczenie różnic. Git przechowuje całe zmienione pliki. Te, które się nie zmieniły linkuje do wersji z poprzedniego commita.

Co się stanie, gdy w przykładzie powyżej commitujemy plik wykonywalny? W tedy Git będzie robił kopie całych plików przy każdym commicie, jeżeli znajdzie jakąś różnice? I to za każdym razem całości?

Tak, każdy zmieniony plik wykonywalny w całości zostanie umieszczony w repozytorium.
Dziwne, że tym razem pytasz tak, jakbyś jednak wiedział, że Git przechowuje całe pliki, a nie ich różnice...

Dobra, rozumiem. Dzięki! Te dwa przykłady tak przedstawiłem, bo chodziło mi tylko o różnice pomiędzy plikami tekstowymi, a binarnymi. Jeżeli Git zaglądałby(a dzięki Tobie już wiem, że tak nie jest) do wnętrza tych plików to chyba jasne, że nie potrafiłby znaleźć różnic w dwóch plikach binarnych, a w tekstowych już tak.

somekind napisał(a):

co w sytuacji, gdy np. Lazarus od Delphi na Debianie generuje pliki wykonywalne bez rozszerzenia? Jak to dodać do .gitignore

./katalog/podkatalog/*

Z tego rozwiązania rozumiem, że w środowisku muszę zmienić katalog kompilacji na jakiś podkatalog. No dobrze, dziękuje, to jakieś rozwiązanie. Jednak musiałbym zmieniać konfiguracje kompilacji przy każdym projekcie, na każdym komputerze osobno. Nie ma czegoś bardziej uniwersalnego dla plików bez rozszerzenia?

Jojek01 napisał(a):

Da się pojedyncze pliki usunąć, które zostały już commitowane?

Te pytanie nadal jest bez odpowiedzi. :(
A i jeszcze dodam, że te commity zostały Pushowane na serwer.

1

W sieci jest pełno dopieszczonych plików gitignore dla dolnego typu projektów. Nic tylko googlać, a na pewno znajdziesz gotowce.
Poza tym, w pliku gitignore można używać ścieżek robić wyjątki itp. (zamiast robić kilka plików, zrób jeden, ale wpisami obejmującymi odpowiednie katalogi).

0
MarekR22 napisał(a):

W sieci jest pełno dopieszczonych plików gitignore dla dolnego typu projektów. Nic tylko googlać, a na pewno znajdziesz gotowce.
Poza tym, w pliku gitignore można używać ścieżek robić wyjątki itp. (zamiast robić kilka plików, zrób jeden, ale wpisami obejmującymi odpowiednie katalogi).

Chryste racja! Dzięki! Zastosuje wyjątki. :)

1

https://www.gitignore.io/ pozwala na generowanie plików gitignore dla wielu projektów.

https://www.gitignore.io/api/delphi :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1