Programming

불안정한 연결에서 큰 프로젝트를 위해 git clone을 완료하는 방법은 무엇입니까?

procodes 2020. 5. 21. 21:23
반응형

불안정한 연결에서 큰 프로젝트를 위해 git clone을 완료하는 방법은 무엇입니까?


LibreOffice 코드베이스를 git clone하려고하지만 현재 약 300kbps의 인터넷 연결이 있으며 안정적입니다. 언제든지 연결을 되돌릴 수 있지만 git clone 프로세스가 이미 작동을 멈추고 다시 실행할 수있는 방법이 없습니다. 더 고장 방지 git clone 다운로드를 할 수있는 방법이 있습니까?

내가 생각한 한 가지 옵션은 다른 사람의 .git 디렉토리를 다운로드하는 것이지만 다른 사람에게 지나치게 의존적이며 가장 좋은 해결책은 아닙니다.


아직 준비가되지 않았다고 생각합니다. 거기에 오래된 GSoC 페이지 원하는 기능을 구현하는 계획이. 최선의 방법은 디렉토리로 다운로드하는 것이 좋습니다. 다른 프로토콜을 통해 다운로드를 다시 시작할 수 있다고 가정합니다.

재시작 가능한 클론

대규모 저장소 (예 : KDE, Open Office, Linux 커널)를 복제 할 때는 현재 중단 된 복제본을 다시 시작할 수있는 방법이 없습니다. 작은 파이프 끝에있는 사용자가 데이터를 다운로드하는 데 상당한 시간이 걸릴 수 있으며 복제가 중간에 중단 된 경우 사용자는 현재 처음부터 다시 시작하고 다시 시도해야합니다. 일부 사용자의 경우 큰 저장소를 복제하지 못할 수 있습니다.

목표 : git-clone이 기본 git : // 프로토콜을 통해 이전에 실패한 다운로드를 자동으로 다시 시작하도록 허용합니다. 언어 : C 멘토 : Shawn Pearce 제안 : gmane의 Shawn Pearce


최신 정보

git clone --depth=1다른 답변 중 하나의 얕은 복제 ( ) 제안과 함께 공급자와 통신 할 수있는 누군가가 당신을 위해 베어 리포지토리를 만들 수 있다면 도움이 될 수 있습니다. Bare 저장소를 전체 저장소 쉽게 변환 할 수 있습니다 . 또한 얕은 클론이 항상 도움이되지 않을 수 있으므로 해당 답변의 주석을 읽으십시오.


생각 나는 두 가지 솔루션 (또는 차선책 )은 다음과 같습니다.

  • 사용 얕은 클론git clone --depth=1, 다음 심화 이 복제 사용 git fetch --depth=N증가와 함께, N을 . git fetch --unshallow(1.8.0.3부터)를 사용 하여 나머지 모든 개정판을 다운로드 할 수 있습니다 .

  • 누군가에게 태그가 붙은 릴리스까지 묶어 달라고 요청 하십시오 ( git-bundle (1) 맨 페이지 참조). 번들 자체는 일반 파일이며, 이력서 지원이있는 HTTP / FTP, BitTorrent, rsync 등을 통해 어떤 방식 으로든 다운로드 할 수 있습니다. 번들에서 복제본을 생성하고 구성을 수정하며 공식 LibreOffice 저장소에서 추가 페치를 수행 할 수 있습니다. .


이 방법은 타사 서버를 사용합니다.

먼저, 그런 git clone --bare다음 rsync -v -P -e ssh user@host:repo.git .Windows에서 msys를 사용할 수 있습니다.


