GitHub 저장소에서 단일 폴더 또는 디렉토리 다운로드


1105

GitHub에서 호스팅되는 원격 Git 저장소에서 특정 폴더 또는 디렉토리 만 다운로드하려면 어떻게해야합니까?

GitHub 저장소의 예제가 여기에 있다고 가정 해보십시오.

git@github.com:foobar/Test.git

디렉토리 구조 :

Test/
├── foo/ 
│   ├── a.py
│   └── b.py   
└── bar/
    ├── c.py
    └── d.py

foo 폴더 만 다운로드 하고 전체 테스트 프로젝트를 복제하지 않습니다.


4
-이 사용 SVN 체크 아웃을위한 쉘 스크립트를 작성 github.com/Decad/github-downloader
클랜 쿡

390
누군가 "공식적인"웹 인터페이스 솔루션이없는 이유를 설명해 줄 수 있습니까? 구현하기는 쉽지만 매우 유용한 기능인 것 같습니다.
Alexander-복직 자 Monica Monica

3
KinoLien의 gitzip을 사용하여 크롬 확장 프로그램을 개발했습니다. github.com/charany1/GHSDD
charany1

3
@janos answer 참조 svn 대안은 최고, 인증 없음, 등록 없음, 제한 없음, 플러그인 없음
stackdave

5
나는 이것을 위해 가벼운 솔루션을 만들었고 ( download-directory.github.io ) 그것은 Refined GitHub에
fregante

답변:


1034

2016 년 9 월 업데이트 : 커뮤니티에서 생성 한 몇 가지 도구가 있습니다.


Git은 이것을 지원하지 않지만 Github는 SVN을 통해 지원합니다. Subversion으로 코드를 체크 아웃하면 Github은 기본적으로 repo를 백엔드의 git에서 subversion으로 변환 한 다음 요청 된 디렉토리를 제공합니다.

이 기능을 사용하여 특정 폴더를 다운로드하는 방법은 다음과 같습니다. 유명한 자바 스크립트 라이브러리 lodash를 예로 사용하겠습니다 .

  1. 다운로드하려는 폴더로 이동하십시오 . 하자의 다운로드 /test에서 master분기합니다. github repo URL 예제

  2. subversion의 URL을 수정하십시오 . 교체 tree/master와 함께 trunk.

    https://github.com/lodash/lodash/tree/master/test

    https://github.com/lodash/lodash/trunk/test

  3. 폴더를 다운로드하십시오 . 커맨드 라인으로 가서 SVN으로 폴더를 가져옵니다.

svn checkout https://github.com/lodash/lodash/trunk/test

Github에서 더 큰 리포지토리를 변환하는 데 최대 30 초가 걸리므로 활동이 즉시 나타나지 않을 수 있으므로 인내심을 가지십시오.

전체 URL 형식 설명 :

  • master지점에 관심이 있다면 trunk대신 사용하십시오. 전체 경로는trunk/foldername
  • foo지점에 관심이 있다면 branches/foo대신 사용하십시오. 전체 경로는 다음과 같습니다branches/foo/foldername
  • 팁 : svn ls원하는 경우 다운로드하기 전에 사용 가능한 태그 및 분기를 보는 데 사용할 수 있습니다

그게 다야! Github 변경 사항 커밋 및 푸시 지원을 포함하여 더 많은 하위 버전 기능 도 지원합니다.


162
신난다, 바로 교체 tree/master와 함께 trunk당신이 특정 폴더를 얻을 수 있습니다.
Sérgio Michels

6
user1146881 @ 및 SérgioMichels @ 감사합니다, 당신은 교체해야 tree/master와 함께 trunk. 이 정보는 답변으로 추가해야합니다.
baptx

8
svn exportSubversion 작업 복사본을 원하지 않기 때문에 이것을 사용하도록 수정했습니다 . 그런 다음 Git에 결과 폴더를 추가했습니다. (어쨌든 큰 디렉토리 트리 조각을 잃어 버렸으므로 포크 포크에서 내보냈습니다.)
Grault

5
@ num3ric- 답장을 늦게 미안하지만 "trunk"를 "branches / yourbranch"로 대체 할 수 있어야합니다.
nick

2
@ElijahLynn 편집 해 주셔서 감사합니다. 해당 정보를 포함시켜야합니다! 그래도 2 가지-편집 내용을 수락했지만 내 자신의 일부를 롤백했습니다 (어쨌든이 작업을 수행하는 것이 의미가 너무 지저분 해졌습니다). 또한 나는 변경된 branch경로 branches내가 생각하는 올바른이다; 그렇지 않은 경우 계속해서 다시 변경하십시오.
nick

567

이 기능에 대한 두 가지 옵션 :

옵션 1 : GitZip 브라우저 확장

크롬 확장 , Firefox 애드온

용법:

  1. 모든 GitHub repos 페이지에서.
  2. 필요한 항목의 빈 부분을 두 번 클릭하십시오.
  3. 오른쪽 하단에서 다운로드 버튼을 클릭하십시오.
  4. 진행 대시 보드를보고 브라우저 트리거 다운로드를 기다리십시오.
  5. ZIP 파일을 가져옵니다.

