回答:
必要なコマンドはgit ls-remote
、リモートリポジトリに関するいくつかの情報を取得することですが、履歴を表示したり、ディレクトリまたはそのレベルの何かをリストしたりすることはできません。基本的に、非常に高レベルでリモートオブジェクトを表示することしかできません(現在のHEADとタグなど)。
(私が正しく理解している場合)希望することを行う唯一の実際の方法は、sshを使用してリモートコマンドを実行し、結果を返すことです。次に例を示します。
ssh me@otherhost "cd repo && git log -n 10"
あなたが欲しいものは、彼らがそれを追加できれば素敵な機能でしょうが、私が読んだものからは、履歴などを取得するためにgitにローカルであるために多くの情報が必要なので、それは非常に簡単ではありません。 。
Gitは分散バージョン管理システムですが、Subversionは集中型(クライアント/サーバー)バージョン管理システムです。動作は異なります。それに慣れる。StackOverflow でのsvn status -u
質問に相当するgitに対するその違いの結果を説明する私の回答を読んでください。
少し繰り返しますが、集中管理されたバージョン管理システム(CVSやSubversionなど)では、ほとんどすべてのコマンドがサーバー上で処理され、ネットワークが関与します。ローカルで実行されるコマンドはほとんどありません。「svn status」と「svn diff」の優れたパフォーマンスを得るために、Subversionはクライアントにチェックアウトバージョンの「元のコピー」を保存し、これらの一般的な操作でネットワーク転送を行う必要がないことに注意してください(つまり、Subversionチェックアウト= 2 x少なくとも作業ディレクトリのサイズ)。
リポジトリ全体のローカルコピー(クローン)がある分散バージョン管理システム(Git、Mercurial、Bazaarなど)では、ほとんどすべてのコマンドがクライアントで実行されます。他のリポジトリ(サーバー)へのネットワーク接続を必要とするコマンドはほとんどありません。
サーバーで実行できるコマンドの数は限られています。
一部のトランスポートプロトコルでこれを行う方法については、http://git-scm.com/book/en/Git-Internals-Transfer-Protocolsを参照してください。これはSSH経由の標準gitでは機能しないことに注意してください。
SSH経由のgitの場合、最新のサーバー側gitを使用すると、リモートから直接git-archiveを実行できます。たとえば、「tar t」にパイプして、特定のコミットのすべてのファイルのリストを取得できます。
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
正確ではありませんが、回避策です。
GitHub Developer APIを使用する
これを開くと、最近のコミットが表示されます。
https://api.github.com/repos/learningequality/ka-lite/commits
上記のURLの最後にコミットハッシュを添付すると、特定のコミットの詳細を取得できます。
すべてのファイル(メインツリーにはshaが必要です)
これがお役に立てば幸いです。
これはおそらく一部の人によって汚いと考えられていますが、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 -s https://github.com/Itseez/opencv | grep js-directory-link | sed 's|.* title="\(.*\)".*|\1|'
git clone
ただし、でできることの1つは、を渡して単一のリビジョンのみをフェッチすること--depth 1
です。これにより、潜在的に大量の履歴を取得することが回避され、abcdef1234567890
「リビジョンに存在するファイルは何か」などの質問に答えるのに十分です。