리포지토리에서 단일 파일 검색
원격 Git 저장소에서 단일 파일의 내용을 가져오는 가장 효율적인 메커니즘(데이터 전송 및 사용되는 디스크 공간과 관련하여)은 무엇입니까?
지금까지 제가 생각해낸 것은 다음과 같습니다.
git clone --no-checkout --depth 1 git@github.com:foo/bar.git && cd bar && git show HEAD:path/to/file.txt
이건 여전히 과잉 살상인 것 같습니다.
repo에서 여러 개의 파일을 가져오는 것은 어떻습니까?
Git 버전 1.7.9.5에서는 원격에서 단일 파일을 내보내는 데 사용할 수 있는 것 같습니다.
git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar xO
됩니다.README.md
.
Jakub의 대답에 이어서. git archive
에서는 tar 또는 zip 아카이브를 생성하므로 파일 내용을 가져오려면 출력을 tar를 통해 파이프로 연결해야 합니다.
git archive --remote=git://git.foo.com/project.git HEAD:path/to/directory filename | tar -x
원격 리포지토리의 HEAD에서 현재 디렉터리에 '파일 이름' 복사본을 저장합니다.
그:path/to/directory
부품은 선택 사항입니다.은 제할경가파져다일저음장다니됩에이온외로 됩니다.<current working dir>/path/to/directory/filename
또사 수있설면정려하도를 할 수 하려면 다음과 같이 .git archive --remote
git-daemon에서 호스팅하는 Git 저장소에서 daemon.uploadarch 구성 옵션을 사용하도록 설정해야 합니다.https://kernel.org/pub/software/scm/git/docs/git-daemon.html 을 참조하십시오.
웹 인터페이스(예: gitweb, cgit, Gotorit, ginatra)가 배포된 경우 이를 사용하여 단일 파일('raw' 또는 'plain' 보기)을 다운로드할 수 있습니다.
다른 쪽에서 활성화한 경우 Git Archive의 '를 사용할 수 있습니다.--remote=<URL>
옵션(및 파일이 위치한 디렉토리로 제한 가능), 예:
$ git archive --remote=git@github.com:foo/bar.git --prefix=path/to/ HEAD:path/to/ | tar xvf -
일반적으로 그렇지는 않지만 Github을 사용하는 경우:
나를 위해.wget
raw url로 가는 것이 특정 파일 하나를 다운로드하는 가장 좋고 쉬운 방법인 것으로 밝혀졌습니다.
브라우저에서 파일을 열고 "원시" 버튼을 클릭합니다., 한 다음, URL을 합니다.wget
또는curl
그 위에
wget 예제:
wget 'https://github.abc.abc.com/raw/abc/folder1/master/folder2/myfile.py?token=DDDDnkl92Kw8829jhXXoxBaVJIYW-h7zks5Vy9I-wA%3D%3D' -O myfile.py
컬 예제:
curl 'https://example.com/raw.txt' > savedFile.txt
원격에서 단일 파일을 내보내는 방법
git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar -x
하면 됩니다.README.md
현재 디렉토리로 이동합니다.
파일의 내용을 STDOUT로 내보내려면 다음을 수행합니다.
git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar -xO
명령 끝에 여러 경로를 제공할 수 있습니다.
저는 다음과 같은 방법으로 해결했습니다.
git archive --remote=ssh://git@gitlab.com/user/mi-repo.git BranchName /path-to-file/file_name | tar -xO /path-to-file/file_name > /path-to-save-the-file/file_name
원하는 경우 "지점 이름"을 "HEAD"로 바꿀 수 있습니다.
제게는 해결책인 것 같습니다. http://gitready.com/intermediate/2009/02/27/get-a-file-from-a-specific-revision.html
git show HEAD~4:index.html > local_file
4
지금부터 4개의 개정을 의미합니다.~
댓글에 언급된 대로 타일입니다.
다른 답변(예: 제한적 GitLab 액세스)이 작동하지 않는 경우 다음 방법으로 "선택적 체크아웃"을 수행할 수 있습니다.
git clone --no-checkout --depth=1 --no-tags URL
git restore --staged DIR-OR-FILE
git checkout DIR-OR-FILE
이 솔루션은 100% Git 호환되며 디렉터리를 체크아웃할 수 있지만 파일에서 wget/curl을 수행하는 것만큼 디스크나 네트워크가 최적화되지는 않습니다.
OP의 질문에 답하는 일부 답변의 미묘한 변형입니다.
git archive --remote=git@archive-accepting-git-server.com:foo/bar.git \
HEAD path/to/file.txt | tar -xO path/to/file.txt > file.txt
사용합니다.
$ cat ~/.wgetrc
check_certificate = off
$ wget https://raw.github.com/jquery/jquery/master/grunt.js
HTTP request sent, awaiting response... 200 OK
Length: 11339 (11K) [text/plain]
Saving to: `grunt.js'
다음을 사용하는 가장 쉬운 방법으로 보입니다.
wget https://github.com/name/folder/file.zip?raw=true
저장소에서 토큰을 지원하는 경우(예: GitLab) 사용자에 대한 토큰을 생성한 다음 다운로드할 파일로 이동하고 RAW 출력을 클릭하여 URL을 가져옵니다.파일을 다운로드하려면 다음을 사용합니다.
curl --silent --request GET --header 'PRIVATE-TOKEN: replace_with_your_token' \
'http://git.example.com/foo/bar.sql' --output /tmp/bar.sql
단일 파일의 경우 wget 명령을 사용합니다.
먼저 아래 그림을 따라 "raw"를 클릭하여 URL을 가져오십시오. 그렇지 않으면 HTML에 포함된 코드를 다운로드할 수 있습니다.
그러면 브라우저에서 URL이 https://raw.githubusercontent.com/ 으로 시작하는 새 페이지가 열립니다.
터미널에 명령을 입력하면 됩니다.
#wget https://raw.githubusercontent.com/...
잠시 후 파일이 폴더에 저장됩니다.
VSTS(Azure-DevOps)에서 호스팅되는 Git 저장소의 경우 Rest API를 사용하여 단일 파일을 검색할 수 있습니다.
이 API의 형식은 다음과 같습니다.
https://dev.azure.com/{organization}/_apis/git/repositories/{repositoryId}/items?path={pathToFile}&api-version=4.1?download=true
예:
https://dev.azure.com/{organization}/_apis/git/repositories/278d5cd2-584d-4b63-824a-2ba458937249/items?scopePath=/MyWebSite/MyWebSite/Views/Home/_Home.cshtml&download=true&api-version=4.1
다음 두 가지 명령이 저에게 효과가 있었습니다.
git archive --remote={remote_repo_git_url} {branch} {file_to_download} -o {tar_out_file}
다드로file_to_download
~하듯이tar
에서 합니다.branch
이 url인 원격 remote_repo_git_url
에 합니다.tar_out_file
tar -x -f {tar_out_file}.tar
을 합니다.file_to_download
tar_out_file
GitHub에서 호스팅되는 Git Repos에 대한 특정 정보입니다.
Github의 명령줄 앱의 'api' 명령어를 사용해 보십시오.gh
Github의 '리포지토리 콘텐츠 가져오기' 끝점에 인증된 호출을 수행합니다.
기본 명령은 다음과 같습니다.
$gh api /repos/{owner}/{repo}/contents/<path_to_the_file>
추가적으로 파일을 가져오려는 repo의 복제본이 포함된 디렉토리 내에서 이 작업을 수행하면 {owner} 및 {repo} 부분이 자동으로 채워집니다.
https://docs.github.com/en/rest/reference/repos#get-repository-content
응답은 JSON 개체가 됩니다.<path_to_the_file>이 실제로 파일을 가리킨다면, JSON은 파일에 액세스하기 위한 'size', 'name', 여러 url 필드와 파일 내용의 기본 64 인코딩 버전인 'content' 필드를 포함합니다.
파일 내용을 가져오려면 "download_url"의 값을 구르거나 'content' 필드를 디코딩하면 됩니다.다음과 같이 base64 명령을 파이프로 연결하여 이를 수행할 수 있습니다.
$gh api /repos/{owner}/{repo}/contents/<path-to-the-file> --jq '.content' | base64 -d
저는 컬을 사용하며, 공용 저장소 또는 웹 인터페이스를 통해 https 기본 인증을 사용하는 저장소에서 작동합니다.
curl -L --retry 20 --retry-delay 2 -O https://github.com/ACCOUNT/REPO/raw/master/PATH/TO/FILE/FILE.TXT -u USER:PASSWORD
github과 bitbucket에서 테스트해봤는데, 둘 다 작동합니다.
이스라엘 도브의 대답은 간단하지만 압축을 허용하지 않습니다.사용할 수 있습니다.--format=zip
하지만 타르처럼 파이프 명령으로 직접 압축을 풀 수는 없기 때문에 임시 파일로 저장해야 합니다.스크립트는 다음과 같습니다.
#!/bin/bash
BASENAME=$0
function usage {
echo "usage: $BASENAME <remote-repo> <file> ..."
exit 1
}
[ 2 -gt "$#" ] && { usage; }
REPO=$1
shift
FILES=$@
TMPFILE=`mktemp`.zip
git archive -9 --remote=$REPO HEAD $FILES -o $TMPFILE
unzip $TMPFILE
rm $TMPFILE
이것은 디렉터리에서도 작동합니다.
Github 엔터프라이즈 솔루션
HTTPS_DOMAIN=https://git.your-company.com
ORGANISATION=org
REPO_NAME=my-amazing-library
FILE_PATH=path/to/some/file
BRANCH=develop
GITHUB_PERSONAL_ACCESS_TOKEN=<your-access-token>
URL="${HTTPS_DOMAIN}/raw/${ORGANISATION}/${REPO_NAME}/${BRANCH}/${FILE_PATH}"
curl -H "Authorization: token ${GITHUB_PERSONAL_ACCESS_TOKEN}" ${URL} > "${FILE_PATH}"
특정 해시 + 원격 저장소에서 파일을 가져오려면 git-archive를 시도했지만 작동하지 않았습니다.
git clone을 사용해야 하며 저장소가 복제되면 git-archive를 사용하여 작동해야 합니다.
원격의 특정 해시에서 더 단순한 igit 아카이브를 수행하는 방법에 대한 질문을 게시합니다.
브라우저에서 직접 비트 버킷(Safari 사용...)을 선택한 경우 '원시로 보기'를 마우스 오른쪽 버튼으로 클릭하고 "링크된 파일 다운로드"를 선택합니다.
전체 디렉터리를 복제하는 데 문제가 없다면, 이 작은 bash/zsh 함수를 사용하면 단일 파일을 현재 디렉터리에 복제할 수 있습니다(레포를 임시 디렉터리로 복제한 후 제거함).
찬성: 원하는 파일만 얻을 수 있습니다.
반대: 전체 보고서가 복제될 때까지 기다려야 합니다.
git-single-file () {
if [ $# -lt 2 ]
then
echo "Usage: $0 <repo url> <file path>"
return
fi
TEMP_DIR=$(mktemp -d)
git clone $1 $TEMP_DIR
cp $TEMP_DIR/$2 .
rm -rf $TEMP_DIR
}
만약 당신의 목표가 단지 파일을 다운로드하는 것이라면, 번거롭지 않은 애플리케이션이 있습니다.gget
:
gget github.com/gohugoio/hugo 'hugo_extended_*_Linux-ARM.deb'
위의 예는 단일 파일을 다운로드합니다.hugo
저장소
https://github.com/dpb587/gget
@Steven Penny의 답변과 관련하여 wget도 사용합니다.또한 출력을 보낼 파일을 결정하기 위해 -O를 사용합니다.
gitlabs를 사용하는 경우 URL에 대한 다른 가능성은 다음과 같습니다.
wget "https://git.labs.your-server/your-repo/raw/master/<path-to-file>" -O <output-file>
인증서가 있거나 필요한 gitlabs 설치를 위해 신뢰할 수 있는 서버에서 액세스하는 경우가 아니라면 @Kos가 말한 것처럼 no-check-certificate입니다..wgetrc를 수정하는 것보다 그것을 선호하지만 당신의 필요에 따라 다릅니다.
큰 파일인 경우 wget과 함께 -c 옵션을 사용하는 것을 고려할 수 있습니다.이전 의도가 중간에 실패한 경우 파일을 둔 위치에서 계속 다운로드할 수 있습니다.
언급URL : https://stackoverflow.com/questions/1125476/retrieve-a-single-file-from-a-repository
'programing' 카테고리의 다른 글
just unit testing을 위해 Vuex 액션을 수정할 수 있습니까? (0) | 2023.07.07 |
---|---|
mongodb php 라이브러리에서 insertMany를 사용할 때 중복된 문서를 무시하는 방법은 무엇입니까? (0) | 2023.07.07 |
mongod를 사용하여 날짜를 utc에 저장할 때 시간대 문제를 어떻게 처리합니까? (0) | 2023.07.07 |
Document의 Mongoengine creation_time 특성 (0) | 2023.07.07 |
스프링 부트 레스트 - 404 구성 방법 - 리소스를 찾을 수 없음 (0) | 2023.07.07 |