Gitのサーバーリポジトリから単一のファイルをプルする方法


114

サーバーでGitを実行しているサイトで作業しています。デプロイにGitを使用しています(GitHubではありません)。これは、フックメソッドを使用して関与する前に設定されたものであり、この質問を参照し以下のコマンドを入力しましたが、機能しませんでした。

サーバーから単一のファイルをプルするにはどうすればよいですか?たとえば、ローカルファイルindex.phpを更新したい場合はどうすればよいですか。git pull index.php



回答:


194

(デプロイされたリポジトリで)次のことが可能です。

git fetch
// git fetch will download all the recent changes, but it will not put it in your current checked out code (working area).

に続く:

git checkout origin/master -- path/to/file
// git checkout <local repo name (default is origin)>/<branch name> -- path/to/file will checkout the particular file from the downloaded changes (origin/master).

1
ありがとうございました。では、どういう意味<revision>ですか?ファイル名?そして、私のファイルがルートディレクトリにある場合、次のように入力する必要がありますgit checkout -m index.php index.php
vsvs 2015

ご説明ありがとうございます。
vsvs 2015

それは*origin*/masterリモートである必要はありませんか、それともリモートからでも可能ですか?履歴全体が私のリポジトリに取り込まれますか、それともファイルが魔法のように表示されますか?
BernhardDöbler2017

このエラーが発生した場合、「gitが認識しているファイルと一致しませんでした」:「path / to / file」は、GitHub上のファイルの場所から取得したパスのコピーであってはなりません。つまり、「repoName / fileName」を意味します。 、「repoName /」を取り除く必要があります。そうすると機能します。
エデュアルド

1
@BernhardDöblerリモートからの任意のブランチにすることができます:)
chrismillah

27
git fetch --all
git checkout origin/master -- <your_file_path>
git add <your_file_path>
git commit -m "<your_file_name> updated"

これは、ファイルをorigin / masterからプルしていることを前提としています。


13

これは解決策になる可能性があります:

git fetch

git checkout origin/master -- FolderPathName/fileName

ありがとう。


5

このシナリオは、ローカルリポジトリのファイル破損した場合、または最新のファイルの最新バージョンのコピーをリポジトリから復元したい場合に発生します。/ bin / rm(git rmではない)でファイルを削除するか、ファイルの名前を変更/非表示にしてからa git pullを発行しても機能しません:gitはファイルが存在しないことを認識し、おそらくリポジトリgit diffから削除することを想定しています(から削除されたすべての行が表示されます)ファイルがありません)。

git pullローカルで欠落しているファイルを復元しないと、おそらく他のバージョン管理システムの影響を受けているため(たとえば、ローカルで非表示になっているファイルを復元すると思われるsvn updateなど)、gitについて常にイライラしています。

git reset --hard HEADコミットされていない変更を破棄するため、対象のファイルを復元する別の方法です。ただし、ここで説明しているように、他にコミットされていない変更が必要な場合、git resetは潜在的に危険なコマンドです。

git fetch ... git checkout@chrismillahによって上述の戦略は、問題のファイルを復元する素敵な外科的な方法です。


1
他のコメントよりもはるかに有益です。ありがとう
Thecave3

3

私は少し異なるタスクを探していましたが、これはあなたが望むもののように見えます:

git archive --remote=$REPO_URL HEAD:$DIR_NAME -- $FILE_NAME |
tar xO > /where/you/want/to/have.it

私が意味する、あなたが取得したい場合はpath/to/file.xz、あなたが設定されますDIR_NAMEまでpath/toFILE_NAMEしますfile.xz。だから、あなたは次のようなものになるでしょう

git archive --remote=$REPO_URL HEAD:path/to -- file.xz |
tar xO > /where/you/want/to/have.it

そしてtar xOもちろん、他の形での開梱を妨げる人はいません(ここにパイプが必要なのは私です)。


1

使ってみてください:

git checkout branchName -- fileName

例:

git checkout master -- index.php

2
注意:「git checkout master-index.php」これはサーバーからのチェックアウトではなく、最後のプルからのローカルgitデータベースからのチェックアウトです。
Roberto Novakosky

1
https://raw.githubusercontent.com/[USER-NAME]/[REPOSITORY-NAME]/[BRANCH-NAME]/[FILE-PATH]

