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

Próbuję sklonować bazę kodową LibreOffice, ale w tej chwili mam połączenie z Internetem około 300kbps i nie jest stabilne. Mogę odzyskać połączenie w każdej chwili, ale potem proces git clone już przestał działać i nie ma sposobu, aby go uruchomić ponownie. Czy jest jakiś sposób na bardziej odporne na awarie pobieranie git clone?

Jedną z opcji, którą uważałem za siebie, jest pobranie cudzego .katalog git, ale to jest zbyt zależne od innych i nie wydaje mi się to najlepszym rozwiązaniem.

 161
Author: erip, 2010-10-17

15 answers

Nie sądzę, żeby to było jeszcze gotowe. Jest stara strona GSoC , która planowała zaimplementować pożądaną funkcję. Najlepiej, jak sugerowałeś, ściągnij to jako katalog. Zakładam, że jesteś w stanie wznowić pobieranie przez inne protokoły.

Restartable Clone

Podczas klonowania dużego repozytorium (takiego jako KDE, Open Office, Linux kernel) obecnie nie ma możliwości ponownego uruchomienia przerwany klon. Może to potrwać sporo czasu dla użytkownika na na koniec małej rury do pobrania danych, a jeśli klon zostanie przerwany w środku użytkownik aktualnie potrzebuje zacząć od początku i spróbuj jeszcze raz. Dla niektórych użytkowników może to uniemożliwić sklonowanie dużego repozytorium.

Cel: zezwolić git-clone na automatyczne Wznów wcześniejsze nieudane pobieranie nad natywnym protokołem git://. Język: C Mentor: Shawn Pearce Zasugerował: Shawn Pearce on gmane


Update

Wraz z sugestią płytkiego klonowania (git clone --depth=1) w jednej z innych odpowiedzi może być pomocne, jeśli ktoś może zrobić gołe repozytorium dla Ciebie, jeśli możesz komunikować się z dostawcą. Możesz łatwo przekonwertować nagie repozytorium na pełne repozytorium. Przeczytaj również komentarze w tej odpowiedzi jako płytki klon nie zawsze może pomóc.

 60
Author: Jungle Hunter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:39

Dwa rozwiązania (a raczej obejścia) na myśl przychodzą:

  • Użyj shallow clone tj. git clone --depth=1, następnie pogłębić ten klon używając git fetch --depth=N, zwiększając N . Możesz użyć git fetch --unshallow (od wersji 1.8.0.3), aby pobrać wszystkie pozostałe wersje.

  • Poproś kogoś o pakiet do jakiegoś oznaczonego wydania (Zobacz Git-bundle(1) strona Man). Sam pakiet jest zwykłym plikiem, który można pobrać w dowolny sposób, poprzez HTTP / FTP z obsługą CV, przez BitTorrent, przez rsync itp. Możesz utworzyć klon z pakietu, naprawić konfigurację i wykonać dalsze pobieranie z oficjalnego repozytorium LibreOffice.

 99
Author: Jakub Narębski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-22 23:14:22

Ta metoda wykorzystuje serwer 3rd party.

Po Pierwsze, do git clone --bare, wtedy rsync -v -P -e ssh user@host:repo.git . Możesz używać MSY pod Windows.

 10
Author: Rafal Rusin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-25 10:54:54

Możesz " ściągnąć kogoś innego .Git directory", ale z tym, że ktoś inny jest oficjalnym repozytorium. Repozytoria LibreOffice są dostępne przez http, na przykład ich build.git znajduje się pod adresem http://anongit.freedesktop.org/git/libreoffice/build.git / (patrz http://cgit.freedesktop.org/libreoffice / dla pełnej listy adres URL http znajduje się na dole każdej strony repozytorium).

To, co widzisz w tych adresach http, to nic innego jak katalog .git (właściwie" gołe " repozytorium, które ma tylko to, co znajdziesz w katalogu .git). Jest to ten sam katalog, który odczyta serwer protokołu git:// (git daemon). Jeśli wykonasz kopię tych katalogów za pomocą web downloadera (na przykład wget -m -np), możesz sklonować swoją kopię i będzie ona działać tak samo, jak gdyby sklonowano ją bezpośrednio z repozytorium http.

Możesz więc: dla każdego repozytorium uzyskać jego kopię za pomocą ulubionego programu do pobierania stron internetowych (który poradzi sobie ze wszystkimi problemy z wznawianiem uszkodzonych pobrań) i klonowanie z tej kopii. Gdy chcesz zaktualizować, użyj ponownie swojego ulubionego programu do pobierania stron internetowych, aby zaktualizować kopię i wyciągnąć z niej kopię. Teraz Twoje klony i aktualizacje są tak samo odporne na złe połączenia, jak Twój ulubiony program do pobierania stron internetowych.

 9
