Просмотр и отображение файлов в репозитории git без клонирования

Есть ли способ просматривать и отображать файлы в репозитории git без его клонирования? Я могу сделать это в svn, используя команды:

svn ls /path/to/repo 
svn cat /path/to/repo/file-in-repo

Я могу, возможно, использовать git show, но делать:

git show /path/to/repo
git show HEAD:/path/to/repo

результат

fatal: Not a git repository

Ответ 1

Команда, которую вы хотите, git ls-remote, которая позволяет вам получить информацию о удаленных репозиториях, но вы не можете показать историю или список каталогов или что-либо из этого уровня: по существу, это позволяет видеть удаленные объекты на очень высоком уровне (например, вы можете видеть текущие HEAD и теги).

Единственный реальный способ сделать то, что вы хотите (если я правильно понял), - это использовать ssh для запуска удаленной команды и возврата результатов, например:

ssh [email protected] "cd repo && git log -n 10"

То, что вы хотите, было бы прекрасной функциональностью, если бы они могли добавить его, но из того, что я прочитал, это не очень просто, так как получение истории и т.д. требует, чтобы большая часть информации была локальной для git, и в этот момент вы также можете сделали git fetch.

Ответ 2

Git - это система управления версиями распределенная, а Subversion - система управления версиями централизованная (клиент-сервер). Они работают по-разному; привыкнуть к этому. Прочтите мой ответ, объясняющий последствия этой разницы для Git эквивалента вопроса svn status -u в StackOverflow.

Повторяю себя немного: в централизованной системе контроля версий (например, CVS или Subversion) почти все команды обрабатываются на сервере и связаны с сетью. Очень немногие команды выполняются локально. Обратите внимание, что для хорошей производительности "svn status" и "svn diff" Subversion сохраняет "нетронутую копию" проверенной версии на клиенте, чтобы не требовать переноса сети для этих общих операций (это означает, что проверка Subversion = 2 x размер рабочего каталога как минимум).

В распределенной системе управления версиями (например, Git, Mercurial или Bazaar), где у вас есть локальная копия (клон) целого хранилища, почти все команды выполняются на клиенте. Очень мало команд требует сетевого подключения к другому репозиторию (к серверу).

Количество команд, которые вы можете выполнять на сервере, ограничено.

  • Вы можете перечислить все ссылки на удаленном компьютере с помощью Git ls-remote <URL> ".
  • Вы можете получить моментальный снимок (часть) репозитория (если удаленный сервер включил его) с помощью " Git archive --remote = <URL> HEAD".
  • Вы можете клонировать только несколько последних коммитов (так называемый "мелкий клон" ) с помощью " Git clone --depth = 1 <URL> ".
  • Если сервер предоставляет веб-интерфейс git в репозитории, вы можете использовать его для просмотра.

Ответ 3

Посмотрите http://git-scm.com/book/en/Git-Internals-Transfer-Protocols для получения информации о том, как это сделать по некоторым транспортным протоколам. Обратите внимание, что это не будет работать для стандартного git через SSH.

Для git через SSH обновленная серверная сторона git должна позволять вам git -archive непосредственно с удаленного устройства, которое вы могли бы затем, например, pipe to "tar t", чтобы получить список всех файлов в данной фиксации.

Ответ 4

GitHub совместим с svn, поэтому вы можете использовать svn ls

svn ls https://github.com/user/repository.git/branches/master/

BitBucket поддерживает архив git, чтобы вы могли загрузить tar архив и список архивных файлов. Он не очень эффективен, но работает:

git archive [email protected]:repository HEAD directory | tar -t

Ответ 5

Не точный, но способ.

Использовать API разработчика GitHub

Надеюсь, это поможет.

Ответ 6

Вероятно, это считается грязным, но очень практичным решением в случае репозиториев github является просто script, например. "git -ls":

#!/bin/sh
remote_url=${1:? "$0 requires URL as argument"}
curl -s $remote_url | grep js-directory-link | sed "s/.* title=\"\(.*\)\".*/\1/"

Сделать его выполнимым и доступным, конечно: chmod a+x git-ls; sudo cp git-ls /usr/local/bin. Теперь вы просто запускаете его, как хотите:

git-ls https://github.com/mrquincle/aim-bzr
git-ls https://github.com/mrquincle/aim-bzr/tree/master/aim_modules

Также известно, что для ваших локальных файлов есть утилита git instaweb. Чтобы иметь возможность показывать файлы и иметь такой сервер, по моему мнению, не уничтожить какие-либо присущие децентрализованным характеристикам git.

Ответ 7

Если вы знаете удаленную ветку, которую хотите проверить, вы можете узнать последнюю версию через:

git ls-tree -r <remote_branch> --name-only