Git 如何检查远程服务器中是否存在文件?

Git 如何检查远程服务器中是否存在文件?,git,git-remote,Git,Git Remote,有没有办法检查远程数据库中是否存在指定相对路径下的文件?如果这是唯一的选择,我可以先获取信息。换句话说,我正在寻找带有指定远程和分支选项的git ls文件。我只对文件存在感兴趣(分支上的文件列表也可以),我不关心散列、差异等。您可以使用 git cat-file -e <remote>:<filename> 需要注意两件事: 在文件名中使用/作为路径分隔符,即使是在Windows上也是如此 是相对于存储库根目录的完整路径(例如foo/bar/README) 您可以使用

有没有办法检查远程数据库中是否存在指定相对路径下的文件?如果这是唯一的选择,我可以先获取信息。换句话说,我正在寻找带有指定远程和分支选项的git ls文件。我只对文件存在感兴趣(分支上的文件列表也可以),我不关心散列、差异等。

您可以使用

git cat-file -e <remote>:<filename>
需要注意两件事:

  • 在文件名中使用
    /
    作为路径分隔符,即使是在Windows上也是如此
  • 是相对于存储库根目录的完整路径(例如
    foo/bar/README
您可以使用访问单个文件,而无需下载存储库的任何其他部分:

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
如果为存储库定义了远程跟踪,那么您可能只想更新它并通过正常的远程跟踪分支访问文件:

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

您所说的
是指远程分支,这意味着您必须先配置远程并运行
git fetch
;您正在检查回购协议中的远程分支,因此需要确保该分支是最新的。您好@earl谢谢您的回答,但我不明白为什么在这种情况下它不能正常工作。我已成功从远程存储库中删除
.idea/
文件夹,但是不是本地使用code
git-rm--cached-rf.idea
然后我尝试用code
git-cat-file-e origin/branch:./.idea
查看它是否在远程存储库上,它返回了0,这意味着
。idea/
仍在远程存储库上?请注意:
git-archive
解决方案不能可靠地工作。它似乎只检查顶层文件/目录是否存在,例如:
git archive--remote=master dir存在/then/some/aroughts/path
将以0退出
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