/ / Jak wykonać klon git dla dużego projektu na niestabilnym połączeniu? - git, git-clone

Jak ukończyć klon git dla dużego projektu na niestabilnym połączeniu? - git, git-klon

Próbuję sklonować pakiet LibreOfficebazy kodu, ale w tej chwili mam połączenie internetowe o szybkości około 300 kb / s i nie jest stabilne. Mogę odzyskać połączenie w każdej chwili, ale proces klonowania git już przestał działać i nie ma możliwości ponownego uruchomienia go .Czy istnieje sposób na uzyskanie bardziej odpornego na awarie pobierania klonów git?

Jedną z opcji, którą sam sobie rozważałem, jest pobranie katalogu .git innej osoby, ale jest to nadmiernie zależne od innych i nie wydaje mi się najlepszym możliwym rozwiązaniem.

Odpowiedzi:

58 dla odpowiedzi № 1

Nie sądzę, żeby to było jeszcze gotowe stara strona GSoC to, co zaplanowało wdrożenie pożądanej funkcji. Najprościej jest, tak jak zasugerowałeś, aby pobrać go jako katalog. Zakładam, że możesz wznowić pobieranie za pośrednictwem innych protokołów.

Klon z możliwością ponownego uruchomienia

Podczas klonowania dużego repozytorium (np jako KDE,Open Office, jądro Linuksa) obecnie nie ma możliwości ponownego uruchomienia przerwany klon. To może zająć znaczny czas dla użytkownika w Internecie koniec małej fajki, aby pobrać dane i jeśli klon zostanie przerwany w środku użytkownik aktualnie potrzebuje zacząć od nowa od początku i Spróbuj ponownie. W przypadku niektórych użytkowników może tak być uniemożliwić klonowanie dużego magazyn.

Cel: Zezwól git-clone na automatyczne działanie wznowić poprzednio nieudane pobieranie przez natywny protokół git: //. Język: C Mentor: Shawn Pearce Sugerowane przez: Shawn Pearce on gmane


Aktualizacja

Wraz z płytkim klonowaniem (git clone --depth=1) w jednej z pozostałych odpowiedzi, może być pomocne, jeśli ktoś może zrobić dla Ciebie czyste repozytorium, jeśli możesz komunikować się z dostawcą. Możesz łatwo konwertować z czystego repozytorium do pełnego repozytorium. Przeczytaj także komentarze w tej odpowiedzi, ponieważ płytki klon nie zawsze mogą pomóc.


96 dla odpowiedzi nr 2

Dwa rozwiązania (a raczej obejścia), które przychodzą na myśl to:

  • Posługiwać się płytki klon to znaczy git clone --depth=1, następnie pogłębiać ten klon przy użyciu git fetch --depth=N, ze zwiększającą się N. Możesz użyć git fetch --unshallow (od 1.8.0.3), aby pobrać wszystkie pozostałe wersje.

  • Poproś kogoś o to pakiet do jakiegoś oznaczonego wydania (patrz pakiet git (1) manpage). Pakiet jest zwykłym plikiem, który możesz pobrać w dowolny sposób, przez HTTP / FTP z obsługą wznawiania, przez BitTorrent, przez rsync itp. Możesz utworzyć klon z pakietu, naprawić konfigurację i wykonać dalsze pobieranie z oficjalnego repozytorium LibreOffice .


10 dla odpowiedzi nr 3

Ta metoda wykorzystuje serwer innej firmy.

Po pierwsze, zrób git clone --bare, następnie rsync -v -P -e ssh user@host:repo.git . Możesz używać msys pod Windows.


9 dla odpowiedzi № 4

Możesz „pobrać katalog .git innej osoby”, ale ktoś inny jest samo oficjalnym repozytorium. Repozytoria LibreOffice są dostępne przez http, na przykład ich build.git jest przy http://anongit.freedesktop.org/git/libreoffice/build.git/ (widzieć http://cgit.freedesktop.org/libreoffice/ dla pełnej listy adres URL http znajduje się na dole strony każdego repozytorium).

To, co widzisz pod tymi adresami URL http, to nic innego jak plik .git katalog (właściwie "nagie" repozytorium, które zawiera tylko to, co można znaleźć w .git informator). Jest to ten sam katalog, w którym znajduje się serwer git:// protokół (git daemon) przeczytałby. Jeśli utworzysz kopię tych katalogów za pomocą narzędzia do pobierania z sieci (na przykład wget -m -np), możesz sklonować ze swojej kopii i będzie działać tak dobrze, jak gdybyś sklonował się bezpośrednio z repozytorium http.

