有没有办法检查远程中是否存在指定的相对路径下的文件?如果这是唯一的选择,我可以先获取信息。换句话说,我正在寻找带有指定远程和分支选项的 git-ls-files。我只对文件存在感兴趣(分支上的文件列表也可以),我不关心哈希、差异等。
问问题
18543 次
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
有两点需要注意:
- 用作文件
/
名中的路径分隔符,即使在例如 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 回答