토큰 받기 :

  1. 브라우저에서 GitZip Extension 아이콘을 클릭하십시오.
  2. "Get Token"옆의 "Normal"또는 "Private"링크를 클릭하십시오.
  3. Github 인증 페이지에서 GitZip 권한을 승인하십시오.
  4. 처음의 저장소 페이지로 돌아갑니다.
  5. 계속 사용하십시오.

옵션 2 : Github gh-page

GitHub API 및 FileZaver.js 라이브러리 인 JSZip을 사용하는 http://kinolien.github.io/gitzip

1 단계 : 오른쪽 상단의 필드에 github url을 입력하십시오.
2 단계 : 다운로드 압축을 위해 Enter 키를 누르거나 다운로드를 클릭하거나 하위 폴더 및 파일 목록을 보려면 검색을 클릭하십시오.
3 단계 : "zip 파일 다운로드"또는 "파일 가져 오기"버튼을 클릭하여 파일을 가져옵니다.

대부분의 경우 Github Trees API 제한으로 인해 폴더에 1,000 개가 넘는 파일이 포함되어있는 것을 제외하고는 정상적으로 작동합니다. ( Github API # Contents 참조 )

또한 GitHub 계정이 있고이 사이트에서 "get token"링크를 사용하는 경우 개인 / 공개 저장소를 지원하고 속도 제한을 업그레이드 할 수 있습니다.


5
이것은 굉장하지만 굉장한 것처럼 보입니다. 수요가 당신의 속도 제한을 넘어서서 더 이상 작동하지 않습니다. ;-) GitHub oAuth로 로그인 할 수 있다면 좋을 것입니다. 요청이 승인 된 이후의 한도
hobailey

3
@hobailey 이제 액세스 토큰을 가져 속도 제한을 높이고 개인 저장소에 액세스 할 수 있습니다.
키노

1
@MYounas Github API Doc의 OAuth, Trees, Blobs 챕터에 대해 알아보십시오 . gitzip 구현을 위해 FileSaver.js js 라이브러리 인 JSZip도 사용합니다.
키노

1
누구나 크롬 확장 프로그램에 관심이 있습니까?
goldylucks

4
이것은 실제 github 웹 사이트에 추가해야하며 매우 유용합니다.
굴림

508

DownGit > URL 입력> 다운로드로 이동 하십시오!

이제 GitHub 공용 디렉토리 또는 DownGit 에서 파일 ( 특히 큰 파일 )에 대해 직접 다운로드 하거나 다운로드 링크 를 만들 수 있습니다 ! 다음은 간단한 데모입니다.


다운 깃


다운로드 한 파일의 속성 세부 사용법을 구성 할 수도 있습니다 .


2
Bro, 나는 당신이 만든 DownGit과 같은 프로젝트를 만드는 방법을 의미합니다.
Muhammad Younus

12
기본 방법은 -1 . 디렉토리 링크 ( angular-route 사용)를 가져옵니다 . 2. GitHub API 로 이동하여 3. 디렉토리를 검색하고 모든 파일을 다운로드합니다. 4. zip 파일을 만듭니다 ( jszip 사용 했습니다 ) 파일로 저장하십시오 ( 이를 위해 파일 보호기 사용 ). 명확한 이해를 위해 내 프로젝트를 살펴볼 것을 제안합니다 .
Minhas Kamal

1
자세한 지침은 고맙습니다 Bro, 튜토리얼이나 링크를 제안하면 대단히 감사합니다.
Muhammad Younus

5
멋지지만 wget과 같은 자동화 된 도구로는 작동하지 않습니다
Ring

1
github.com/dssg/hitchhikers-guide/tree/master/curriculum/…downloaded 25 of 25 files 에서 다운로드를 시도하면 중단됩니다 .
Wassadamo

164

이있는 경우 다음 을 수행 svn하는 svn export데 사용할 수 있습니다 .

svn export https://github.com/foobar/Test.git/trunk/foo

URL 형식을 확인하십시오.

  • 기본 URL은 https://github.com/
  • /trunk 끝에 추가

를 실행하기 전에 먼저 다음 svn export을 사용하여 디렉토리의 내용을 확인하는 것이 좋습니다.

svn ls https://github.com/foobar/Test.git/trunk/foo

여전히 작동합니까? TortiseSVN으로 시도했지만 자격 증명을 제공하라는 권한 오류가 발생합니다.
john

2
@john 이것이 너무 늦어서 많은 도움을 줄 수는 없지만 GitHub 계정에서 2 단계 인증을 사용하도록 설정 했습니까? 그렇다면, 내가 생각 나는 어딘가에 당신이 (당신은 GitHub의 설정에서 찾아야합니다) 암호에 대한 사전 생성 된 키를 사용해야합니다 읽어 보시기 바랍니다.
nick

