itsource

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

mycopycode 2023. 5. 17. 22:57
반응형

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

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

GitHubrepo가 여기에 살고 있는 예를 들어 보겠습니다.

git@github.com:foobar/Test.git

디렉터리 구조:

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

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

2021년 4월 업데이트: 커뮤니티에서 작성한 몇 가지 도구를 사용하여 이를 수행할 수 있습니다.

참고: 많은 수의 파일을 다운로드하려는 경우 속도 제한을 방지하기 위해 이러한 도구에 토큰을 제공해야 할 수 있습니다.


원래(수동) 접근 방식:개별 디렉토리 체크아웃은 에서 지원되지 않습니다.git기본적으로, 하지만 Github은 SVN을 통해 이것을 할 수 있습니다.서브버전으로 코드를 체크아웃하면 Github은 기본적으로 백엔드에서 repo를 git에서 subversion으로 변환한 다음 요청된 디렉토리를 제공합니다.

다음은 이 기능을 사용하여 특정 폴더를 다운로드하는 방법입니다.나는 인기 있는 자바스크립트 라이브러리를 사용할 것입니다.lodash일례로

  1. 다운로드할 폴더로 이동합니다.다운받자/testmaster분점.github repo URL 예제

  2. 하위 버전의 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
  • :Protip:Protip을 사용할 수 .svn ls 경우 에 사용 및 합니다.

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

다운깃 > URL 입력 > 다운로드!

DownGit-에서 GitHub 공용 디렉토리 또는 파일을 직접 다운로드하거나 다운로드 링크를 만들있습니다.


다운깃


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


고지 사항:저는 질문자와 같은 문제에 빠졌고 간단한 해결책을 찾을 수 없었습니다.그래서, 저는 이 도구를 먼저 제가 사용할 수 있도록 개발한 다음, 모두를 위해 열어보았습니다 :)

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

옵션 1: GitZip 브라우저 확장

Chrome 확장, Edge 확장, Firefox 애드온

용도:

  1. Github 리포지토리 페이지를 찾습니다.
  2. 두 가지 다운로드 방법:
    1. 항목을 선택합니다.
      1. 기본적으로 항목을 두 번 클릭하거나 항목 전면에 있는 확인란을 선택할 수 있습니다.
      2. 페이지 오른쪽 아래에 있는 다운로드 버튼을 클릭합니다.
    2. 상황에 맞는 메뉴:
      1. "GitZip 다운로드" > "전체 리포지토리" 또는 "현재 폴더"를 클릭합니다.
      2. 항목에서 마우스 커서를 이동하고 "GitZip Download" > "Selected Folder/File"을 클릭합니다.
      3. 2-1-1을 한 후 "GitZip Download" > "Checked Items"를 클릭합니다.
  3. 진행률 대시보드를 보고 브라우저 트리거 다운로드를 기다립니다.
  4. ZIP 파일을 가져옵니다.

토큰 가져오기:

  1. 브라우저에서 GitZip 확장 아이콘을 클릭합니다.
  2. 토큰 가져오기 외에 "정상" 또는 "개인" 링크를 클릭합니다.
  3. Github 인증 페이지에서 GitZip 권한을 인증합니다.
  4. 시작 페이지로 돌아갑니다.
  5. 계속 사용합니다.

옵션 2: Github 페이지

GitHub API 및 JSZip, FileSaver.js 라이브러리를 사용하여 http://kinolien.github.io/gitzip .

1단계: 오른쪽 상단의 필드에 githuburl을 입력합니다.
2단계: Enter 키를 누르거나 다운로드 zip을 직접 클릭하거나 검색을 클릭하여 하위 폴더 및 파일 목록을 봅니다.
3단계: "Zip 파일 다운로드" 또는 "파일 가져오기" 단추를 클릭하여 파일을 가져옵니다.

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

