2010-07-25 9 views
17

wiem, w czasie Maven nie jest zalecany do bibliotek sklepowych w VCS, ale czasami ma sens, choć.Najlepsze praktyki do przechowywania plików JAR w VCS (SVN, Git, ...)

Moje pytanie brzmi, jak najlepiej je przechowywać - skompresowane lub nie? Nieskompresowane są większe, ale jeśli zostaną zastąpione kilka razy nowszymi, to może zapisana różnica między dwoma nieskompresowanymi plikami .jar może być znacznie mniejsza niż różnica skompresowanych. Czy ktoś zrobił kilka testów?

Odpowiedz

21

Najlepsze praktyki do przechowywania plików JAR w VCS (SVN, Git, ...): nie.

To może mieć sens w CVC (Scentralizowane VCS) jak SVN, który może obsłużyć miliony plików bez względu na ich wielkość.

to nie w DVCS, zwłaszcza jeden jak Git (i its limits):

  • binarne pliki don't fit well with VCS.
  • Domyślnie klonowania repo DVCS będzie Ci wszystkie swojej historii, ze wszystkimi wersjami słoiku.
    To będzie powolne i zajmować dużo miejsca na dysku, nie ważne jak dobrze te słoiki są skompresowane.
    Możesz spróbować grać z shallow cloning, ale to bardzo niepraktyczne.

Użyj drugiego repozytorium, jak Nexus, do przechowywania tych słoików, a jedynie odwołać txt plik (lub plik pom.xml dla Maven projektu), aby pobrać odpowiednie wersje słoika.
Repo artefakt jest bardziej dostosowany do distribution and release management purpose.


Wszystko, co zostało powiedziane, jeśli koniecznością sklep słoik w repo Git, muszę polecić początkowo je przechowywać w ich formacie skompresowanym (który jest domyślnym formatem dla słoiku: patrz Creating a JAR File)
Zarówno skompresowany, jak i nieskompresowany format będzie traktowany przez Git jako plik binarny, ale przynajmniej w skompresowanym formacie klonowanie i pobranie zajmie mniej czasu.

jednak wiele wątków wspomina możliwość store jar in uncompressed format:

używam jakieś repo że otrzymywał regularnie archiwów 50MB sprawdzonych pod nimi.
Przekonałem ich, żeby nie kompresowali tarballi, a git wykonuje dość przyzwoitą robotę, wykonując kompresję w trójkątach (chociaż potrzebuje do tego sporo RAM).

Masz więcej na deltified object on Git here:

  • To nie robi różnicy, czy masz do czynienia z binarnego lub tekstu;
  • Delta niekoniecznie musi być na tej samej ścieżce w poprzedniej wersji, więc nawet nowy plik dodany do historii może być przechowywany w postaci zdeklarowanej;
  • Gdy obiekt przechowywany w odwzorowanej odwzorowaniu jest używany, koszt byłby większy niż w przypadku użycia tego samego obiektu w skompresowanej reprezentacji podstawowej. Mechanizm deltyfikacji stanowi kompromis uwzględniający ten koszt, a także efektywność przestrzenną.

Tak więc, jeśli klony i kas nie są wspólne operacje, które trzeba by wykonywać co 5 minut, przechowywania słoik w formie nieskompresowanej w Git byłoby bardziej sensowne, ponieważ:

  • Git będzie Skompresowana/obliczona delta dla tych plików
  • W końcu skończy się nieskompresowanym słojem w katalogu roboczym, który może być potencjalnie ładowany szybciej.

Zalecenie: nieskompresowany.

+0

Dziękuję za odpowiedź, chociaż to nie odpowiada na moje pytanie. Czasami ma sens (dla nas) przechowywanie plików jar w repozytorium. W tym przypadku chcę wiedzieć, co jest najlepsze - skompresowane lub nieskompresowane. – Mot

+0

@mklhmnn: dobra, dodałem moją rekomendację, przynajmniej dla Git: nieskompresowany format słoika jest wart wypróbowania. – VonC

+1

"Nieskompresowany format ... warto spróbować" kontra "Ja ... polecam przechowywać ... w ... skompresowanym formacie" wydaje mi się dla mnie sprzeczne. Czy sugerujesz skompresowanie lub nieskompresowanie? – Mot

2

.jar pliki są (mogą być) już skompresowane, ściskając je po raz drugi prawdopodobnie nie przyniesie poprawy rozmiarze można oczekiwać.

+2

Nie chciałem skompresować ich po raz drugi, ale utworzyć je skompresowane lub nieskompresowane. – Mot

+1

@mklhmnn, Jeśli przechowujesz '.jar's, zachowam je w oryginalnym formacie dystrybucji. Jar wygenerowany ze źródła w twoim repozytorium nie zostałby dodany do repozytorium. – rsp

+1

JAR używa formatu ZIP, więc zawsze jest skompresowany. –

Powiązane problemy