1
URL 형식과 관련하여 .git확장명을 유지할 수 있습니다 . 전체 프로젝트 링크를 사용 svn ls하고 프로젝트 전체 경로를 사용하여 시작할 수 있습니다 . 예 : svn ls https://github.com/RobTillaart/Arduino.git. 하나의 폴더 만 내보내려면 /trunk다음과 같이 원하는 경로를 추가하면 됩니다 svn export https://github.com/RobTillaart/Arduino.git/trunk/libraries/DHTlib. 프로젝트 경로를 그대로 유지하는 것이 더 쉽습니다.
jgrocha

@jgrocha 2013 년에 그 방식으로 작동했는지 잘 모르겠지만, 이제는 감사합니다. 게시물
janos

1
예 :에서 콘텐츠를 다운로드하려면을 https://github.com/miguelgrinberg/python-socketio/tree/master/examples/wsgi실행하십시오 svn export https://github.com/miguelgrinberg/python-socketio.git/trunk/examples/wsgi. 라는 디렉토리 wsgi가 현재 작업 디렉토리 아래에 생성됩니다. 소스 파일 만, 다른 것은 없습니다. 아니요 .git, 서브 버전 관련 파일이 없습니다.
Rockallite

74

일반 자식 리포지토리 :

기록을 사용하여 리포지토리를 복제하지 않고 파일을 다운로드하려면이 작업을 수행 할 수 있습니다 git-archive.

git-archivegit 저장소의 압축 된 zip 또는 tar 아카이브를 만듭니다. 그것을 특별하게 만드는 것들 :

  1. git 저장소에서 아카이브 할 파일 또는 디렉토리를 선택할 수 있습니다.
  2. .git/폴더 또는 폴더가 실행되는 저장소에 추적 되지 않은 파일 이나 폴더를 보관하지 않습니다 .
  3. 특정 브랜치, 태그 또는 커밋을 보관할 수 있습니다. git으로 관리되는 프로젝트는 종종 이것을 사용하여 사용자가 다운로드 할 수있는 프로젝트 버전 (베타, 릴리스, 2.0 등)의 아카이브를 생성합니다.

docs/usagessh와 연결된 원격 저장소에서 디렉토리 의 아카이브를 작성하는 예 :

# in terminal
$ git archive --format tar --remote ssh://server.org/path/to/git HEAD docs/usage > /tmp/usage_docs.tar

이 블로그 게시물git 문서에 대한 추가 정보 .

GitHub Repos에 대한 참고 사항 :

GitHub는 git-archive액세스를 허용하지 않습니다 . ☹️


2
git archive --format tar형식은 tar.gz가 아니라 tar입니다.
出 羽 和 之

이것이 최선의 답변이어야합니다
Felipe Costa

2
이것이 가장 좋은 대답이라고 생각하지만 git archive 명령은 https 프로토콜에서 작동하지 않습니다.
bitfox

타르 tar.gz의에서 편집 확장을 @yukihane, 희망 영업 이익이 함께 내장입니다
미하이

36

GitHubFolderDownloader 라는 오픈 소스 프로젝트를 만들었습니다 . 전체 리포지토리를 복제하거나 다운로드하지 않고도 리포지토리의 단일 폴더를 다운로드 할 수 있습니다.


GitHub에서 폴더를 다운로드하기 만하면됩니다. 원하는 폴더를 다운로드하려면 Github 토큰 만 있으면됩니다 . 더 많은 지지자들은이 답변에 어느 정도 두드러지게 보일 수 있습니다.
Alex Essilfie

34

다른 답변에는 아무런 문제가 없지만 처음 으로이 과정을 방황하는 사람들을 위해 단계별 지침을 공유한다고 생각했습니다.

github 저장소에서 단일 폴더를 다운로드하는 방법 (Mac OS X) :