"다른 사람의 .git 디렉토리를 다운로드"할 수 있지만 다른 사람이 공식 저장소 자체가 될 수 있습니다. LibreOffice 리포지토리는 http를 통해 사용할 수 있습니다 (예 build.git: http://anongit.freedesktop.org/git/libreoffice/build.git/) ( 전체 목록 http://cgit.freedesktop.org/libreoffice/ 참조) . http URL은 각 저장소 페이지의 맨 아래에 있습니다.

이 http URL에서 볼 수있는 것은 .git디렉토리 (실제로는 디렉토리에 있는 것만 있는 "베어"저장소)에 지나지 않습니다 .git. git://프로토콜 서버 ( git daemon) 와 동일한 디렉토리 입니다. 웹 다운로더 (예 wget -m -np:)를 사용하여 이러한 디렉토리의 사본을 작성하는 경우 사본에서 복제 할 수 있으며 http 저장소에서 직접 복제 한 것처럼 작동합니다.

따라서 할 수있는 일은 다음과 같습니다. 각 리포지토리마다 좋아하는 웹 다운로더 (복수 다운로드 재개와 관련된 모든 문제를 처리)와 함께 사본을 가져 와서 해당 사본에서 복제하십시오. 업데이트하려면 좋아하는 웹 다운로더를 다시 사용하여 복사본을 업데이트하고 해당 복사본에서 가져옵니다. 이제 복제본과 업데이트는 좋아하는 웹 다운로더와 마찬가지로 잘못된 연결에 내성을 갖습니다.


" 캐리어 비둘기와 SD 카드 묶음의 대역폭을 과소 평가하지 마십시오 "는이 답변의 현대적인 형태 일 것입니다. 그것을 타르 고, 낡고 cp -a, 무엇이든간에, 그 빌어 먹을 것을 우송하십시오. 썸 드라이브를 SASE에 놓는 데 2 ​​분의 시간이 걸리는 사람을 찾으십시오. 그들이 당신을 위해 그것을 할 수도 있습니다.


git clone구성 요소 부분으로 분류하고 git reset파일 다시 다운로드를 방지 하는 사용 합시다 .

git clone실행할 처음 몇 가지 작업은

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

위 단계를 수동으로 실행하고 올바르게 완료되었다고 가정하면 필요한만큼 다음을 실행할 수 있습니다.

git checkout --force <branch>

실행 될 때마다 모든 파일을 체크 아웃하지만 파일을 다시 다운로드 할 필요가 없으므로 시간을 절약 할 수 있습니다.


타사 서버에 액세스 할 수 있으면 해당 서버를 복제 한 다음 복사 할 수 있습니다.


git clone --depth <Number> <repository> --branch <branch name> --single-branch

이 명령은 나를 도와줍니다 ( Nicola Paolucci 에게 감사드립니다 )

예를 들어

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

이 문제도 저를 물었습니다. 내 경우에는 해결 방법이 있습니다. 귀하의 경우에는 적용되거나 적용되지 않을 수 있습니다.

때로는 원격 시스템에서 git 작업을 시작하기 위해 휴대 전화를 사용하고 있습니다. 물론 Wi-Fi가 끊어지면 세션이 종료되고 git은 복구하지 않고 전체 복제 작업을 중단합니다. 그러나 원격 시스템에서 git master 로의 인터넷 연결이 안정적이므로 복제를 중지 할 필요가 없습니다. 터미널 세션에서 클론을 분리하는 상식 만 있으면됩니다. screen / tmux 또는 nohup / daemon을 사용하여 수행 할 수 있습니다. 제 경우에는 라이브웨어 오작동입니다.


CNTRL Z를 사용하여 복제를 중지하십시오. 터미널을 닫지 말고 시스템 / 노트북을 최대 절전 모드로 설정 한 다음 fg 명령으로 나중에 계속하십시오. repo frm github를 복제하려고 할 때 오늘이 같은 문제에 직면했습니다. 이것은 나를 위해 시간 절약으로왔다.


클론 / 깊이 기반 답변을 기반으로-몇 줄의 bash가 쉽게 완료됩니다 ...

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


Use a git proxy, such as ngitcached or git-proxy.


You can try to use mercurial with the hg-git extension.

If that doesn't work you can can use git fetch <commit-id> to fetch only parts of a remote git repository (you can fetch into an empty git repository, there is no need to create it with clone). But you might to correct the branch configuration (=create local and remote tracking branches) when you use this approach.


if we assume server's have good band-wide (and you have a server) another answer is to:

  1. create your own server using Server-Side Git Wrapper's
  2. clone it in your server
  3. Zip it using Server-Side Zip Archiver's
  4. download it from and with Server-Side Resume support

but this only works with very basic Web-development experience ;) and also you need git.exe in your sever


Same problem here - I have a really flaky internet connection with often not more than 10-15 kb/sec :-P

For me the wget way worked very well. Go to the repository site where the green button "clone or download" is, klick it and copy the link of the ZIP download option.

Then insert the link to the wget command:
wget -c -m -np https://github.com/your/repository/archive/master.zip

Works like a charm...


I would like to put my 5 cents here. This is actually what helped me to solte this issue

  • turn off compression
  • increase http.postBuffer
  • do a partial clone
  • navigate to the cloned directory and fetch the rest of the clone
  • pull the rest
git config --global core.compression 0
git config --global https.postBuffer 524288000
git clone  <your_git_http_url_here> --depth 1
git fetch --unshallow 
git pull --all

This helped me to clone ~3GB repo over the 8Mbps adsl connection, of course I had to perform fetch and pulls few times, but still ...


the best workaround that worked for me:

i faced the same issue with a bad internet connection. So i came up with the following solution:

Created a small php file on my server to download the package as a zip file:

<?php
$url = "https://codeload.github.com/CocoaPods/Specs/zip/master";
file_put_contents("coco.zip", fopen($url, 'r'));
?>  

<a href="coco.zip">coco.zip</a>

then download the zip file using any download manager that supports resume

참고URL : https://stackoverflow.com/questions/3954852/how-to-complete-a-git-clone-for-a-big-project-on-an-unstable-connection

반응형