Как проверить, существует ли файл на удаленном компьютере?
Есть ли способ проверить, существует ли файл с указанным относительным путем на удаленном компьютере? Я в порядке, сначала получаю информацию, если это единственный вариант. Другими словами, я ищу git -ls файлы с возможностью указания удаленного и ветки. Мне просто интересно, существует ли файл (список файлов на ветке тоже будет работать), мне не нужны хэши, diff и т.д.
Ответы
Ответ 1
Вы можете использовать
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
Следует отметить две вещи:
- Используйте
/
как разделитель путей в именах файлов, даже напр. Окна.
-
<filename>
- полный путь (например, foo/bar/README
) относительно корня репозитория.
Ответ 2
Вы можете использовать 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 master has README"
else
echo "repository 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 master has README"
else
echo "remote master does not have README"
fi