web-dev-qa-db-ja.com

リポジトリから単一のファイルを取得する

リモートgitリポジトリから単一のファイルのコンテンツを取得するための最も効率的なメカニズム(転送されるデータと使用されるディスク容量に関して)は何ですか?

これまでのところ、私は何とか思いついた:

git clone --no-checkout --depth 1 [email protected]:foo/bar.git && cd bar && git show HEAD:path/to/file.txt

これはまだやり過ぎのようです。

リポジトリから複数のファイルを取得するのはどうですか?

195
Theozaurus

gitバージョン1.7.9.5では、これはリモートから単一のファイルをエクスポートするように機能するようです

git archive --remote=ssh://Host/pathto/repo.git HEAD README.md

これにより、ファイルREADME.mdのコンテンツがcatされます。

131
Yisrael Dov

Jakubanswer から続きます。 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-daemonがホストするGitリポジトリーでgit archive --remoteの使用を有効にするには、daemon.uploadarch構成オプションを有効にする必要があります。 https://kernel.org/pub/software/scm/git/docs/git-daemon.html を参照してください

55
Robert Knight

Webインターフェースがデプロイされている場合(gitweb、cgit、Gitorious、ginatraなど)、それを使用して単一のファイル(「raw」または「plain 'ビュー)。

反対側で有効にした場合git archiveを使用できます'--remote=<URL>'オプション(および、場合によっては、ファイルが存在するディレクトリに制限する)、たとえば:

$ git archive [email protected]:foo/bar.git --prefix=path/to/ HEAD:path/to/ |  tar xvf -
41
Jakub Narębski

一般的ではありませんが、Githubを使用している場合:

私にとっては、wgetが未加工のURLにあることが、特定のファイルをダウンロードする最良かつ最も簡単な方法であることがわかりました。

ブラウザでファイルを開き、「Raw」ボタンをクリックします。ブラウザを更新し、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

24
abc

リモートから単一のファイルをエクスポートするには:

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

コマンドの最後に複数のパスを指定できます。

11
Kousha

私には解決策のように見えます: 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つのリビジョンを意味し、~はコメントで述べたチルダです。

8
Mars Robertson

私はこれを使用します

$ 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'
6
Steven Penny

OPの質問に答える、ここにあるいくつかの回答の微妙なバリエーション:

git archive [email protected]:foo/bar.git \
  HEAD path/to/file.txt | tar -xO path/to/file.txt > file.txt
3

リポジトリがトークン(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
2
panticz.de

私はこの方法で解決しました:

git archive --remote=ssh://[email protected]/user/mi-repo.git BranchName /path-to-file/file_name | tar -xO /path-to-file/file_name > /path-to-save-the-file/file_name

必要に応じて、「BranchName」を「HEAD」に置き換えることができます

1
matiasmasca

Yisrael Dov's answer は簡単なものですが、圧縮はできません。 --format=Zipを使用できますが、tarのようにパイプコマンドで直接解凍することはできないため、一時ファイルとして保存する必要があります。スクリプトは次のとおりです。

#!/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

これはディレクトリでも機能します。

1
naught101

GitリポジトリがAzure-DevOps(VSTS)でホストされている場合、 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
1

単一ファイルの場合は、wgetコマンドを使用します。

まず、下の写真に従って「生」をクリックしてURLを取得します。それ以外の場合は、htmlに埋め込まれたコードをダウンロードします。 enter image description here

次に、ブラウザは https://raw.githubusercontent.com/ ...で始まるURLで新しいページを開きます。

ターミナルでコマンドを入力するだけです:

#wget https://raw.githubusercontent.com/...

しばらくすると、ファイルがフォルダーに配置されます。

1
malajisi

特定のハッシュ+リモートリポジトリからファイルを取得したい場合、git-archiveを試しましたが、機能しませんでした。

Git cloneを使用する必要があり、リポジトリが複製されたら、git-archiveを使用して動作させる必要があります。

リモートからの特定のハッシュからのgitアーカイブ でより簡単にする方法についての質問を投稿します

0

ディレクトリ全体を複製することを気にしない場合、この小さなbash/zsh関数は、単一のファイルを現在のディレクトリに複製するという最終結果になります(リポジトリを一時ディレクトリに複製し、後で削除することにより)。

Pro:必要なファイルのみを取得します

欠点:リポジトリ全体が複製されるのをまだ待つ必要があります

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
}
0

私はcurlを使用します。パブリックリポジトリまたはWebインターフェイス経由で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でテストしましたが、両方で動作します。

0
JasonS

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}"
0
Oliver Pearmain

ブラウザから直接bitbucketの場合(私はサファリを使用しました...)「View Raw」を右クリックして、「Download Linked File」を選択します:

enter image description here

0
ingconti