[git] git 저장소에서 하나의 파일 만 드문 체크 아웃하는 방법은 무엇입니까?

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 에서 전체 답변을 참조 하십시오.