Author: CesarB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-12 21:14:14

"nigdy nie lekceważ przepustowości gołębia pocztowego, a pakiet kart SD " byłby nowoczesną formą tej odpowiedzi. Tar it up, plain old cp -a it, whatever, and mail the damn thing. Znajdź kogoś, kto poświęci dwie minuty na wrzucenie pendrive 'a do SASE' a. Znajdź kontakt, tam, mogą nawet zrobić to za Ciebie.

 7
Author: jthill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-13 00:44:49

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

 4
Author: Amber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-17 19:26:37

Podzielmy git clone Na części składowe i użyjmy git reset, aby zapobiec ponownemu pobieraniu plików.

Kiedy git clone działa, kilka pierwszych rzeczy, które robi, jest równoważne

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 zostały wykonane poprawnie, możesz teraz wykonać następujące czynności tyle razy, ile jest to konieczne:

git reset --hard origin/<branch>

Zauważ, że będzie sprawdzać wszystkie pliki za każdym razem, gdy jest uruchomiony, ale nie będziesz musiał ponownie pobierać plików , co może zaoszczędzić mnóstwo czas.

 4
Author: cowlinator,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-15 19:47:15

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

Używam czasami telefonu komórkowego do inicjowania operacji Gita na zdalnym systemie. Jeśli moje wi-fi się zepsuje oczywiście sesja się kończy i git porzuca całą operację klonowania bez odzyskiwania. Ale ponieważ połączenie internetowe z mojego zdalnego systemu do git master jest solidne, nie ma potrzeby, aby klon się zatrzymał. Potrzebuję tylko rozsądku, by odłączyć klona od terminala. sesja. Można to zrobić za pomocą screen / tmux lub nohup / daemon. Więc w moim przypadku jest to awaria liveware.

 3
Author: Tony Sidaway,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-14 16:47:32

Użyj CNTRL Z, aby zatrzymać klonowanie. Nie zamykaj terminala umieść system / laptop w hibernacji, a następnie kontynuuj później za pomocą polecenia fg. Miałem do czynienia z tym samym problemem dzisiaj, próbując sklonować repo FRM github. To było dla mnie oszczędnością czasu.

 3
Author: Jicksy John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-26 19:17:14
git clone --depth <Number> <repository> --branch <branch name> --single-branch

This command help me (Thanks to Nicola Paolucci)

Na przykład

git clone --depth 1 https://github.com/gokhanmoral/siyahkernel3 --branch ics  --single-branch
 3
Author: Ahed Eid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-21 14:12:29

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

 1
Author: Amr Mostafa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-31 21:31:19

Bazując na odpowiedziach opartych na klonie/głębi-kilka linijek bash łatwo to robi...

git clone --depth=1 [email protected]:/var/git/whatever.git <directory> cd <directory> for m in `seq 1 100`;do git fetch --depth=$m;done

 1
Author: Stephen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-26 16:11:59

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> do pobrania tylko części zdalnego repozytorium git (możesz pobrać do pustego repozytorium git, nie ma potrzeby tworzenia go za pomocą clone). Ale możesz poprawić konfigurację gałęzi (=utworzyć lokalne i zdalne gałęzie śledzenia) podczas korzystania z tego podejścia.

 0
Author: Rudi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-18 08:33:40

Jeśli założymy, że serwery mają dobre pasmo (a Ty masz serwer) to inna odpowiedź brzmi:

  1. Stwórz swój własny serwer używając Server-Side Git Wrapper ' s
  2. Sklonuj go na swoim serwerze
  3. Zip it using Server-Side Zip Archiver ' s
  4. pobierz go z i z serwera Wznów obsługę

Ale to działa tylko z bardzo podstawowym doświadczeniem tworzenia stron internetowych ;) a także potrzebujesz git.exe w swoim sever

 0
Author: Top-Master,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-06 07:26:29

Ten sam problem tutaj-mam naprawdę flakowate połączenie internetowe z często nie więcej niż 10-15 kb / s :-p

Dla mnie sposób wget działał bardzo dobrze. Przejdź do strony repozytorium, gdzie znajduje się zielony przycisk "Klonuj lub pobierz", kliknij go i skopiuj link do opcji pobierania ZIP.

Następnie Wstaw link do komendy wget:
wget-c-m-np https://github.com/your/repository/archive/master.zip

Działa jak czar...

 0
Author: X-File,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-02 07:53:53