또한 GitHub 계정이 있고 이 사이트에서 "get token" 링크를 사용하는 경우 프라이빗/퍼블릭 저장소 및 속도 제한 업그레이드를 지원할 수 있습니다.

가지고 계신다면,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

일반 git repo의 경우:

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

git-archive Git 저장소의 압축된 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에서 액세스를 허용하지 않습니다.☹️

모든 답을 시도해 본 결과, 저에게 가장 적합한 해결책은 다음과 같습니다.

GitHub의 vscode 기반 편집기.

찬성:

  1. ▁like않▁tool다와 같은 별도의 도구가 svn또는 API 토큰.
  2. 콘텐츠 크기 제한 없음
  3. 보관이 아닌 디렉토리 또는 파일로 저장합니다.

지침들

  1. 아무 연락처로 이동합니다(예: https://github.com/RespiraWorks/Ventilator/tree/master/software) ).
  2. 누르거나 바꾸기.com와 함께.devURL에서 GitHub의 내부 편집기를 엽니다.
  3. Explorer창(왼쪽 또는 ++ShiftE 누름), 필요한 파일/폴더를 마우스 오른쪽 버튼으로 클릭하고 다운로드를 선택합니다.
  4. Select Folder대화 상자에서 선택한 파일/폴더가 존재할 디스크의 디렉터리를 선택한 파일/폴더를 선택합니다.

메모

수락된 답변과 같은 다른 해결책을 시도했지만,

  1. 및 않습니다svn오직 이것만을 위하여.
  2. Download Directory, Refined GitHub, GitZip, DownGit같은 다른 도구는 API 토큰이 필요하거나 큰 디렉터리를 다운로드할 수 없습니다.

기타 옵션

  • 원격 리포지토리 확장을 사용하여 VSCode를 실행하여 repo를 열고 파일/폴더를 다운로드합니다.

다른 답변에는 문제가 없지만 처음으로 이 과정을 거치는 사람들을 위해 단계별 지침을 공유해야겠다고 생각했습니다.

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

터미널을 열려면 스포트라이트를 클릭하고 terminal을 입력한 다음 Enter 키를 누릅니다.

  1. Mac에는 이미 SVN이 있을 수 있습니다(따옴표 없이 "svn" 또는 "which svn"만 입력하면 됨).
  2. On Github: repo 내의 특정 폴더 이름을 클릭하여 git 폴더(repo가 아님)에 대한 Github 경로를 찾습니다.
  3. 브라우저의 주소 표시줄에서 경로 복사
  4. 터미널 열기 및 유형: svn 내보내기
  5. 주소의 다음 붙여넣기(: https://github.com/mingsai/Sample-Code/tree/master/HeadsUpUI )
  6. 트리/마스터라는 단어를 대체합니다.
  7. 다음과 같은 단어로: 트렁크
  8. 파일의 대상 폴더를 입력합니다(이 예에서는 현재 사용자의 다운로드 폴더 내부에 대상 폴더를 저장합니다).
  9. 여기 공간은 단어(공간)가 아닌 스페이스 바일 뿐입니다. ~/다운로드/헤드업UI
  10. final terminal 명령은 폴더를 다운로드하기 위한 전체 명령을 표시합니다(주소를 5단계로 변경). svn export https://github.com/mingsai/Sample-Code/trunk/HeadsUpUI ~/Downloads/HeadsUpUI

BTW - Windows 또는 다른 플랫폼에 있는 경우 http://subversion.apache.org 에서 하위 버전(httpn)의 이진 다운로드를 찾을 수 있습니다.

단순히 다운로드하는 것이 아니라 폴더를 체크아웃하려면 svn 도움말을 사용해 보십시오(tldr: 내보내기를 체크아웃으로 대체).

갱신하다

중단된 다운로드/체크아웃을 재개하는 것에 대한 의견과 관련하여.제가 한번 달려보겠습니다.svn cleanup에 뒤에svn update추가 옵션은 SO를 검색하십시오.

특정 폴더에서 작업 중인 사용자는 해당 폴더 자체를 복제해야 합니다. 그렇게 하려면 스파스 체크아웃을 사용하여 아래 단계를 수행하십시오.

  1. 디렉터리를 만듭니다.

  2. Git 저장소를 초기화합니다.(git init)

  3. 스파스 체크아웃을 사용합니다.(git config core.sparsecheckout true)

  4. Git에게 알려주세요 ( 2015 >> Git는 2015/brand/May(echo 2015/may) >>.git/info/sparse-checkout)

  5. git remote add -f origin https://jafartke.com/mkt-imdev/DVM.git)

  6. .git pull origin master)

각 하위 디렉토리를 개별적으로 체크아웃할 수 있는 서브버전과 달리 Git는 전체 리포지토리 기준으로 작동합니다.

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

Git 프런트엔드(예: GitHub의 웹 인터페이스 또는 GitWeb)가 지정된 폴더를 추출할 수 있는 인터페이스를 제공하도록 선택할 수 있지만, 내가 알기로는 그들 중 어느 것도 그렇게 하지 않습니다(개별 파일을 다운로드할 수 있지만 폴더에 너무 많은 파일이 포함되어 있지 않으면 옵션입니다).

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

2019년 요약

이 작업을 수동으로 수행할지 아니면 프로그래밍 방식으로 수행할지에 따라 다양한 방법으로 처리할 수 있습니다.

아래에는 네 가지 옵션이 요약되어 있습니다.그리고 좀 더 직접적인 설명을 선호하는 사람들을 위해, 저는 유튜브 비디오를 만들었습니다.GitHub에서 개별 파일폴더를 다운로드합니다.

또한 GitHub에서 단일 파일을 다운로드해야 하는 경우(폴더가 아닌) StackOverflow에 비슷한 답변을 게시했습니다.


GitHub 사용자 인터페이스

  • 저장소 홈페이지에 다운로드 버튼이 있습니다.물론 이렇게 하면 전체 레포가 다운로드되고, 그 후에는 다운로드 압축을 푼 다음 필요한 특정 폴더를 수동으로 끌어내야 합니다.

타사 도구

  • 이를 처리할 수 있는 다양한 브라우저 확장 및 웹 앱이 있으며, DownGit도 그 중 하나입니다.GitHub URL을 폴더에 붙여넣기만 하면 됩니다(예:https://github.com/babel/babel-eslint/tree/master/lib하고 " 을 누릅니다.을 클릭하고 "다운로드" 버튼을 누릅니다.

전복

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

GitHub API

  • 이 작업을 프로그래밍 방식으로 수행하려면 이 솔루션이 필요합니다.이것이 실제로 다운기트가 후드 아래에서 사용하는 것입니다.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의 코드에서 영감을 얻으십시오.

git clone --filter합니다.

디렉토리 " "에만 복제하려면: " " " " 를 사용합니다.big/이 저장소의: https://github.com/cirosantilli/test-git-partial-clone-big-small 내가 할 수 있는 일:

git clone --depth 1 --filter=blob:none --sparse \
  https://github.com/cirosantilli/test-git-partial-clone-big-small
cd test-git-partial-clone-big-small
git sparse-checkout set small

--filter원격 프로토콜에 대한 업데이트와 함께 옵션이 추가되었으며, 서버에서 객체가 다운로드되는 것을 진정으로 방지합니다.

Git 저장소의 하위 디렉터리만 복제하려면 어떻게 해야 합니까?

2021년 1월 git 2.30.0에서 테스트 완료.

폴더를 "다운로드"하고 "클론"(개발용)하지 않으려면 전체 보고서를 복제하거나 처음에 GIT를 설치할 필요 없이 최신 버전의 저장소(및 그 안에 있는 폴더/파일) 복사본을 쉽게 가져올 수 있는 가장 쉬운 방법은 zip 아카이브(모든 레포, 포크,원하는 저장소/포크/브런치/커밋(예: GitHub)으로 이동하여 branch, commit 등)을 실행할 수 있습니다.http(s)://github.com/<user>/<repo>/commit/<Sha1>커밋 후 를한 후 "파일 복사"를 합니다.Downloads오른쪽 상단의 버튼을 누릅니다.

이 아카이브 형식에는 git-repo 마법이 없으며 추적된 파일 자체(및 추적된 경우 몇 개의 .gitignore 파일도 포함되어 있지만 이러한 파일은 무시할 수 있음)만 포함되어 있습니다. 즉, 코드가 변경되어 정상 상태를 유지하려면 수동으로 다시 다운로드해야 합니다.또한 깃 저장소로 사용할 수 없다는 것을 의미합니다.

이 경우에도 이러한 기능이 필요한지는 잘 모르겠지만("다운로드"/보기 대 "클론"/개발), 그래도 유용할 수 있습니다.

Python3 pip이라는 githubdl이를 수행할 수 있습니다*:

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

프로젝트 페이지는 여기에 있습니다.

고지 사항:제가 이 소포를 썼어요.

unix 명령에 익숙하다면 이를 위한 특별한 종속성이나 웹 앱이 필요하지 않습니다.레포를 타르볼로 다운로드하여 필요한 것만 언타르할 수 있습니다.

예(fontawesome의 하위 디렉터리에서 파일 2개를 제거):

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-syslog-link(zip 파일 또는 특정 분기/refs를 가져오는 방법 포함)
  • 첫 합니다.*/를하여 모든 디렉토리와 시킵니다.를 선택하여 모든 디렉터리와 일치시킵니다.Github은 이름에 commitref가 포함된 래퍼 디렉토리를 생성하므로 알 수 없습니다.
  • 당신은 아마 원할 것입니다.--strip-components슬래시의 양과 같음(/경로에 있습니다(이전 인수).

이렇게 하면 전체 타르볼이 다운로드됩니다.이 문제를 피해야 하거나 GitHub 서버에 친절하게 대하려면 다른 답변에 언급된 SVN 방법을 사용합니다.

이것이 git v2.25.0과 v2.26.2에서 테스트한 방법입니다.이 트릭은 v2.30.1에서 작동하지 않습니다.

TLDR

git clone --no-checkout --filter=tree:0 https://github.com/opencv/opencv
cd opencv

# requires git 2.25.x to 2.26.2
git sparse-checkout set data/haarcascades

Docker를 사용하여 특정 버전의 Git 설치를 방지할 수 있습니다.

git clone --no-checkout --filter=tree:0 https://github.com/opencv/opencv
cd opencv

# requires git 2.25.x to 2.26.2
docker run --rm -it -v $PWD/:/code/ --workdir=/code/ alpine/git:v2.26.2 sparse-checkout set data/haarcascades

풀 솔루션

# bare minimum clone of opencv
$ git clone --no-checkout --filter=tree:0 https://github.com/opencv/opencv
...
Resolving deltas: 100% (529/529), done.

# Downloaded only ~7.3MB , takes ~3 seconds
# du = disk usage, -s = summary, -h = human-readable
$ du -sh opencv
7.3M    opencv/

# Set target dir
$ cd opencv
$ git sparse-checkout set data/haarcascades
...
Updating files: 100% (17/17), done.
# Takes ~10 seconds, depending on your specs

# View downloaded files
$ du -sh data/haarcascades/
9.4M    data/haarcascades/
$ ls data/haarcascades/
haarcascade_eye.xml                      haarcascade_frontalface_alt2.xml      haarcascade_licence_plate_rus_16stages.xml  haarcascade_smile.xml
haarcascade_eye_tree_eyeglasses.xml      haarcascade_frontalface_alt_tree.xml  haarcascade_lowerbody.xml                   haarcascade_upperbody.xml
haarcascade_frontalcatface.xml           haarcascade_frontalface_default.xml   haarcascade_profileface.xml
haarcascade_frontalcatface_extended.xml  haarcascade_fullbody.xml              haarcascade_righteye_2splits.xml
haarcascade_frontalface_alt.xml          haarcascade_lefteye_2splits.xml       haarcascade_russian_plate_number.xml

레퍼런스

디렉터리 트리의 간단한 다운로드를 수행할 수 있습니다.

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

하지만 만약 당신이 그것을 확인하고 커밋을 하고 그것들을 뒤로 밀 수 있다면, 당신은 그렇게 할 수 없습니다.

다른 구체적인 예:

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

경로에 있는 트렁크 참고

편집: (토미 C의 코멘트에 따름)

예, 체크아웃 대신 내보내기를 사용하면 추가 저장소 파일 없이 깨끗한 복사본을 얻을 수 있습니다.

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

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

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

가장 눈에 띄는 것은

  • --sparse 의 최상위 디렉터리 파일만 체크아웃합니다.git 복사본으로 변환
  • git sparse-checkout add t으로 추가t의하폴의 하위 git

기타 요소

  • git sparse-checkout init 부분 체크아웃을 활성화하기 위한 몇 가지 준비를 합니까?
  • --filter=blob:none필요한 Git 개체만 다운로드하여 데이터 가져오기를 최적화합니다(추가 정보는 부분 클론 기능 참조).
  • --cone 또한 보다 제한된 파일 포함 패턴을 적용하여 성능 향상

GitHub 상태

GitHub은 선택한 몇 개의 리포지토리 [...]에서 활성화되어 있는 동안 내부적으로 이 기능을 계속 평가하고 있습니다.기능이 안정화되고 성숙해짐에 따라 진행 상황을 계속 업데이트해 드리겠습니다.(계속)

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

째, 교를 바꿉니다.tree/master와 함께trunk다음 을 설치합니다.git-svn타고sudo apt install git-svn

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

이렇게 하면 특히 Windows 사용자를 위해 svn을 설정하는 번거로움을 겪지 않아도 됩니다.

제 상황에서는 아무 대답도 도움이 되지 않았습니다.Windows용으로 개발 중인 경우에는 svn이 없을 가능성이 높습니다.많은 경우 사용자가 Git를 설치하거나 다른 이유로 전체 저장소를 다운로드하지 않을 것으로 기대할 수 없습니다.Willem van Ketwich와 aztack과 같은 이 질문에 대답한 사람들 중 일부는 이 과제를 달성하기 위한 도구를 만들었습니다.그러나 도구가 사용 중인 언어에 맞게 작성되지 않았거나 타사 라이브러리를 설치하지 않으려는 경우에는 이러한 도구가 작동하지 않습니다.

하지만, 훨씬 더 쉬운 방법이 있습니다.GitHub에는 GET 요청을 사용하여 단일 파일 또는 전체 디렉터리 내용을 다운로드할 수 있는 API가 있습니다.다음을 사용하여 디렉토리에 액세스할 수 있습니다.https://api.github.com/repos/:owner/:repo_name/contents/:path디렉터리의 모든 파일을 열거하는 JSON 개체를 반환합니다..download_urlURL을 할 수 .그런 다음 해당 URL을 사용하여 파일을 다운로드할 수 있습니다.

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

주소 표시줄에서 복사한 모든 URL에 gget을 사용할 수 있습니다.

ghget https://github.com/fivethirtyeight/data/tree/master/airline-safety

SVN을 사용하지 않는 자급식 휴대용 셸 스크립트입니다(큰 레포에서는 작동하지 않았습니다).또한 API를 사용하지 않기 때문에 토큰이 필요 없고 속도 제한도 없습니다.

고지 사항:그것을 달성 해냈다.

5단계만 더 가면 됩니다.

  • 여기에서 SVN을 다운로드합니다.
  • CMD를 열고 다음과 같이 SVN bin 디렉토리로 이동합니다.cd %ProgramFiles%\SlikSvn\bin
  • 디렉터리 URL을 다운로드하려고 합니다.
    https://github.com/ZeBobo5/Vlc.DotNet/tree/develop/src/Samples
  • 를 바꿉니다.tree/develop또는tree/master와 함께trunk
  • 이제 이 마지막 명령을 실행하여 동일한 디렉터리에 폴더를 다운로드합니다.
svn export https://github.com/ZeBobo5/Vlc.DotNet/trunk/src/Samples

위의 답변을 확대하기 위해 실제 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

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

나는 리눅스를 사용하기 때문에 ~/.bashrc에 넣어 even :D $HOME/.bashrc라고 합니다.

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

}

그리고 껍질을 새로 고칩니다.

source ~/.bashrc 

그런 다음 git-folder blabla 폴더와 함께 사용합니다.d

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

결국 우리는 세 가지 옵션에 끌렸습니다.

  1. wget을 사용하여 GitHub에서 데이터를 가져옵니다(원시 파일 보기 사용).
  2. 업스트림 프로젝트에서 필요한 데이터 하위 집합을 빌드 아티팩트로 게시하도록 합니다.
  3. 포기하고 전체 체크아웃을 이용하세요.첫 번째 빌드에서는 큰 인기를 끌지만, 많은 트래픽이 발생하지 않는 한 다음 빌드에서는 큰 번거로움이 없습니다.

이유로든, 이가무엇간에든이유,간에▁the▁for,svn솔루션은 저에게 효과가 없습니다. 그리고 저는 필요가 없기 때문입니다.svn다른 무엇보다도, 그것을 만들기 위해 시간을 소비하는 것은 말이 되지 않았기 때문에, 저는 이미 가지고 있는 도구를 사용하여 간단한 해결책을 찾았습니다.이 스크립트는 다음만 사용합니다.curl그리고.awk합니다."/:user:repo/contents/:path".

API GitHub REST API에 입니다."GET /repos/:user:repo/contents/:path"는 명은다포개반체다환니합을 포함하는 합니다."download_url"디렉토리의 각 파일에 대한 링크.

는 REST API를 사용하여 합니다.curl그리고 AWK를 통해 결과를 전송합니다. AWK는 "download_url" 줄을 제외한 모든 줄을 필터링하고 링크에서 따옴표와 쉼표를 지운 다음 다른 호출을 사용하여 링크를 다운로드합니다.

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

저희 팀은 SVN을 베어본 서버에 설치하는 것을 원치 않았기 때문에 이를 위해 bash 스크립트를 작성했습니다.

https://github.com/ojbc/docker/blob/master/java8-karaf3/files/git-download.sh

Github API를 사용하며 다음과 같은 명령줄에서 실행할 수 있습니다.

git-download.sh https://api.github.com/repos/ojbc/main/contents/shared/ojb-certs

나는 센트와 함께 일합니다.루트 액세스 권한이 없는 OS 7 서버, norgit, svn 등(또는 원하지 않음!) 그래서 github 폴더를 다운로드하기 위해 파이썬 스크립트를 만들었습니다: https://github.com/andrrrl/github-folder-downloader

사용법은 간단합니다. 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 내용을: 다음내포는함하을용dir: [install] user=1 그리고.easy_install lxml작동합니다(참조: https://stackoverflow.com/a/33464597/591257) ).

url에서 github을 github으로 바꾸고 코드와 상자를 파일 메뉴로 이동하여 zip으로 내보내기를 통해 repoto와 상자를 엽니다.

다음 repo: https://github.com/geist-org/react/tree/master/examples/custom-themes

다음 URL을 입력하십시오. https://githubbox.com/geist-org/react/tree/master/examples/custom-themes

코드 및 상자에서 파일 메뉴로 이동하고 Zip으로 내보내기를 선택합니다.

언급URL : https://stackoverflow.com/questions/7106012/download-a-single-folder-or-directory-from-a-github-repo

반응형