2013-05-24 4 views
1

나는 리눅스 커널 저장소를 복제하고있다. 저장소가 너무 커서 네트워크가 너무 느려서 한꺼번에 복제 할 수 없습니다. 일주일 내로 컴퓨터를 켜 놓을 수 있습니다.작은 조각을 복제하는 방법

복제 작업이 중간에 중단되면 진행률이 손실됩니다. 어떻게하면 git 저장소를 부분적으로 복제 할 수 있습니까?

+1

"개별적으로"는 무엇을 의미합니까? 무엇부터, 무엇으로부터 분리합니까? – djechlin

+0

이것이 속임수라고 생각합니다. - http://stackoverflow.com/questions/9268378/how-do-i-clone-a-large-git-repository-on-an-unreliable-connection – djechlin

+0

git : // git. kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git는 모든 이전 버전의 전체 트리입니다. git : //github.com/torvalds/linux.git는 최신 버전 일뿐입니다. 훨씬 적은 데이터. * bittorrent * 등을 통해 베어 리포지토리의 버전을 구할 수 있습니다. –

답변

3

복제를 다시 시작할 수 없습니다. 중단되면 다시 시작해야합니다. 이 그래도 해결의 몇 가지가 될 수 있습니다

당신은 즉 git clone --depth=1, 당신은 git fetch --depth=N을 사용하여이 저장소를 심화 할 수 얕은 복제를 사용할 수 증가 N.과 함께하지만 부인은 나 자신을 해본 적이있다.

다른 옵션은 git-bundle 일 수 있습니다. 번들 자체는 하나의 파일로, 이력서 지원 (BitTorrent, rsync 또는 다운로드 관리자 사용)을 통해 HTTP 또는 FTP를 통해 다운로드 할 수 있습니다. 누군가 당신을 위해 번들을 만든 다음 그것을 다운로드하고 거기에서 클론을 생성 할 수 있습니다. 구성을 수정하고 원래의 repo에서 다음을 가져옵니다.

+0

'git fetch'로 깊이를 늘리는 데 대한 좋은 정보 – Shahbaz

0

git clone --depth 100은 마지막 100 개의 커밋 만 가져옵니다. 당신이 실제로 원하는 모양 일반적으로

는 지원되지 않습니다 ".이 아직 존재하지 않는"

모든 종류의 말

그러나 일부 큰 repos도이 문제를 해결하기 위해 repo (이 아닌 git-layer clone)를 검색하는 "멍청한"http 방법을 호스팅합니다. Linux 커널이있을 수 있습니다.

+0

그 얕은 복제본을 가져올 수는 없으며, 그로부터 밀어 넣을 수 없습니다. 내가 얻은 것은 당신이 스냅 샷과 몇 개의 개정판을 얻는 것을 제외하고는 쓸모가 없다는 것입니다. 더 이상 얕지 않을 때까지 커밋을 계속 깊게 할 수 있을지 궁금합니다. 또한 wget을 사용하는 것은 좋은 경험이 아닙니다. 내 경험에 따르면 다운로드 한 파일을 절대 확인할 수 없기 때문에 다시 다운로드해야하는 경우도 있습니다. – dspjm

+0

@dspjm, 나는이 문제에 대해 몇 시간 전에 토론했다. 외관상으로는, 문서는 구식이고 사실 ** 당신은 ** 얕은 복제물을 가져 오거나 가져올 수 있습니다. 시도해 볼 수는 있지만 과거의 토론 결과는 효과가 있었고 구식 인 문서 일뿐입니다. – Shahbaz

+0

@Shahbaz 좋아, 알겠다. – dspjm

2

당신이 따로 무엇을 의미하는지 모르겠지만, git clone은 repo의 일부만 복제 할 수있는 방법이 없으므로 전체 repo를 복제하려고합니다.

그러나 만약 당신이 하나의 단지 깊이와 얕은 복제를 할 수있는 커밋 및/또는 단지 마지막은 master 브랜치의 커밋 사로 잡고 하나의 지점

git clone --depth=1 --single-branch --branch master 

.

+0

내 표현에 죄송합니다. 간헐적으로 말해야 할지도 모르겠다. – dspjm

0

복제본은 실제로 일련의 작은 단계입니다. 간단히 말해, 먼저 참조 목록을 다운로드 한 다음 해당 참조에 대한 팩 파일 또는 느슨한 객체 파일을 검색합니다. 클론은 일반적으로 하나의 큰 팩 파일을 전송하기 때문에 자동으로 중단 된 클론을 다시 시작할 방법은 없습니다. 그러나 일부 작업 및 연구에서는 시간이 지남에 따라 일련의 끌어 오기를 수행하는 사람과 마찬가지로 수동으로 작은 팩을 요청할 수 있어야합니다.

자세한 내용은 at the git book chapter on transfer protocolsthe git fetch-pack command을 참조하십시오. 또한 자식의 소스 코드는 github에서 사용할 수 있으므로 직접 이력서 옵션을 추가하거나 적어도 내부적으로 복제가 어떻게 수행되는지 아이디어를 얻을 수 있습니다.

+0

나중에 조금씩 소스를 시도해 볼 수 있습니다. 힘내는 정말 대단히 복잡한 시스템이다. 그러나 귀하의 성명서에 따르면, 우리는 우리가 할 수있는 말은해야한다 - 깊이와 그 자식 페치 - 팩을 사용하여 - 남은 자식 Repo의 나머지 부분은? – dspjm