~ 터미널을 열려면 스포트라이트를 클릭하고 터미널을 입력 한 다음 Enter 키를 누르십시오.

  1. Mac에서는 이미 SVN이있을 수 있습니다 (단지 열린 터미널을 테스트하고 "svn" 또는 "which svn" ~ 따옴표없이 입력).
  2. Github에서 : 리포지토리 내 특정 폴더 이름을 클릭하여 리포지토리가 아닌 git 폴더의 Github 경로를 찾으십시오.
  3. 브라우저의 주소 표시 줄에서 경로를 복사하십시오.
  4. 터미널을 열고 다음 을 입력하십시오. svn export
  5. 다음 주소에 붙여 넣기 (예 : https://github.com/mingsai/Sample-Code/tree/master/HeadsUpUI
  6. 단어를 교체하십시오 : tree / master
  7. 단어와 함께 : 트렁크
  8. 파일의 대상 폴더를 입력하십시오 (이 예에서는 대상 폴더를 현재 사용자의 다운로드 폴더 안에 저장합니다)
  9. 여기서 space는 단어가 아닌 스페이스 바입니다 (space) ~ / Downloads / HeadsUpUI
  10. 마지막 터미널 명령은 폴더를 다운로드하는 전체 명령을 보여줍니다 (5 단계와 주소 비교) svn export https://github.com/mingsai/Sample-Code/trunk/HeadsUpUI ~ / Downloads / HeadsUpUI

BTW-Windows 또는 다른 플랫폼에있는 경우 http://subversion.apache.org 에서 subversion (svn)의 바이너리 다운로드를 찾을 수 있습니다 .

~ 단순히 다운로드하는 대신 폴더를 체크 아웃하려면 svn help를 사용하십시오 (tldr : exportcheckout 대체 )

최신 정보

중단 된 다운로드 / 체크 아웃 재개에 대한 의견과 관련하여. 나는 실행하려고 할 것이다 svn cleanup다음 svn update. 추가 옵션을 보려면 SO를 검색하십시오.


1
특정 폴더에서 많은 파일을 다운로드해야하며 다운로드 도중에이 오류가 발생했습니다. svn : E175002 : '/ bgmartins / scripts-parlamento /! svn / vcc / default'의 보고서 : 200 OK ( github.com ) 다운로드를 어떻게 다시 시작할 수 있습니까?
Miguel

나를 위해 일했다. 그 놀라운.
Heath Raftery 2014 년

24

특정 폴더에서 작업하는 사람은 특정 폴더 자체를 복제해야하므로 스파 스 체크 아웃을 사용하여 아래 단계를 따르십시오.

  1. 디렉토리를 작성하십시오.

  2. Git 저장소를 초기화하십시오. ( git init)

  3. 스파 스 체크 아웃을 활성화합니다. ( git config core.sparsecheckout true)

  4. Git에게 원하는 디렉토리를 알려주십시오 (echo 2015 / brand / May (작업하려는 폴더 참조) >> .git/info/sparse-checkout)

  5. 리모컨 추가 ( git remote add -f origin https://jafartke.com/mkt-imdev/DVM.git)

  6. 파일을 가져옵니다 ( git pull origin master)


이 의견이 충분히 공감하지 못했습니다. 제공된 솔루션이 github뿐만 아니라 모든 git 저장소에 적용되는 것처럼 보입니다.
Kalyan

9
그러나 실제로 원하는 것을 수행하지는 않습니다. 여전히 전체 저장소를 복제하지만 일부 폴더는 체크 아웃하지 않습니다.
Chris

해결되었습니다 : stackoverflow.com/questions/4114887/…
JK

이 오류가 발생합니다. 스파 스 체크 아웃은 작업 디렉토리에 항목을 남기지 않습니다.
orangecaterpillar

20

당신은 할 수 없습니다; 각 하위 디렉토리를 개별적으로 체크 아웃 할 수있는 Subversion과 달리 Git은 전체 저장소를 기반으로 작동합니다.

보다 세분화 된 액세스가 필요한 프로젝트의 경우 하위 모듈을 사용할 수 있습니다. 각 하위 모듈은 별도의 Git 프로젝트이므로 개별적으로 복제 할 수 있습니다.

Git 프론트 엔드 (예 : GitHub의 웹 인터페이스 또는 gitweb)는 주어진 폴더를 추출하기위한 인터페이스를 제공하도록 선택할 수 있지만 내 지식으로는 그렇게 할 수는 없습니다 (개별 파일을 다운로드 할 수는 있지만) 폴더에 너무 많은 파일이 포함되어 있지 않은 경우 옵션입니다.)

편집 -GitHub는 실제로 SVN을 통한 액세스를 제공하므로 주석 별로이 작업을 수행 할 수 있습니다. 이 작업을 수행하는 방법에 대한 최신 지침 은 https://github.com/blog/1438-improved-svn-here-to-stay-old-svn-going-away 를 참조 하십시오.


github API를 통해 어떤 것이 있습니까?
g_inherit

14

당신이 진정으로 방금하려면 "다운로드" 폴더가 아니라 "클론" 그것 (개발), 가장 쉬운 간단하게 얻을 수있는 방법 복사본 저장소의 최신 버전을 (및 따라서 내 폴더 / 파일) 전체 저장소를 복제하거나 처음에 git을 설치할 필요없이 GitHub의 원하는 저장소 / 포크 / 분기 / 커밋으로 이동하여 zip 아카이브 (모든 저장소, 포크, 분기, 커밋 등)를 다운로드하는 것입니다 (예 : http(s)://github.com/<user>/<repo>/commit/<Sha1>특정 커밋 후 파일 사본) Downloads오른쪽 상단 근처에있는 버튼을 선택합니다 .

이 아카이브 형식에는 git-repo 마법이 없으며 추적 된 파일 자체 (및 추적 된 경우 몇 개의 .gitignore 파일이 있지만 무시할 수는 있습니다 : p)-코드가 변경되고 원하는 경우 맨 위에 머물러 있으면 수동으로 다시 다운로드해야하며 git 리포지토리로 사용할 수 없습니다.

그것이이 경우에 (즉, "다운로드"/보기 대 "복제"/ 개발) 찾고있는 것인지 확실하지 않지만 그럼에도 불구하고 유용 할 수 있습니다 ...


9
다운로드 링크가 보이지 않으면 하위 리포지토리가 아닌 기본 리포지토리 페이지에 있는지 확인하십시오. 전체 리포지토리의 zip 만 다운로드 할 수있는 것 같습니다. 또한 이 github 도움말 페이지 가 유용 할 수 있습니다.
JD 스미스

2
간편한 포인트 앤 클릭 액세스. 이전 릴리스를 쉽게 얻을 수 있습니다. 다운로드 한 zip에서 원하는 폴더를 꺼내기 쉽습니다. 감사합니다.
앤디 토마스

1
다음 위치에서 다운로드 할 수있는 일반 URL tar.gz:https://github.com/${owner}/${repo}/archive/${hash}.tar.gz
Krisztian

11

2019 년 요약

이 작업을 수동 또는 프로그래밍 방식으로 수행할지 여부에 따라이를 처리하는 다양한 방법이 있습니다.

아래에 요약 된 네 가지 옵션이 있습니다. 더 실습적인 설명을 선호하는 사람들을 위해 YouTube 비디오를 정리했습니다 . GitHub에서 개별 파일 및 폴더 다운로드 .

또한 폴더와 달리 GitHub에서 단일 파일을 다운로드 해야하는 사람들 에 대해 StackOverflow비슷한 답변을 게시했습니다 .


1. GitHub 사용자 인터페이스

  • 리포지토리 홈페이지에 다운로드 버튼이 있습니다. 물론 이것은 전체 저장소를 다운로드 한 후 다운로드 압축을 풀고 필요한 특정 폴더를 수동으로 드래그해야합니다.

2. 타사 도구

  • 이를 처리 할 수있는 다양한 브라우저 확장 프로그램과 웹 앱이 있으며 DownGit 이 그 중 하나입니다. GitHub URL을 폴더 (예 :)에 붙여 https://github.com/babel/babel-eslint/tree/master/lib넣고 "Download"버튼을 누르십시오.

3. Subversion

  • GitHub는 git-archive (특정 폴더를 다운로드 할 수있는 git 기능)를 지원하지 않습니다. 그러나 GitHub는 다양한 Subversion 기능을 지원하며이 기능 중 하나를 사용할 수 있습니다. Subversion은 버전 제어 시스템입니다 (git의 대안). Subversion이 설치되어 있어야합니다. 다운로드하려는 폴더의 GitHub URL을 가져옵니다. 그러나이 URL을 수정해야합니다. 저장소에 대한 링크 다음에 "trunk"라는 단어가 있고 중첩 된 폴더의 경로로 끝나기를 원합니다. 즉, 위에서 언급 한 것과 동일한 폴더 링크 예제를 사용하여 "tree / master"를 "trunk"로 바꿉니다. 마지막으로 터미널을 열고 컨텐츠를 다운로드 할 디렉토리로 이동 한 후 다음 명령을 입력하십시오 (URL을 구성한 URL로 대체).svn export https://github.com/babel/babel-eslint/trunk/lib을 입력하고 Enter 키를 누릅니다.

4. GitHub API

  • 이 작업을 프로그래밍 방식으로 수행하려는 경우 필요한 솔루션입니다. 그리고 이것이 실제로 DownGit이 사용하는 것입니다. GitHub의 REST API를 사용 하여 GET 요청을 수행하는 스크립트를 컨텐츠 엔드 포인트에 작성하십시오. 엔드 포인트는 다음과 같이 구성 될 수 있습니다 https://api.github.com/repos/:owner/:repo/contents/:path.. 자리 표시자를 교체 한 후 예제 엔드 포인트는 다음과 같습니다.https://api.github.com/repos/babel/babel-eslint/contents/lib. 그러면 해당 폴더에 존재하는 모든 콘텐츠에 대한 JSON 데이터가 제공됩니다. 데이터에는 컨텐츠가 폴더 또는 파일인지 여부, 파일 인 경우 다운로드 URL 및 폴더 인 경우 API 엔드 포인트 (해당 폴더의 데이터를 가져올 수 있음) 등 필요한 모든 것이 있습니다. 이 데이터를 사용하여 스크립트는 대상 폴더의 모든 컨텐츠를 재귀 적으로 탐색하고 중첩 된 폴더의 폴더를 작성하며 각 폴더의 모든 파일을 다운로드 할 수 있습니다. 영감을 얻으 려면 DownGit의 코드 를 확인하십시오 .

9

다른 구체적인 예 :

URL에서 'iOS Pro Geo'폴더를 다운로드하고 싶은 것처럼

https://github.com/alokc83/APRESS-Books-Source-Code-/ tree / master / % 20Pro % 20iOS % 20Geo

그리고 나는 그렇게 할 수 있습니다

svn checkout https://github.com/alokc83/APRESS-Books-Source-Code-/trunk/%20Pro%20iOS%20Geo

경로에서 트렁크 를 참고

편집 : (Tommie C의 의견에 따라)

예, 체크 아웃 대신 내보내기 를 사용 하면 추가 git 저장소 파일이없는 깨끗한 사본이 제공됩니다.

svn export https://github.com/alokc83/APRESS-Books-Source-Code-/trunk/%20Pro%20iOS%20Geo

편집 : 트리 / 마스터가 URL에 없으면 포크하고 포크 URL에있을 것입니다.


2
체크 아웃 대신 폴더 사본을 다운로드하려면 체크 아웃을 변경하여 내보내십시오.
Tommie C.

답변 해 주셔서 감사합니다. 지점을 뛰어들 수 있습니까? feature1 브랜치의 aaa 폴더를 다운로드하고 싶다
hsafarya

7

이것을 githubdl할 수 있는 Python3 pip 패키지 가 있습니다 * :

export GIT_TOKEN=1234567890123456789012345678901234567890123
pip install githubdl
githubdl -u http://github.com/foobar/test -d foo

프로젝트 페이지는 여기

면책 조항 : 나는이 패키지를 썼다.


6

SVN이 Git보다 나은 몇 안되는 장소 중 하나입니다.

결국 우리는 세 가지 옵션에 중점을 두었습니다.

  1. wget을 사용하여 GitHub에서 데이터를 가져옵니다 (원시 파일보기 사용).
  2. 업스트림 프로젝트가 필수 데이터 서브 세트를 빌드 아티팩트로 공개하게하십시오.
  3. 전체 체크 아웃을 포기하고 사용하십시오. 첫 번째 빌드에서는 큰 인기를 얻었지만 트래픽이 많지 않으면 다음 빌드에서는 그리 번거롭지 않습니다.

4
글쎄, 그것은 Git vs Subversion이 적고 GitHub 플랫 아웃이 git-archive를 허용하지 않는 것 이상입니다. (왜 그런지 알고 싶습니다.)
Rob Howard

6

유닉스 명령에 익숙하다면 특별한 의존성이나 웹 앱이 필요하지 않습니다. repo를 tarball로 다운로드하고 필요한 것만 untar 할 수 있습니다.

예 (fontawesome의 하위 디렉토리에있는 woff2 파일) :

curl -L https://api.github.com/repos/FortAwesome/Font-Awesome/tarball | tar xz --wildcards "*/web-fonts-with-css/webfonts/*.woff2" --strip-components=3
  • 링크 형식에 대한 자세한 내용 : https://developer.github.com/v3/repos/contents/#get-archive-link(zip 파일 또는 특정 지점 / 참조 를 얻는 방법 포함)
  • 경로의 초기 부분 ( */)을 디렉토리와 일치하도록 유지하십시오 . Github은 이름에 commit ref를 포함하는 래퍼 디렉토리를 생성하므로 알 수 없습니다.
  • 경로 --strip-components의 슬래시 양 ( /) 과 같기를 원할 것입니다 (이전 인수).

전체 타르볼을 다운로드합니다. 이것을 피하거나 GitHub 서버에 익숙해지기를 원한다면 다른 답변에 언급 된 SVN 방법을 사용하십시오.


5

디렉토리 트리를 간단하게 다운로드 할 수 있습니다.

git archive --remote git@github.com:foobar/Test.git HEAD:foo | tar xf -

그러나 체크 아웃하고 커밋을 수행하고 다시 되돌릴 수 있다면 그렇게 할 수 없습니다.


1
잘못된 명령 : 'git-upload-archive'foobar / Test.git ''ssh를 사용하여 git : // URL을 복제 한 것으로 보입니다. core.gitProxy 구성 옵션 및 GIT_PROXY_COMMAND 환경 변수가 설정되어 있지 않은지 확인하십시오. 치명적 : 원격 엔드가 예기치 않게 중단되었습니다. tar : tar 아카이브 tar가 아닙니다. tar : 이전 오류로 인해 실패 상태로 종료
g_inherit

@g_inherit이 문제를 재현 할 수 있습니다. 이것이 올바른 방향 일 수도 있지만이 답변은 유효하지 않습니다.
Uli Köhler

많은 다운 투표에도 불구하고 이것은 나를 위해 일한 유일한 조언입니다.
bhaskarc

5

위의 답변을 증폭시키기 위해 실제 GitHub 저장소에서 로컬 디렉토리로의 실제 예는 다음과 같습니다.

svn ls https://github.com/rdcarp/playing-cards/trunk/PumpkinSoup.PlayingCards.Interfaces

svn export https://github.com/rdcarp/playing-cards/trunk/PumpkinSoup.PlayingCards.Interfaces  /temp/SvnExport/Washburn

때로는 구체적인 예가 제안 된 대체를 명확하게하는 데 도움이됩니다.


5

내 상황에서 어떤 대답도 도움이되지 않았습니다. Windows 용으로 개발하는 경우 svn이 없을 수 있습니다. 많은 상황에서 사용자가 Git을 설치했거나 다른 이유로 전체 리포지토리를 다운로드하기를 원하지 않을 수 있습니다. Willem van Ketwich 및 aztack과 같이이 질문에 답변 한 사람들 중 일부는이 작업을 수행하기위한 도구를 만들었습니다. 그러나 도구가 사용중인 언어로 작성되지 않았거나 타사 라이브러리를 설치하지 않으려는 경우 작동하지 않습니다.

그러나 훨씬 쉬운 방법이 있습니다. GitHub에는 GET 요청을 사용하여 단일 파일 또는 전체 디렉토리 내용을 다운로드 할 수있는 API가 있습니다 . 이를 사용하여 디렉토리의 https://api.github.com/repos/:owner/:repo_name/contents/:path모든 파일을 열거하는 JSON 객체를 반환 하는 디렉토리에 액세스 할 수 있습니다 . 열거에는 파일의 원시 내용 인 download_url매개 변수에 대한 링크가 포함됩니다 . 그런 다음 해당 URL을 사용하여 파일을 다운로드 할 수 있습니다.

GET 요청을하는 기능이 필요한 2 단계 프로세스이지만, 모든 플랫폼에서 거의 모든 언어로 구현할 수 있습니다. 파일이나 디렉토리를 얻는 데 사용할 수 있습니다.



4

나는 리눅스를 사용하므로 이것을 ~ / .bashrc에 넣고 even : D $ HOME / .bashrc

git-dowloadfolder(){
a="$1"
svn checkout ${a/tree\/master/trunk}

}

다음으로 셸을 새로 고칩니다.

source ~/.bashrc 

그런 다음 git-downloadfolder blablabla와 함께 사용하십시오 : D


3

루트 액세스 권한이 없거나 git, svn 등을 원하지 않는 CentOS 7 서버에서 작업하므로 github 폴더를 다운로드하는 Python 스크립트를 만들었습니다. https://github.com/andrrrl/github -폴더 다운로더

사용법은 간단합니다 .github 프로젝트에서 관련 부분을 복사하십시오. 프로젝트가 https://github.com/MaxCDN/php-maxcdn/ 이라고 가정 하고 일부 소스 파일 만있는 폴더를 원한다면 다음과 같은 작업을 수행하십시오.

$ python gdownload.py "/MaxCDN/php-maxcdn/tree/master/src" /my/target/dir/
(존재하지 않으면 대상 폴더를 만듭니다)

lxml 라이브러리 가 필요 합니다. 설치 가능 easy_install lxml
루트 액세스 권한이없는 경우 (나와 같이) 다음 내용으로 디렉토리에 .pydistutils.py파일을 만들 수 있습니다 $HOME: [install] user=1 그리고 easy_install lxml그냥 작동합니다 ( https://stackoverflow.com/a/ 33464597/591257 ).


3

5 단계 만 거치면됩니다

1) 여기 에서 SVN 을 다운로드 하십시오 .
2) CMD를 열고 아래와 같이 SVN bin 디렉토리 로 이동하십시오 .

cd %ProgramFiles%\SlikSvn\bin

3)이 디렉토리 URL 을 다운로드하고 싶다고 가정 해 봅시다. 4) 이제 대체하십시오 . 5) 이제이 마지막 명령을 실행하여 동일한 디렉토리에 폴더를 다운로드하십시오.
https://github.com/ZeBobo5/Vlc.DotNet/tree/develop/src/Samples

