Uzyskiwanie pojedynczej wersji z Git

14

Posiadanie pełnej historii zmian w Git ma wiele zalet w ramach procesu rozwoju.

Ale naszym produktem jest kod źródłowy, używamy języków skryptowych, które nie wymagają kompilacji ani przetwarzania, a następnie historia Git staje się obciążeniem przy wdrażaniu - w naszym przykładzie wdrażamy czyste środowisko wirtualne po każdej zmianie, mając kilka wdrożeń na pojedyncza maszyna.

Istnieje kilka sposobów na zmniejszenie ilości historii, na przykład płytkie klony, których efektywność zależy od tego, jak głęboko wersja znajduje się w gałęzi, wykonując pobranie zamiast klonowania, ale wtedy nadal pobiera się historię z wersji z powrotem i wstecz lub uzyskuje pełny w razie potrzeby repo, a następnie ściągnij, ale jest to marnotrawstwo pod względem miejsca na dysku i zwykle jest mniej niezawodne.

Czy istnieje sposób na uzyskanie jednej wersji z Git bez jego historii?

Rsf
źródło
1
Powiązane pytania i odpowiedzi na SO stackoverflow.com/questions/26135216/…
Evgeny,

Odpowiedzi:

16

Płytki klon

Możesz naprawdę uzyskać płytkiego klona z Git, używając:

git clone --depth=1 <url>

Spowoduje to nadal klonowanie repozytorium i utworzenie .gitfolderu z obiektami, tylko mniejszego rozmiaru (różnica w zależności od całkowitego rozmiaru pliku w porównaniu z rozmiarem historii).

Archiwum Gita

Możesz także użyć git-archive, aby wyodrębnić archiwum repo:

Tworzy archiwum określonego formatu zawierającego strukturę drzewa dla nazwanego drzewa i zapisuje je na standardowym wyjściu. Jeśli jest określony, jest dołączany do nazw plików w archiwum.

W przykładach pokazuje na przykład:

git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz

Utwórz skompresowany plik tarball dla wersji .

Hostowany Git, archiwum API

Jeśli hostujesz swoje repozytorium na GitHub, możesz użyć ich archiwum API :

https://api.github.com/repos/<username>/<repository>/zipball/<commit_hash>

Bitbucket.org ma w tym celu tę samą funkcjonalność:

https://bitbucket.org/<username>/<repository>/get/<branch_name|commit_hash|tag>.zip

7ochem
źródło
7ochem, może polecenie gzip musi być gzip -c ....
Romeo Ninov
11

Nie wdrażaj repozytorium git. Opracuj prawdziwą metodologię wdrażania. Nawet jeśli jest to tak proste, jak tarowanie archiwum (= budowanie artefaktu zawierającego tylko niezbędne pliki do wdrożenia) wdrożonych skryptów.

Nawet jeśli sklonujesz płytko wierzchołek swojego repozytorium źródłowego, prawdopodobnie nie potrzebujesz testów jednostkowych, dokumentacji, profili kłaczków i innych efemeryd wspierających we wdrożonym środowisku.

Uwaga : w przypadku repozytoriów języków skryptowych, które tak naprawdę nie mają kroku „kompilacji”, trywialnym sposobem wydania artefaktu byłoby spakowanie ich w archiwum, takim jak tar lub rpm. Następnie, aby „wdrożyć”, rozpakuj archiwum lub zainstaluj rpm. eliminuje to potrzebę używania narzędzi git w łańcuchu wdrażania (nie wszystkie serwery prod będą miały te narzędzia programistyczne).

RubyT TuesdayDONO
źródło
dobrze jest zadać pytanie (a nawet rzucić wyzwanie!) odpowiedź - to sprawia, że ​​Stack Exchange jest świetny :) dla repozytoriów języków skryptowych, które tak naprawdę nie mają kroku kompilacji, trywialnym sposobem na uwolnienie artefaktu byłoby spakowanie je w archiwum, takim jak tar lub rpm. następnie, aby „wdrożyć”, rozpakuj archiwum lub zainstaluj rpm. eliminuje to potrzebę używania narzędzi git w łańcuchu wdrażania (nie wszystkie serwery prod będą miały te narzędzia programistyczne)
RubyT TuesdayDONO
1
@ Pierre.Vriens tak, brakuje Ci tego, co sugeruje się jako tarowania archiwum, to znaczy budowania artefaktu zawierającego tylko niezbędne pliki do wdrożenia. To powiedziawszy zgadzam się, że nie jest to wysokiej jakości odpowiedź i ten punkt należy rozszerzyć. Jesteśmy w prywatnej wersji beta i odpowiedzi powinny być jednoznaczne
Tensibai
Więc nie widzę, co to przynosi więcej niż zaakceptowana odpowiedź, jeśli ma wskazywać na dopasowanie archiwum ... to jest po prostu zbędne, należy edytować, aby rozszerzyć w ten sposób iMHo
Tensibai
1
Sprawdź moją edycję swojej odpowiedzi (wystarczy zintegrować interesujący komentarz). Oczywiście możesz ulepszyć / przerobić oczywiście lub po prostu cofnąć, jeśli w ogóle nie lubisz mojej edycji. BTW: Twój komentarz (= dodałem notatkę) zmusił mnie do myślenia: „naprawdę, to takie proste? Znowu próbka tego, jak robimy rzeczy w systemie zOS… z z dla zerowego przestoju …”. Myślę, że nadszedł czas, aby zacząć zadawać pytania o wiele więcej pytań / odpowiedzi za pomocą podobnych komentarzy ... Nie
rzucaj
nie twierdzę, że jest to pełna lub wzorcowa odpowiedź, ale nie widziałem nikogo, kto przemawiałby do słonia w pokoju: jeśli użyjesz git do „wdrożenia” swojego projektu, „będziesz miał zły czas” ;)
RubyT TuesdayDONO
6

Pytanie czy istnieje sposób, aby uzyskać jedną wersję od Git bez jego historii?

Aby uzyskać repozytorium, nie ma mowy, głównie dlatego, że nie ma „rewizji”. Zatwierdzanie w sklepie Git, które są zmianami z poprzedniego stanu.
Jeśli chcesz, aby Twoje repozytorium miało miejsce w określonym momencie, musisz w tym momencie wyciągnąć zatwierdzenie i wszystkich jego przodków, albo dostaniesz tylko zmiany dokonane w zatwierdzeniu.

Aby uniknąć nieporozumień: Płytkie klonowanie polega na uzyskaniu potrzebnej historii, a następnie obcięciu jej do wolnego miejsca, drzewo jest nadal tworzone z historii.

W przypadku rozwiązań odpowiedź @ 7ochem ich obejmuje.

Tensibai
źródło