Search code examples
gitgit-remote

How do I check if a file exists in a remote?


Is there a way to check if a file under specified, relative path exist in a remote? I'm fine with fetching the info first if it's the only option. In other words I'm looking for git-ls-files with an option to specify remote and branch. I'm only interested if the file exists (a list of files on the branch will do as well), I don't care about hashes, diffs etc.


Solution

  • You can use

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

    which will exit with zero when the file exists. Instead of <remote> above you'd use a remote branch name (but it could in fact be any tree-ish object reference). To use such a remote branch, you'll need to have the remote repository configured and fetched (i.e. by using git remote add + git fetch).

    A concrete example:

    $ 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
    

    Two things to note:

    • Use / as path delimiter in filenames, even on e.g. Windows.
    • <filename> is a full path (such as foo/bar/README), relative to the root of the repository.