tree/develop
or
tree/master
trunk

svn export https://github.com/ZeBobo5/Vlc.DotNet/trunk/src/Samples


이것은 개인 repos에서 작동하지 않는 것 같습니다
Sundeep Pidugu

그래, 그것은 개인 respos를 위해 작동하지 않습니다, GIT는 개인 respo를 다운로드하는 것이 좋습니다.
Muhammad Ali

2

GitHub에서 디렉토리를 내보내려면 디렉토리 URL의 "/ tree / master /"를 "/ trunk /"로 바꾸십시오.

예를 들어 다음 URL에서 디렉토리를 내보내려면

https://github.com/liferay/liferay-plugins/tree/master/portlets/sample-hibernate-portlet

다음 명령을 실행하십시오.

svn export https://github.com/liferay/liferay-plugins/trunk/portlets/sample-hibernate-portlet

2

이것에 대한 직접적인 대답은 다음 링크에서 svn을 먼저 거북이하는 것입니다.

https://tortoisesvn.net/downloads.html

설치하는 동안 CLI 옵션을 켜서 명령 행 인터페이스에서 사용할 수 있도록하십시오.

자식 허브 하위 디렉토리 링크를 복사하십시오.

https://github.com/tensorflow/models/tree/master/research/deeplab

나무 / 마스터를 트렁크로 교체

