Git'ten tek bir düzeltme alma


14

Git revizyon geçmişinin tamamının geliştirilmesi, geliştirme sürecinin bir parçası olarak birçok fayda sağlar.

Ancak ürünümüz kaynak kodudur, derleme veya işleme gerek duymayan kodlanmış diller kullanıyoruz ve sonra Git geçmişi dağıtım üzerinde bir yük haline geliyor - örneğimizde, her değişiklikten sonra temiz bir sanal ortam dağıtıyoruz. tek bir makine.

Tarihin miktarını azaltmanın bazı yolları vardır, örneğin verimliliği revizyonun dalda ne kadar derin olduğuna, klon yerine bir getirme yapmaya bağlı olan sığ klonlar, ancak yine de revizyondan ve geriye doğru tarih alırsınız. repo bir kez sonra gerektiğinde çekin ama bu disk alanı açısından israf ve daha az güvenilir olma eğilimindedir.

Git'ten geçmişi olmadan tek bir düzeltme almanın bir yolu var mı?


Yanıtlar:


16

Sığ klon

Gerçekten de Git'i kullanarak sığ bir klon alabilirsiniz:

git clone --depth=1 <url>

Bu yine de repoyu kopyalar ve .gitnesnelerle bir klasör oluşturur , yalnızca daha küçük boyuttadır (toplam dosya boyutunuza ve geçmiş boyutuna bağlı olarak fark).

Git arşivi

Reponun arşivini çıkarmak için git-arşivini de kullanabilirsiniz :

Adlandırılmış ağaç için ağaç yapısını içeren belirtilen formatta bir arşiv oluşturur ve bunu standart çıktıya yazar. Belirtilirse, arşivdeki dosya adlarının başına eklenir.

Gelen örnekler bu Örneğin gösterir:

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

sürümü için sıkıştırılmış bir tarball oluşturun .

Barındırılan Git, arşiv API'sı

Repo'nuzu GitHub'da barındırıyorsanız, arşiv API'larını kullanabilirsiniz :

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

Bitbucket.org bunun için aynı işlevselliğe sahiptir:

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


7ochem, belki gzip komutunun gzip -c olması gerekir ....
Romeo Ninov

11

Git deponuzu dağıtmayın. Gerçek bir dağıtım yöntemi geliştirin. Konuşlandırılmış komut dosyalarının bir arşivini kaldırmak (= yalnızca dağıtılması gereken dosyalar ile bir yapı oluşturmak) kadar basit olsa bile.

Kaynak deponuzun ucunu sığ klonlasanız bile, konuşlandırılan ortamınızda birim testlerine, belgelere, linting profillerine ve diğer destekleyici ephemeralara ihtiyacınız yoktur.

Not : Gerçekten bir "derleme" adımı olmayan kodlanmış dillerin depoları için, bir eseri yayınlamanın önemsiz bir yolu, bunları tar veya rpm gibi bir arşivde paketlemektir. Daha sonra, "dağıtmak" için, arşivi açar veya rpm'yi yüklersiniz. bu, dağıtım zincirinizdeki git takımlama ihtiyacını ortadan kaldırır (tüm sunucu sunucular bu geliştirme araçlarına sahip olmayacaktır).


bir yanıtı sorgulamak (hatta meydan okumak!) sorun değil - Stack Exchange'i harika yapan şey budur :) gerçekten bir "derleme" adımı olmayan komut dosyası dillerinin depoları için, bir eseri yayınlamanın önemsiz bir yolu paketlemek olacaktır bunları tar veya rpm gibi bir arşivde bulabilirsiniz. daha sonra "dağıtmak" için, arşivi açar veya rpm'yi yüklersiniz. bu, dağıtım zincirinizdeki git takımlama ihtiyacını ortadan kaldırır (tüm sunucu sunucular bu geliştirme araçlarına sahip olmayacaktır)
RubyTuesdayDONO

1
@ Pierre.Vriens evet, bir arşivi tarring olarak önerilen şeyi kaçırıyorsunuz, yani konuşlandırılacak gerekli dosyaları içeren bir yapı oluşturuyor. Bunun kaliteli bir cevap olmadığını kabul ediyorum ve bu noktanın genişletilmesi gerektiğini söyledi. Biz özel beta aşamasındayız ve cevaplar açık olmalı
Tensibai

O zaman bunun kabul edilen cevaptan daha fazlasını getirdiğini görmüyorum, eğer uygun arşivi işaret edecekse ... sadece gereksiz, bu şekilde genişletmek için düzenlemelisiniz iMHo
Tensibai

1
Lütfen cevabınızdaki düzenlememi kontrol edin (sadece ilginç yorumunuzu entegre edin). Elbette geliştirmek / yeniden çalışmaktan çekinmeyin veya düzenlememi hiç beğenmediyseniz geri alın. BTW: Yorumunuz (= eklediğim not) beni "gerçekten, bu kadar basit mi? Yine zOS'ta İşlerin Nasıl Yapıldığına dair bir örnek ... sıfır kesinti için z ile ..." gibi düşündürdü . Sanırım benzer yorumlarla daha fazla soru / cevap sormaya başlamanın zamanı geldi ... Bana çok fazla meydan okuma ...
Pierre.Vriens

Bu tam ya da model bir cevap olduğunu iddia etmiyorum, ama odada fil ele başka kimseyi görmedim: eğer projenizi "dağıtmak" için git kullanırsanız, "kötü bir zaman olacak" ;)
RubyTuesdayDONO

6

Soru Git olmadan geçmişi olmadan tek bir düzeltme almanın bir yolu var mı?

Bir depo almak için hayır yolu yoktur, çünkü esas olarak 'revizyon' yoktur. Git deposu, önceki durumdan değişiklik olan taahhüt eder.
Deponuzun belirli bir zamanda olmasını istiyorsanız, şu anda taahhüdü ve tüm atalarını çekmeniz gerekir veya yalnızca taahhütte yapılan değişiklikleri alırsınız.

Karışıklığı önlemek için: Sığ klonlama gerekli tarihi alıyor ve daha sonra boş alana kırpıyor, ağaç hala tarihten yapılmış.

Çözümler için, @ 7ochem yanıtı bunları kapsar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.