クローンせずにgit repoでファイルを参照して表示する


107

最初にそれを複製せずにgit repoでファイルを参照して表示する方法はありますか?私はコマンドを使用してsvnでそれらを行うことができます:

svn ls / path / to / repo 
svn cat / path / to / repo / file-in-repo

私はおそらくgit showを使用できますが、次のようにします:

git show / path / to / repo
git show HEAD:/ path / to / repo

結果に

致命的:gitリポジトリではない

回答:


72

必要なコマンドはgit ls-remote、リモートリポジトリに関するいくつかの情報を取得することですが、履歴を表示したり、ディレクトリまたはそのレベルの何かをリストしたりすることはできません。基本的に、非常に高レベルでリモートオブジェクトを表示することしかできません(現在のHEADとタグなど)。

(私が正しく理解している場合)希望することを行う唯一の実際の方法は、sshを使用してリモートコマンドを実行し、結果を返すことです。次に例を示します。

ssh me@otherhost "cd repo && git log -n 10"

あなたが欲しいものは、彼らがそれを追加できれば素敵な機能でしょうが、私が読んだものからは、履歴などを取得するためにgitにローカルであるために多くの情報が必要なので、それは非常に簡単ではありません。 。


14
git cloneただし、でできることの1つは、を渡して単一のリビジョンのみをフェッチすること--depth 1です。これにより、潜在的に大量の履歴を取得することが回避され、abcdef1234567890「リビジョンに存在するファイルは何か」などの質問に答えるのに十分です。
ctrueden 2015

21

Gitは分散バージョン管理システムですが、Subversionは集中型(クライアント/サーバー)バージョン管理システムです。動作は異なります。それに慣れる。StackOverflow でのsvn status -u質問に相当するgitに対するその違いの結果を説明する私の回答を読んでください。

少し繰り返しますが、集中管理されたバージョン管理システム(CVSやSubversionなど)では、ほとんどすべてのコマンドがサーバー上で処理され、ネットワークが関与します。ローカルで実行されるコマンドはほとんどありません。「svn status」と「svn diff」の優れたパフォーマンスを得るために、Subversionはクライアントにチェックアウトバージョンの「元のコピー」を保存し、これらの一般的な操作でネットワーク転送を行う必要がないことに注意してください(つまり、Subversionチェックアウト= 2 x少なくとも作業ディレクトリのサイズ)。

リポジトリ全体のローカルコピー(クローン)がある分散バージョン管理システム(Git、Mercurial、Bazaarなど)では、ほとんどすべてのコマンドがクライアントで実行されます。他のリポジトリ(サーバー)へのネットワーク接続を必要とするコマンドはほとんどありません。

サーバーで実行できるコマンドの数は限られています。

  • " git ls-remote <URL>"を使用して、リモートのすべての参照を一覧表示できます。
  • リポジトリの(一部)のスナップショットを取得できます(リモートサーバーで有効になっている場合)。
    " git archive --remote = <URL> HEAD"を使用します。

  • git clone --depth = 1 <URL>」を使用すると、最後のコミットのいくつか(いわゆる「浅いクローン」)しかクローンできません。
  • サーバーがリポジトリへのgit Webインターフェイスを提供している場合は、それを使用して参照できます。

35
当然のことながら、最初にクローンを作成せずにリモートリポジトリを参照している場合は、gitのオフライン機能を無視しても問題がないことは明らかです。それを考えると、これが、たとえばリモートリポジトリのファイルの内容をローカルで参照できるローカルクライアントなど、一部の機能にとって有用な機能ではないというふりをする理由はないと思います。
LadyCailin

11
同意された、ヤクブがとる立場は非常に制限的である。これを指摘することは、評判を何度も失う価値があります。
ctpenrose 2013

8
「慣れる」という言い方は嫌いですが、最後まで読むと、現在の問題の解決策が見つかりました。110リポジトリの内容を確認したいのですが、1つのgitがありますが、sshやシェルにアクセスできません。おそらくかなり大きなもので、12GBくらいでしょう。したがって、最小化された深さを持つクローンは、少なくとも最近の興味深い履歴のみを表示するのに役立ちます。そしてgit repoをできるだけ小さくします。
ヘニング2014年