https://github.com/tensorflow/models/trunk/research/deeplab

하고

svn 체크 아웃 https://github.com/tensorflow/models/trunk/research/deeplab

파일은 현재 디렉토리의 deeplab 폴더로 다운로드됩니다.


2

다음과 같은 방법으로 git svn을 사용할 수 있습니다.

git svn clone https://github.com/lodash/lodash/trunk/test

이 방법으로 특히 Windows 사용자를 위해 svn을 설정하는 데 어려움을 겪을 필요가 없습니다.


감사합니다. Windows에서 작동한다고 보증 할 수 있습니다. 그래도 gcloud에서는 작동하지 않습니다. git : 'svn'은 명령이 아닙니다
JOSEPH Blessingh

sudo apt install git-svnWSL을 통해 실행할 때 필요합니다.
Jammy Dodger


1

이 함수를 사용하면 첫 번째 인수는 폴더의 URL이고 두 번째 인수는 폴더를 다운로드 할 위치입니다.

function github-dir() {
    svn export "$(sed 's/tree\/master/trunk/' <<< "$1")" "$2"  
}

1

git clone --filter 힘내 2.19에서

이 옵션은 실제로 서버에서 불필요한 객체 가져 오기를 건너 뜁니다.

git clone --depth 1 --no-checkout --filter=blob:none \
  "file://$(pwd)/server_repo" local_repo