https://raw.githubusercontent.com/vipinbihari/apana-result/master/index.php

これにより、個々のファイルの内容を行テキストとして取得します。そのテキストはwgetでダウンロードできます。

https://raw.githubusercontent.com/vipinbihari/apana-result/master/index.php


OPは、彼がgithubを使用していないことを質問で具体的に示しました。
Zeitounator

0

このWindowsバッチは、GitHubにあるかどうかに関係なく機能します。それはいくつかの厳しい警告を示しているので私はそれを使用しています。動作が遅く、数百メガバイトのデータをトラバースすることに気づくでしょう。要件が利用可能な帯域幅/ RWメモリに基づいている場合は、この方法を使用しないでください。

sparse_checkout.bat

pushd "%~dp0"
if not exist .\ms-server-essentials-docs mkdir .\ms-server-essentials-docs
pushd .\ms-server-essentials-docs
git init
git remote add origin -f https://github.com/MicrosoftDocs/windowsserverdocs.git
git config core.sparseCheckout true
(echo EssentialsDocs)>>.git\info\sparse-checkout
git pull origin master

=>

C:\ Users \ user name \ Desktop> sparse_checkout.bat

C:\ Users \ user name \ Desktop> pushd "C:\ Users \ user name \ Desktop \"

C:\ Users \ user name \ Desktop>存在しない場合。\ ms-server-essentials-docs mkdir。\ ms-server-essentials-docs

C:\ Users \ user name \ Desktop> pushd。\ ms-server-essentials-docs

C:\ Users \ user name \ Desktop \ ms-server-essentials-docs> git init C:/ Users / user name / Desktop / ms-server-essentials-docs / .git /の初期化された空のGitリポジトリ

C:\ Users \ user name \ Desktop \ ms-server-essentials-docs> git remote add origin -f https://github.com/MicrosoftDocs/windowsserverdocs.git Origin Remoteの更新:オブジェクトの列挙:97、完了。リモート:オブジェクトのカウント:100%(97/97)、完了。リモート:オブジェクトの圧縮:100%(44/44)、完了。リモート:合計145517(デルタ63)、再利用76(デルタ53)、パック再利用145420受信オブジェクト:100%(145517/145517)、751.33 MiB | 32.06 MiB /秒、完了。デルタの解決:100%(102110/102110)、完了。 https://github.com/MicrosoftDocs/windowsserverdocs * [新しいブランチ]
>起源/ 1106-紛争* [新しいブランチ] - 1106 -紛争
FromPrivateRepo - >起源/ FromPrivateRepo * [新しいブランチ]
PR183 - >起源/ PR183 * 【新支店】
conflictfix-> origin / conflictfix * [新しいブランチ] shortpatti-patch-6-> origin / shortpatti-patch-6 * [新しいブランチ]
eross-msft-patch-1-> origin / eross-msft-patch-1 * [新しいブランチ]
マスター-> origin / master * [新しいブランチ] patch-1-
> origin / patch-1 * [新しいブランチ] repo_sync_working_branch -> origin / repo_sync_working_branch * [新しいブランチ]
shortpatti-patch-1-> origin / shortpatti-patch-1 * [新しいブランチ]
shortpatti-patch-2-> origin / shortpatti-patch-2 * [新しいブランチ]
shortpatti- patch-3-> origin / shortpatti-patch-3 * [新しいブランチ]
shortpatti-patch-4-> origin / shortpatti-patch-4 * [新しいブランチ]
shortpatti-patch-5-> origin / shortpatti-patch-5 * [新しいブランチ]

shortpatti-patch-7-> origin / shortpatti-patch-7 * [新しいブランチ]
shortpatti-patch-8-> origin / shortpatti-patch-8

C:\ Users \ user name \ Desktop \ ms-server-essentials-docs> git config core.sparseCheckout true

C:\ Users \ user name \ Desktop \ ms-server-essentials-docs>(echo EssentialsDocs)1 >>。git \ info \ sparse-checkout

C:\ Users \ user name \ Desktop \ ms-server-essentials-docs> git pull origin master
From https://github.com/MicrosoftDocs/windowsserverdocs
* branch master-> FETCH_HEAD

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.