23

指定された相対パスの下にあるファイルがリモートに存在するかどうかを確認する方法はありますか? それが唯一のオプションである場合は、最初に情報を取得しても問題ありません。つまり、リモートとブランチを指定するオプションを備えた git-ls-files を探しています。ファイルが存在する場合にのみ関心があります (ブランチ上のファイルのリストも同様です)。ハッシュや差分などは気にしません。

4

2 に答える 2

31

使用できます

git cat-file -e <remote>:<filename>

ファイルが存在する場合、ゼロで終了します。上記の代わりに<remote>、リモート ブランチ名を使用します (ただし、実際にはツリー風のオブジェクト参照である可能性があります)。このようなリモート ブランチを使用するには、リモート リポジトリを構成してフェッチする必要があります (つまり、git remote add+を使用しますgit fetch)。

具体例:

$ git cat-file -e origin/master:README && echo README exists
README exists

$ git cat-file -e origin/master:FAILME
fatal: Not a valid object name origin/master:FAILME

2 つの注意事項:

  • /Windows などでも、ファイル名のパス区切り文字として使用します。
  • <filename>foo/bar/READMEリポジトリのルートを基準とした絶対パス ( など) です。
于 2010-11-09T15:04:09.377 に答える
9

git archiveを使用すると、リポジトリの他の部分をダウンロードせずに個々のファイルにアクセスできます。

if git archive --format=tar \
               --remote=<remote_name-or-URL> master README >/dev/null; then
  echo 'master has README'
else
  echo 'master does not have README (or other error)'
fi

ただし、アーカイブ サービス ( upload-archive) はすべてのサーバーまたはリポジトリで有効になっているわけではありません。アクセスする必要があるサーバーおよびリポジトリについてテストする必要があります。

アーカイブ サービスが利用できない場合は、通常の方法でオブジェクトをフェッチする必要があります。

問題のリポジトリのリモート設定がまだない場合は、FETCH_HEAD への「浅い」フェッチを行うことができます (これは Git リポジトリで行う必要がありますが、完全に無関係であるか、空の場合もあります)。

git fetch --depth=1 remote_name-or-URL master
if git rev-parse --verify --quiet FETCH_HEAD:README >/dev/null; then
  echo "repository's master has README"
else
  echo "repository's master does not have README"
fi

リポジトリにリモートが定義されている場合は、おそらくそれを更新して、通常のリモート追跡ブランチを介してファイルにアクセスしたいだけです。

git fetch remote_name
if git rev-parse --verify --quiet remote_name/master:README >/dev/null; then
  echo "remote's master has README"
else
  echo "remote's master does not have README"
fi
于 2010-11-09T20:37:42.240 に答える