cd local_repo
git checkout master -- mydir/

서버는 다음과 같이 구성되어야합니다.

git config --local uploadpack.allowfilter 1
git config --local uploadpack.allowanysha1inwant 1

v2.19.0에서이 기능을 지원하기 위해 Git 원격 프로토콜이 확장되었지만, 당시에는 서버 지원이 없습니다. 그러나 이미 로컬에서 테스트 할 수 있습니다.

나는 이것을 Git 저장소의 하위 디렉토리 만 어떻게 복제합니까?


1
흥미롭고 공감. 다른 곳에서이 2.19 기능을 언급 했어야한다고 생각합니다.
VonC 2016 년

@VonC 나는 한 번 당신을 이길 것 같아 : stackoverflow.com/questions/2466735/… 그리고 릴리스 XD 이후에만 그것을 보았다! 나는 오늘 2.22 릴리스 후 오늘 인터넷 검색을했습니다. 모든 답변은 이미 업데이트되었습니다. 약간 다른 쿼리. 그래도 git에서 너를 이길 의도는 없지만 네크로맨서 수를 주시하십시오! 하하
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

음, 좋은 일을 계속 : 모든 사회가이 작은 쪽의 경쟁에서 도움이됩니다 (내가 upvote에에게 시간에 다른 대답했다)
VonC