Możesz więc: dla każdego repozytorium, pobierz jego kopię za pomocą ulubionego programu do pobierania z sieci (który rozwiąże wszystkie problemy z wznawianiem nieudanych pobrań) i sklonuj z tej kopii. Jeśli chcesz zaktualizować, użyj ponownie swojego ulubionego programu do pobierania z sieci, aby zaktualizować swoją kopię, i pobierz ją z niej. Teraz Twoje klony i aktualizacje są tak samo odporne na złe połączenia, jak Twój ulubiony program do pobierania z sieci.


7 dla odpowiedzi № 5

"Nigdy nie lekceważ przepustowości gołębia pocztowego i pakietu kart SD"byłaby nowoczesną formą tej odpowiedzi. Zatrzyj ją, po prostu stara cp -a to, cokolwiek, i wyślij to cholerstwo. Znajdź kogoś, kto poświęci dwie minuty na włożenie pendrive'a do SASE. Znajdź tam kontakt, mogą nawet zrobić to za Ciebie.


4 dla odpowiedzi № 6

Jeśli masz dostęp do serwera innej firmy, możesz go tam sklonować, a następnie skopiować.


4 dla odpowiedzi № 7

Zróbmy przerwę git clone do jego części składowych i używać git reset aby zapobiec ponownemu pobieraniu plików.

Gdy git clone działa, kilka pierwszych rzeczy jest równoważnych

git init
git remote add origin <repo_url>
git fetch origin <branch>

Jeśli wykonasz powyższe kroki ręcznie i zakładając, że zakończyły się poprawnie, możesz teraz wykonywać następujące czynności tyle razy, ile potrzeba:

git reset --hard origin/<branch>

Zauważ, że przy każdym uruchomieniu pobierze wszystkie pliki, ale nie będziesz musiał ponownie pobierać plików, co może zaoszczędzić mnóstwo czasu.


3 dla odpowiedzi № 8

Użyj CNTRL Z, aby zatrzymać klonowanie. Nie zamykaj terminala i nie wprowadzaj systemu / laptopa w stan hibernacji, a następnie kontynuuj później za pomocą polecenia fg. Miałem ten sam problem dzisiaj, próbując sklonować repozytorium z github. To dla mnie oszczędność czasu.


3 dla odpowiedzi № 9
git clone --depth <Number> <repository> --branch <branch name> --single-branch

To polecenie pomóż mi (dzięki Nicola Paolucci)

na przykład

git clone --depth 1 https://github.com/gokhanmoral/siyahkernel3 --branch ics  --single-branch

2 dla odpowiedzi № 10

Ten problem też mnie ugryzł. W moim przypadku istnieje obejście. Może, ale nie musi mieć zastosowania w Twoim przypadku.

Czasami do inicjacji używam telefonu komórkowegooperacje git w systemie zdalnym. Jeśli moje Wi-Fi się zepsuje, sesja się zakończy i git porzuci całą operację klonowania bez odzyskiwania. Ale ponieważ połączenie internetowe z mojego zdalnego systemu do git master jest solidne, klon nie musi się zatrzymywać. Wszystko, czego potrzebuję, to zdrowy rozsądek, aby odłączyć klon od sesji terminala. Można to zrobić za pomocą screen / tmux lub nohup / daemon. W moim przypadku jest to więc usterka oprogramowania typu liveware.


1 dla odpowiedzi № 11

Opierając się na odpowiedziach opartych na klonach / głębi - kilka linijek basha robi to łatwo ...

git clone --depth=1 something@somegit.com:/var/git/whatever.git <directory> cd <directory> for m in `seq 1 100`;do git fetch --depth=$m;done


0 dla odpowiedzi № 12

Możesz spróbować użyć mercurial z rozszerzeniem hg-git.

Jeśli to nie zadziała, możesz użyć git fetch <commit-id> aby pobrać tylko części zdalnego repozytorium git(możesz pobrać do pustego repozytorium git, nie ma potrzeby tworzenia go za pomocą klonu). Ale możesz poprawić konfigurację gałęzi (= utworzyć lokalne i zdalne gałęzie śledzenia), korzystając z tego podejścia.


0 dla odpowiedzi № 13

Użyj serwera proxy git, takiego jak ngitcached lub git-proxy.


0 dla odpowiedzi № 14

jeśli założymy, że serwer ma dobre pasmo, inną odpowiedzią jest:

  1. utwórz własny serwer przy użyciu serwera Git Wrapper"s
  2. sklonuj go na swoim serwerze
  3. Spakuj go za pomocą pliku po stronie serwera Zip Archiver"s
  4. pobrać go zi po stronie serwera Wznów wsparcie

ale działa to tylko z bardzo podstawowym doświadczeniem w tworzeniu stron internetowych;) a także potrzebujesz git.exe na twoim serwerze