git repo에서 하나의 파일 만 체크 아웃하려면 어떻게해야합니까?
답변
원래, 나는 2012 년에 언급 git archive
(참조 자레드 포 시스 의 대답 과 로버트 기사 의 대답을 하기 때문에) git1.7.9.5 (2012 월) , 폴 Brannan 의 대답 :
git archive --format=tar --remote=origin HEAD:path/to/directory -- filename | tar -O -xf -
그러나 2013 년에는 더 이상 원격 https://github.com URL에 사용할 수 없었습니다 .
이전 페이지 ” 저장소를 아카이브 할 수 있습니까? “를 참조하십시오.
현재 (2018) 페이지 ” GitHub의 콘텐츠 및 데이터 보관 정보 “에서는 GHTorrent 또는 GH Archive 와 같은 타사 서비스를 사용할 것을 권장 합니다.
따라서 로컬 복사본 / 복제를 처리 할 수도 있습니다.
에서 언급 한대로 베어 저장소의 로컬 복사본이있는 경우 선택적으로 다음을 할 수있는 이 답변 ,
git --no-pager --git-dir /path/to/bar/repo.git show branch:path/to/file >file
또는 먼저 리포지토리를 복제해야합니다. 즉, 작업 트리에서 전체 기록을 가져옵니다.-.git 리포지토리-
- 그러나 Git1.7 이상을 사용하는 경우
스파 스 체크 아웃을 수행 할 수 있습니다.
- 스파 스 체크 아웃 옵션 사용 (
git config core.sparsecheckout true
) .git/info/sparse-checkout
파일 에서보고 싶은 것을 추가- 작업 트리를 다시 읽고 필요한 것만 표시
- 스파 스 체크 아웃 옵션 사용 (
작업 트리를 다시 읽으려면 :
$ git read-tree -m -u HEAD
그렇게하면 원하는 파일을 정확히 포함하는 작업 트리가 생깁니다 (파일이 하나 인 경우에도)
리처드 고메스 (포인트 코멘트에 )에 ” 나는 복제, 가져 않는 방법 또는 스파 스 체크 아웃 한 디렉토리 또는 자식 저장소 디렉토리의 목록을? “
히스토리 다운로드를 피하는 bash 함수는 단일 브랜치를 검색하고 필요한 파일 또는 디렉토리 목록을 검색합니다.
답변
먼저 모든 파일의 기본 체크 아웃을 억제하는 -n 옵션과 –depth 1 옵션을 사용하여 repo를 복제하십시오. 즉, 각 파일의 최신 개정 만 가져옵니다.
git clone -n git://path/to/the_repo.git --depth 1
그런 다음 원하는 파일 만 확인하십시오.
cd the_repo
git checkout HEAD name_of_file
답변
이미 git repo 사본이있는 경우 항상 a git log
를 사용하여 파일 버전을 체크 아웃하여 해시 ID를 찾으십시오 (예 : 3cdc61015724f9965575ba954c8cd4232c8b42e4).
git checkout hash-id path-to-file
실제 예는 다음과 같습니다.
git checkout 3cdc61015724f9965575ba954c8cd4232c8b42e4 /var/www/css/page.css
답변
일반적으로 git
첫 번째 답변에서 제안한 것처럼 전체 저장소를 다운로드하지 않고 하나의 파일 만 다운로드 할 수는 없습니다 . Git은 CVS / SVN처럼 생각대로 파일을 저장하지 않지만 프로젝트의 전체 기록을 기반으로 파일을 생성하기 때문입니다.
그러나 특정 경우에 대한 해결 방법이 있습니다. 에 대한 자리로 아래의 예를 들면 user
, project
, branch
, filename
.
깃 허브
wget https://raw.githubusercontent.com/user/project/branch/filename
GitLab
wget https://gitlab.com/user/project/raw/branch/filename
GitWeb
Server-GitWeb 에서 Git을 사용하는 경우 예를 들어 시도 할 수 있습니다 (올바른 경로로 변경).
wget "http://example.com/gitweb/?p=example;a=blob_plain;f=README.txt;hb=HEAD"
drupalcode.org의 GitWeb
예:
wget "http://drupalcode.org/project/ads.git/blob_plain/refs/heads/master:/README.md"
googlesource.com
base64 인코딩 버전의 원시 파일을 다운로드 할 수있는 문서화되지 않은 기능이 있습니다.
curl "https://chromium.googlesource.com/chromium/src/net/+/master/http/transport_security_state_static.json?format=TEXT" | base64 --decode
다른 경우에는 Git 리포지토리가 웹 인터페이스를 사용하고 있는지 확인하십시오.
이 모든 웹 인터페이스를 사용하지 않는 것, 당신과 같은 외부 서비스에 코드를 밀어 고려할 수 GitHub의 , 의 Bitbucket , 등 . 거울로 사용하십시오.
wget
설치 하지 않은 경우 curl -O (url)
다른 방법으로 시도하십시오 .
답변
git checkout branch_or_version-경로 / 파일
예: git checkout HEAD -- main.c
답변
답변
이제 할 수 있습니다! 이것이 Google의 첫 번째 결과이므로 최신 상태로 업데이트한다고 생각했습니다. git 1.7.9.5의 출현으로 git archive
, 원격 호스트에서 단일 파일을 검색 할 수 있는 명령이 있습니다.
git archive --remote=git://git.foo.com/project.git HEAD:path/in/repo filename | tar -x
https://stackoverflow.com/a/5324532/290784 에서 전체 답변을 참조 하십시오.