물론 @VonC 농담, 나는 당신의 물건을 분명히 찬성했습니다. XD
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

1

어떤 이유로 든 svn해결책이 저에게 효과적이지 않으며 svn다른 것을 필요로 하지 않기 때문에 해결책을 찾기 위해 시간을 소비하는 것이 합리적이지 않으므로 이미 가지고있는 도구를 사용하여 간단한 해결책을 찾았습니다. 이 스크립트는으로 설명 된 GitHub 디렉토리의 모든 파일 만 사용 curl하고 awk다운로드합니다 "/:user:repo/contents/:path".

GitHub REST API "GET /repos/:user:repo/contents/:path"명령 에 대한 호출의 리턴 된 본문은 "download_url"디렉토리의 각 파일에 대한 링크를 포함하는 오브젝트를 리턴합니다 .

이 명령 행 스크립트는 REST API를 사용하여 해당 REST API를 호출하고 curlAWK를 통해 결과를 전송합니다.이 결과는 "download_url"행을 제외한 모든 항목을 필터링하고 링크에서 따옴표와 쉼표를 지우고 다른 호출 컬을 사용하여 링크를 다운로드합니다.

curl -s https://api.github.com/repos/:user/:repo/contents/:path | awk \
     '/download_url/ { gsub("\"|,", "", $2); system("curl -O "$2"); }'

1

git sparse-checkout

Git 2.25.0 에는 git sparse-checkout기존 기능을보다 쉽게 ​​사용할 수 있는 새로운 실험 명령과 대규모 리포지토리의 중요한 성능 이점이 포함되어 있습니다. ( GitHub 블로그 )

현재 버전의 예 :

git clone --filter=blob:none --sparse https://github.com/git/git.git
cd git
git sparse-checkout init --cone
git sparse-checkout add t

가장 주목할만한

  • --sparsegit저장소의 최상위 디렉토리 파일 만 작업 사본으로 체크 아웃합니다.
  • git sparse-checkout add tt하위 폴더를 점진적으로 추가 / 체크 아웃git

다른 요소들

  • git sparse-checkout init 부분 체크 아웃을 가능하게하는 몇 가지 준비
  • --filter=blob:none필요한 자식 객체 만 다운로드하여 데이터 가져 오기를 최적화합니다 ( 추가 정보 는 부분 복제 기능 살펴보기 ).
  • --cone 더 제한된 파일 포함 패턴을 적용하여 성능을 향상시킵니다.

GitHub 비행 상태

GitHub는이 기능을 내부적으로 평가하고 있으며 일부 리포지토리에서 [...]을 사용하도록 설정되어 있습니다. 기능이 안정화되고 성숙되면 진행 상황을 계속 업데이트합니다. ( 문서 )


공감. 복제 패턴이 설정된 stackoverflow.com/a/59515426/6309에 해당 명령을 제시했습니다 .
VonC
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.