2
このような機能は、変更をログに記録するだけで十分な、リポジトリ全体を必要としないコードレビューツールの場合に便利です。
Lukasz Lenart 14年

1
@ヘニング、そうだね、あなたはそれを「それに慣れたgit」のトーンと呼べるかもしれないLOL
SN

16

一部のトランスポートプロトコルでこれを行う方法については、http://git-scm.com/book/en/Git-Internals-Transfer-Protocols参照してください。これはSSH経由の標準gitでは機能しないことに注意してください。

SSH経由のgitの場合、最新のサーバー側gitを使用すると、リモートから直接git-archiveを実行できます。たとえば、「tar t」にパイプして、特定のコミットのすべてのファイルのリストを取得できます。


13

GitHubはsvn互換なので、svn lsを使用できます

svn ls https://github.com/user/repository.git/branches/master/

BitBucketはgitアーカイブをサポートしているため、tarアーカイブをダウンロードしてアーカイブファイルを一覧表示できます。それは非常に効率的ではありませんが動作します:

git archive --remote=git@bitbucket.org:repository HEAD directory | tar -t

6
GitをGitHubと混同しないでください:)
LR

それはまた、非常に脆弱な感じ-レポ(100程度)、私はSVNから様々なエラーを取得し、多くの上で実行されている:「500内部サーバーエラー」「いいえ以上の資格情報」「非ディレクトリのエントリを取得することはできません」
MichaelChirico

5

正確ではありませんが、回避策です。

GitHub Developer APIを使用する

  1. これを開くと、最近のコミットが表示されます。

    https://api.github.com/repos/learningequality/ka-lite/commits

    上記のURLの最後にコミットハッシュを添付すると、特定のコミットの詳細を取得できます。

  2. すべてのファイル(メインツリーにはshaが必要です)

    https://api.github.com/repos/learningequality/ka-lite/git/trees/7b698a988683b161bdcd48a949b01e2b336b4c01

これがお役に立てば幸いです。


17
GitとGitHubを混同しないでください。元の質問はGit自体に関するものだと思います。Gitのインストール/ホスティング(GitHub / BitBucket / Stash)は、ブラウザリポジトリに対してさまざまな可能性を持っています。
Krzysztof Wolny

ボックス😉外の良いアイデア@Anurag Kanungo思考
eonist

2

これはおそらく一部の人によって汚いと考えられていますが、githubリポジトリの場合の非常に実用的な解決策は、スクリプトを作成することです。たとえば、「git-ls」:

#!/bin/sh
remote_url=${1:? "$0 requires URL as argument"}
curl -s $remote_url | grep js-directory-link | sed "s/.* title=\"\(.*\)\".*/\1/"

もちろん、実行可能かつ到達可能にしますchmod a+x git-ls; sudo cp git-ls /usr/local/bin。今、あなたはあなたが望むようにそれを実行するだけです:

git-ls https://github.com/mrquincle/aim-bzr
git-ls https://github.com/mrquincle/aim-bzr/tree/master/aim_modules

git instawebローカルファイル用のユーティリティがあることも知っています。ファイルを表示する機能とそのようなサーバーを持つことは、私の意見ではgitの固有の分散特性を破壊しません。


これで結果が出ません。curlは何も返さないようです。
マシューは

Anarugのapiメソッドをぜひお勧めします。このメソッドは、まだ動作かかわら:curl -s https://github.com/Itseez/opencv | grep js-directory-link | sed 's|.* title="\(.*\)".*|\1|'
アン・バン・ロッサム

-1

チェックしたいリモートブランチがわかっている場合は、次の方法で最新のものを見つけることができます。

git ls-tree -r <remote_branch> --name-only

8
以前レポのクローンを作成していない場合:(それは仕事をしません
バリントシゲティ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.