Как вы можете перечислить все файлы в основной ветке удаленного репозитория (без локальной копии) [дублировать]

Как указано в комментариях, file является blob:

file instanceof Blob; // true

И вы можете получить его содержимое с API-интерфейсом чтения файлов https: //developer.mozilla. org / en / docs / Web / API / FileReader

Подробнее: https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications

var input = document.querySelector('input[type=file]');

function readFile(event) {
  document.body.textContent = event.target.result;
  console.log(event.target.result);
}

function changeFile() {
  var file = input.files[0];
  var reader = new FileReader();
  reader.addEventListener('load', readFile);
  reader.readAsText(file);
}

input.addEventListener('change', changeFile);

89
задан ianalis 24 July 2009 в 16:23
поделиться

7 ответов

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

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

ssh me@otherhost "cd repo && git log -n 10"

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

64
ответ дан Nightfirecat 18 August 2018 в 07:12
поделиться
  • 1
    Однако одна вещь, которую вы можете сделать с git clone, - это получить только одну ревизию, передав --depth 1. Это позволяет избежать получения потенциально большого количества истории и будет достаточным для ответа на такие вопросы, как «какие файлы присутствуют в ревизии abcdef1234567890 – ctrueden 6 August 2015 в 22:06

Вероятно, это считается грязным, но очень практичным решением в случае репозиториев github является просто создание скрипта, например. "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.

2
ответ дан Anne van Rossum 18 August 2018 в 07:12
поделиться
  • 1
    Я не получаю никаких результатов. завиток, кажется, ничего не возвращает. – Matthew Read 2 February 2015 в 18:24
  • 2
    Я бы определенно рекомендовал метод api от Anarug. Этот метод все еще работает: curl -s https://github.com/Itseez/opencv | grep js-directory-link | sed 's|.* title="\(.*\)".*|\1|' – Anne van Rossum 11 February 2015 в 23:00

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

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

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

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

  • Вы можете перечислить все ссылки на удаленном компьютере с помощью « git ls-remote & lt; URL & gt;».
  • Вы можете получить моментальный снимок (часть) репозитория (если удаленный сервер включил его) с помощью « git archive --remote = & lt; URL & gt; HEAD".
  • Вы можете клонировать только несколько последних коммитов (так называемый «мелкий клон») с « git clone --depth = 1 & lt; URL & gt;».
  • Если сервер предоставляет git веб-интерфейс в репозиторий, вы можете использовать его для просмотра.
17
ответ дан Community 18 August 2018 в 07:12
поделиться
  • 1
    Насколько вы правы, если вы просматриваете удаленное репо без его первого клонирования, то, очевидно, вы решили отказаться от автономных возможностей git. Учитывая это, я не вижу причин делать вид, что это не будет полезной функцией для некоторых вещей, например локального клиента, который позволяет вам просматривать содержимое файла удаленного репо на локальном компьютере. – LadyCailin 1 November 2012 в 17:44
  • 2
    Согласитесь, позиция, которую занимает Якуб, крайне ограничительна. Стоит потерять репутацию не один раз, чтобы указать на это. – ctpenrose 19 July 2013 в 01:09
  • 3
    Мне не нравится «привыкать к тому», tone., но когда я прочитал до конца, я нашел решение моей текущей проблемы - чтобы посмотреть, что находится в репозитории 110, у меня есть один git, но без доступа к ssh или оболочке и которые, вероятно, довольно большие, около 12 ГБ или около того , Таким образом, клон с минимальной глубиной помогает, по крайней мере, видеть только недавнюю интересную историю. и сделать репозиторий git как можно меньше. – Henning 5 March 2014 в 12:55
  • 4
    Такая функциональность была бы неплохо иметь в случае инструментов проверки кода, где вам не нужно всего репо, достаточно всего журнала с изменениями. – Lukasz Lenart 21 March 2014 в 11:09
  • 5
    @ Хеннинг. Правильно, я думаю, вы могли бы назвать это «git used to the & quot; тон LOL – S.N. 20 September 2017 в 02:57

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

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

16
ответ дан Crowie 18 August 2018 в 07:12
поделиться

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

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

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

git archive --remote=git@bitbucket.org:repository HEAD directory | tar -t
8
ответ дан fela 18 August 2018 в 07:12
поделиться

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

git ls-tree -r <remote_branch> --name-only
2
ответ дан LinconFive 18 August 2018 в 07:12
поделиться

Не точный, но способ вокруг.

Использовать API-интерфейс разработчика GitHub

  1. . При открытии этого кода вы получите последние коммиты. https://api.github.com/repos/learningequality/ka-lite/commits Вы можете получить конкретные детали коммита, добавив хеш фиксации в конец указанного выше URL.
  2. Все файлы (вам нужно sha для основного дерева) https://api.github.com/repos/learningequality/ka-lite/git/trees/7b698a988683b161bdcd48a949b01e2b336b4c01

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

3
ответ дан Ryan The Leach 18 August 2018 в 07:12
поделиться
  • 1
    Не путайте Git с GitHub - я считаю, что исходные вопросы касались самого Git. Git установки / хостинги (GitHub / BitBucket / Stash) могут иметь различные возможности для репозиториев браузера. – Krzysztof Wolny 25 February 2015 в 09:04
  • 2
    Хорошая идея @ Анураг Канунго Мышление вне коробки – eonist 7 September 2017 в 21:22
Другие вопросы по тегам:

Похожие вопросы: