programing

불안정한 연결에서 대규모 프로젝트에 대한 깃 클론을 완료하는 방법은 무엇입니까?

skycolor 2023. 7. 1. 08:13
반응형

불안정한 연결에서 대규모 프로젝트에 대한 깃 클론을 완료하는 방법은 무엇입니까?

LibreOffice 코드베이스를 복제하려고 하지만 현재 약 300kbps의 인터넷 연결이 있으며 안정적이지 않습니다.언제든지 연결을 되돌릴 수 있지만 Git Clone 프로세스가 이미 작동을 중지하고 다시 실행할 방법이 없습니다.고장에 강한 깃클론을 다운로드할 수 있는 방법이 있습니까?

내가 생각한 한 가지 옵션은 다른 사람의 .git 디렉터리를 다운로드하는 것이지만, 그것은 다른 사람에게 지나치게 의존적이고 나에게 가장 좋은 해결책인 것 같지 않습니다.

생각나는 두 가지 솔루션(또는 해결 방법)은 다음과 같습니다.

  • 얕은 클론을 사용합니다. git clone --depth=1그런 다음 사용하여 이 클론을 심화시킵니다.git fetch --depth=NN이 증가함에 따라사용할 수 있습니다.git fetch --unshallow 이후) 개정판을 (1.8.0.3 파일).

  • 다른 사용자에게 태그가 지정된 릴리스로 번들하도록 요청합니다(git-bundle(1) manpage 참조).번들 자체는 일반 파일로, 재개 지원이 있는 HTTP/FTP, BitTorrent, rsync 등을 통해 원하는 방식으로 다운로드할 수 있습니다.그런 다음 번들에서 클론을 생성하고 구성을 수정하며 공식 LibreOffice 저장소에서 추가 가져오기를 수행할 수 있습니다.

아직 준비가 안 된 것 같아요.원하는 기능을 구현하기 위해 계획된 오래된 GSoC 페이지가 있습니다.제 최선의 방법은, 당신이 제안한 것처럼, 그것을 디렉토리로 다운로드하는 것입니다.다른 프로토콜을 통해 다운로드를 재개할 수 있다고 생각합니다.

다시 시작할 수 있는 복제

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

목표: git-clone이 네이티브 git:// 프로토콜을 통해 이전에 실패한 다운로드를 자동으로 재개할 수 있도록 합니다.언어:C 멘토:숀 피어스 제안자: 숀 피어스 옹 맨


갱신하다

복제와 .git clone --depth=1) 다른 답변 중 하나에서 제안합니다. 제공자와 통신할 수 있는 경우 누군가가 사용자를 위해 빈 저장소를 만들 수 있다면 도움이 될 수 있습니다.기본 리포지토리를 전체 리포지토리로 쉽게 변환할 수 있습니다.또한 얕은 복제본이 항상 도움이 되지는 않을 수 있으므로 해당 답변의 설명을 읽으십시오.

이 메서드는 타사 서버를 사용합니다.

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

"반송자 비둘기와 SD 카드 묶음의 대역폭을 절대 과소평가하지 마십시오"가 이 답변의 현대적인 형태일 것입니다.타라, 그냥 오래된 것.cp -a뭐든 간에, 그리고 그 빌어먹을 것을 우편으로 보내세요.썸 수 는 SASE입니다.연락처를 찾아보세요, 거기서, 그들은 심지어 당신을 위해 그것을 할 수도 있습니다.

저는 여기에 제 5센트를 넣고 싶습니다.이것이 실제로 제가 이 문제를 해결하는 데 도움이 되었습니다.

  • 압축 해제
  • http.postBuffer 증가
  • 부분 복제 수행
  • 복제된 디렉토리로 이동하고 나머지 복제본 가져오기
  • 나머지는 당겨요
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

이를 통해 8Mbps adsl 연결을 통해 최대 3GB 레포를 복제할 수 있었습니다. 물론 fetch and pull을 몇 번 수행해야 했지만...

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

볼 수 있는 은 "http URL"에 ..gitdirectory는 " ("스트턴", "▁the,▁directory▁you▁what▁(▁repos다▁only있bare습니actually"에서 찾을 수 것만 있는 입니다..git디렉토리)를 선택합니다.▁the▁다▁same▁directory▁is▁it▁the니의 서버와 동일한 디렉토리입니다.git:// (프로토콜git daemon가 읽습니다.는 읽을 것입니다.하여 이러한 예:wget -m -np할 수 에서 직접

따라서 각 리포지토리에 대해 즐겨찾는 웹 다운로더(손상된 다운로드를 재개하는 데 필요한 모든 문제를 처리함)로 해당 리포지토리의 복사본을 가져와 해당 복사본에서 복제할 수 있습니다.업데이트를 원하는 경우 즐겨찾는 웹 다운로드 프로그램을 다시 사용하여 복사본을 업데이트한 후 해당 복사본에서 꺼냅니다.이제 클론 및 업데이트는 즐겨찾는 웹 다운로드 프로그램과 마찬가지로 연결 불량에 대한 저항력이 있습니다.

버퍼 크기를 늘리면 이 문제에 도움이 됩니다.단계를 따라가면 됩니다.

  1. 또는 및 Git Bash 사용cdrepo를 복제할 합니다.

  2. 압축을 0으로 설정

    git config --global core.compression 0
    
  3. postBuffer크기

    git config --global http.postBuffer 1048576000
    
  4. maxRequestBuffer크기

    git config --global http.maxRequestBuffer 100M
    
  5. 이제 복제 시작

    git clone <repo url>
    
  6. 복제가 완료될 때까지 기다립니다.

좀 해요.git clone구성 요소 부분으로 내려가 사용합니다.git checkout파일 재전송을 방지합니다.

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

이 명령은 나를 도와줍니다 (니콜라 파올루치 덕분입니다)

예를들면

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

타사 서버에 액세스할 수 있는 경우 해당 서버를 복제한 후 복사할 수 있습니다.

gitcached 또는 git-proxy와 같은 git 프록시를 사용합니다.

이 문제도 저를 괴롭혔습니다.제 경우에는 해결책이 있습니다.그것은 당신의 경우에 적용될 수도 있고 적용되지 않을 수도 있습니다.

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

여기서도 같은 문제가 발생합니다 - 저는 10-15kb/sec 이하의 인터넷 연결이 매우 불안정합니다 :-P

나에게 그 겟 방법은 매우 잘 작동했습니다.

녹색 "복제 또는 다운로드" 단추가 있는 리포지토리 사이트로 이동한 후 클릭하여 ZIP 다운로드 옵션의 링크를 복사합니다.

그런 다음 링크를 삽입합니다.wget명령:

wget -c -m -np https://github.com/your/repository/archive/master.zip

매력적으로 작동하는...

CNTRLZ를 사용하여 복제를 중지합니다.터미널을 닫지 않고 시스템/노트북을 최대 절전 모드로 전환한 다음 fg 명령으로 나중에 계속합니다.저는 오늘 github에서 보고서를 복제하는 동안 이와 같은 문제에 직면했습니다.이것은 저에게 시간을 절약해 주는 것이었습니다.

서버의 대역폭이 양호하고 서버가 있다고 가정하면 다음과 같은 대답을 할 수 있습니다.

  1. 서버측 Git Wrapper를 사용하여 자신의 서버를 만듭니다.
  2. 서버에서 복제
  3. 서버Zip Archiver를 사용하여 압축
  4. 서버Resume 지원 및 에서 다운로드

그러나 이것은 매우 기본적인 웹 개발 경험에서만 작동합니다 ;) 그리고 또한 당신은 필요합니다.git.exe당신이 젊었을 때에

가장 효과적인 해결 방법은 다음과 같습니다.

저는 인터넷 연결 불량으로 같은 문제에 직면했습니다.그래서 저는 다음과 같은 해결책을 생각해냈습니다.

패키지를 zip 파일로 다운로드하기 위해 서버에 작은 php 파일을 만들었습니다.

<?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>

그런 다음 재개를 지원하는 다운로드 관리자를 사용하여 zip 파일을 다운로드합니다.

당신은 hg-git 확장자와 함께 수은을 사용해 볼 수 있습니다.

그래도 안 되면 당신은 사용할 수 있습니다.git fetch <commit-id>원격 Git 저장소의 일부만 가져오려면(빈 Git 저장소로 가져올 수 있으며 클론을 사용하여 만들 필요가 없습니다.그러나 이 방법을 사용할 때는 분기 구성(=로컬 및 원격 추적 분기 생성)을 수정해야 할 수도 있습니다.

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

반응형