Как я могу экспортировать задачи GitHub в Excel?

Как я могу экспортировать все свои задачи из репозитория Enterprise GitHub в файл Excel? Я пытался найти много ответов на переполнение стека, но безуспешно. Я тоже пробовал это решение (экспортировать проблемы Git в CSV и получать "ImportError: No module именованные запросы». Есть ли какой-либо инструмент или простой способ экспортировать все проблемы в Excel?


person mmar    schedule 28.12.2016    source источник
comment
Вам нужно будет использовать API для перебора каждого репозитория, для которого вы хотите экспортировать данные. Я бы предложил использовать ruby ​​octokit как быстрый способ взаимодействия с GitHub. Этот вопрос, как есть, скорее всего, будет отклонен, если вы не добавите больше кода или подробностей о том, что вы пробовали.   -  person osowskit    schedule 29.12.2016


Ответы (12)


Чтобы экспортировать из частного репо с помощью curl, вы можете запустить следующее:

curl -i https://api.github.com/repos/<repo-owner>/<repo-name>/issues --header "Authorization: token <token>" 

Токен можно сгенерировать в разделе токены личного доступа.

Все подробности смотрите в описании API.

person smbuthia    schedule 30.08.2017
comment
Я получаю только все ОТКРЫТЫЕ проблемы. Есть ли параметр запроса, который указывает все проблемы, открытые или закрытые? - person AgilePro; 13.04.2018
comment
https://api.github.com/repos/<repo-owner>/<repo-name>/issues?state=allполучит вам все вопросы. Обратите внимание, что запросы на вытягивание также рассматриваются как проблемы, поэтому вы также получите их. Все параметры запроса находятся здесь. - person mbesso; 13.04.2018
comment
почему флаг -i? не было бы лучше, если бы ваш вывод был просто json? - person mwag; 02.05.2019
comment
Аутентификация по паролю станет устаревшей: developer.github.com /изменения/ - person Eric Stdlib; 07.05.2020
comment
Есть ли проблемы с тем, как это сделать, если у вас настроена двухфакторная аутентификация? - person Stephane Grenier; 25.07.2020
comment
Как уже упоминалось, это устарело и не работает, если у вас включена двухфакторная аутентификация. Правильный способ сделать это — создать токен личного доступа на странице github.com/settings/tokens и затем передайте это значение в качестве заголовка: curl -i https://api.github.com/repos/<repo-owner>/<repo-name>/issues --header "Authorization: token <token>" - person tom-james-watson; 04.11.2020

Оболочка командной строки hub для github делает это довольно просто.

Вы можете сделать что-то вроде этого:

$ hub issue -f "%t,%l%n" > list.csv

что дает вам что-то вроде этого

$ more issue.csv

Issue 1 title, tag1 tag2
Issue 2 title, tag3 tag2
Issue 3 title, tag1
person chip    schedule 13.08.2019
comment
Это абсолютно лучший способ сделать это, который я пробовал из этих ответов. Чтобы показать вам, насколько это мощно, следующая команда hub issue -s all -d 2019-08-20 -o updated --include-pulls -f "%U|%t|%S|%cI|%uI|%L%n" > issues.csv экспортирует все задачи, обновленные с 20 августа 2019 г., включая запросы на вытягивание, и выводит их как | разделенный CSV. - person Richard J; 28.01.2020
comment
Согласитесь, отличный метод. Сначала мне было непонятно: 1) Запустите команду в папке, содержащей интересующий клонированный репозиторий. 2) Не перенаправляйте на list.csv при первом запуске hub, так как он может запрашивать имя пользователя и пароль, что может привести к зависанию. - person Nick Ager; 14.01.2021

С помощью официального GitHub CLI вы можете легко экспортировать все задачи в формат CSV.

brew install gh

Авторизоваться:

gh auth login

Измените каталог на репозиторий и выполните эту команду:

gh issue list --limit 1000 --state all | tr '\t' ',' > issues.csv

В европейских файлах .csv разделителем является точка с запятой ';', а не запятая. Измените разделитель по своему усмотрению.

person hlorand    schedule 11.10.2020
comment
Это было полезно для меня, хотя в CSV по умолчанию используются разделители-запятые, и полезно показать использование отправки вывода в файл gh issue list --limit 1000 --state all | tr '\t' ',' > my_issues.csv - person Rob; 29.10.2020
comment
спасибо Вполне нормально! Примечание. Чтобы правильно открыть CSV в Excel на MacOS, я заменил , на ; в строке сценария. - person jeff_drumgod; 10.11.2020

Если это одноразовая задача, вы можете поиграть с GitHub WebAPI. Это позволяет экспортировать задачи в формате JSON. Затем вы можете преобразовать его в Excel (например, с помощью некоторого онлайн-конвертера).

Просто откройте следующий URL-адрес в браузере, заменив {owner} и {repo} реальными значениями:

https://api.github.com/repos/{owner}/{repo}/issues?page=1&per_page=100

person Serhii Shushliapin    schedule 29.12.2016
comment
При попытке это работает только для общедоступных репозиториев (выдает ошибку не найдено для частных репозиториев). Он также не включает комментарии, хотя и сообщает вам, сколько комментариев имеется. - person Jason; 11.07.2017
comment
@Jason Вы нашли способ также загружать комментарии и их вложения? - person Nicolas; 18.02.2018
comment
@NicolasMaltais, комментарии также доступны через APi, поэтому для этого будет конечная точка (подробности здесь developer.github.com/v3/issues/comments). На все вложения ссылаются с помощью тегов уценки, поэтому вам нужно будет проанализировать их, чтобы получить URL-адреса для вложений, и загрузить их отдельно. Если вы перестраиваете вопросы и комментарии в другом месте, вам, вероятно, потребуется изменить эти URL-адреса, чтобы они указывали на ваше новое хранилище вложений. - person Jason; 19.02.2018

К сожалению, github.com не упрощает эту задачу.

В то же время, если у вас есть jq и curl, вы можете сделать это в две строки, используя что-то вроде следующего примера, который выводит номер проблемы, заголовок и метки (теги) и работает также для частных репозиториев (если вы не хотите чтобы отфильтровать по метке, просто удалите часть labels={label}& URL-адреса). Вам нужно будет заменить $owner, $repo, $label и $username:

# with personal access token = $PAT
echo "number, title, labels" > issues.csv
curl "https://api.github.com/repos/$owner/$repo/issues?labels=$label&page=1&per_page=100" -u "$username:$PAT" \
| jq -r '.[] | [.number, .title, (.labels|map(.name)|join("/"))]|@csv' >> issues.csv

# without PAT (will be prompted for password)
echo "number, title, labels" > issues.csv
curl "https://api.github.com/repos/$owner/$repo/issues?labels=$label&page=1&per_page=100" -u "$username" \
| jq -r '.[] | [.number, .title, (.labels|map(.name)|join("/"))]|@csv' >> issues.csv

Обратите внимание, что если ваши данные превышают 1 страницу, могут потребоваться дополнительные вызовы.

person mwag    schedule 01.05.2019
comment
Чтобы добавить свой OTP, просто добавьте заголовок к запросу curl следующим образом: -H "GitHub-OTP: XXXXXX" - person Adam Reis; 17.01.2020
comment
Можно ли расширить эту команду, чтобы она также извлекала тело каждой задачи? - person Camille Goudeseune; 31.01.2020
comment
Когда я только что попробовал это, github прислал мне электронное письмо: вы недавно использовали пароль для доступа к конечной точке через API GitHub, используя curl/7.35.0. Мы скоро прекратим поддержку базовой аутентификации с использованием пароля для этой конечной точки: ... Мы рекомендуем вместо этого использовать токен личного доступа (PAT) с соответствующей областью действия для доступа к этой конечной точке. Посетите github.com/settings/tokens для получения дополнительной информации. - person Camille Goudeseune; 31.01.2020
comment
Благодарю вас! Я обновил ответ, чтобы также предоставить синтаксис при использовании PAT. - person mwag; 02.02.2020
comment
@CamilleGoudeseune предполагает, что когда вы говорите body, вы имеете в виду комментарии, связанные с проблемой, для получения команда должна быть дополнительно расширена, чтобы каждая запись выполняла дополнительный вызов API github для получения комментариев для каждой проблемы, например. как описано в developer.github.com/v3/ вопросы/комментарии/ - person mwag; 02.02.2020

Я попробовал методы, описанные в других комментариях, относительно экспорта проблем в формате JSON. Он работал нормально, но форматирование было каким-то образом накручено. Затем я обнаружил в справке Excel, что он может напрямую обращаться к API и аккуратно загружать данные из ответа JSON в мои листы Excel.

Термины Google, которые я использовал, чтобы найти необходимую мне помощь, были «excel power query web.content GET json». Я нашел видео How To Excel, которое очень помогло.

URL-адрес, который работал в запросе Excel (такой же, как и в других сообщениях):

https://api.github.com/repos/{owner}/{repo}/issues?page=1&per_page=100

Лично я тоже добавляю параметр &state=open, иначе нужно запрашивать сотни страниц. В какой-то момент я достиг установленного GitHub лимита вызовов API без аутентификации в час для моего IP-адреса.

person Stuart    schedule 10.10.2018

Вы также можете попробовать https://github.com/remoteorigin/git-issues-downloader но обязательно используйте ветку разработки. Версия npm и основная ветка содержат ошибки.

Или вы можете использовать эту исправленную версию с

npm install -g https://github.com/mkobar/git-issues-downloader

а затем запустите (для публичного репо)

git-issues-downloader -n -p none -u none https://github.com/<user>/<repository>

или для частного репо:

git-issues-downloader -n -p <password or token> -u <user> https://github.com/<user>/<repository>

Работает отлично.

person greenspinnything    schedule 18.12.2019
comment
По состоянию на февраль 2020 г. 2FA не поддерживается :( - person Anastasios Andronidis; 22.02.2020

Вот инструмент, который сделает это за вас (использует GitHub API): https://github.com/gavinr/github-csv-tools

person GavinR    schedule 19.04.2020
comment
Спасибо, только что использовал его, и он экспортировал прекрасный CSV! - person Aldekein; 12.11.2020

Я довольно долго возился с этим и обнаружил, что Power BI — это хороший способ поддерживать актуальность данных в электронной таблице. Мне пришлось немного изучить Power BI, чтобы заставить это работать, потому что получение правильной информации из структурированных полей JSON и свертывание списков в конкатенированные строки, особенно для меток, было не очень интуитивным. Но этот запрос Power BI хорошо работает для меня, удаляя весь шум и предоставляя необходимую информацию в легко усваиваемом формате, который можно просмотреть с заинтересованными сторонами:

let
    MyJsonRecord = Json.Document(Web.Contents("https://api.github.com/repos/<your org>/<your repo>/issues?&per_page=100&page=1&state=open&filter=all", [Headers=[Authorization="Basic <your auth token>", Accept="application/vnd.github.symmetra-preview+json"]])),
    MyJsonTable = Table.FromRecords(MyJsonRecord),
    #"Column selection" = Table.SelectColumns(MyJsonTable,{"number", "title", "user", "labels", "state", "assignee", "assignees", "comments", "created_at", "updated_at", "closed_at", "body"}),
    #"Expanded labels" = Table.ExpandListColumn(#"Column selection", "labels"),
    #"Expanded labels1" = Table.ExpandRecordColumn(#"Expanded labels", "labels", {"name"}, {"labels.name"}),
    #"Grouped Rows" = Table.Group(#"Expanded labels1", {"number","title", "user", "state", "assignee", "assignees", "comments", "created_at", "updated_at", "closed_at", "body"}, {{"Label", each Text.Combine([labels.name],","), type text}}),
    #"Removed Other Columns" = Table.SelectColumns(#"Grouped Rows",{"number", "title", "state", "assignee", "comments", "created_at", "updated_at", "closed_at", "body", "Label"}),
    #"Expanded assignee" = Table.ExpandRecordColumn(#"Removed Other Columns", "assignee", {"login"}, {"assignee.login"})
in
    #"Expanded assignee"

Я добавил, а затем удалил столбцы в этом и не очищал это - не стесняйтесь делать это, прежде чем использовать его. Очевидно, что вы также должны указать название своей организации и имя репозитория в URL-адресе и получить токен авторизации. Я протестировал URL-адрес с плагином Chrome REST и получил токен от ввода пользователя и ключа API. Вы можете пройти аутентификацию явно из Excel с помощью пользователя и ключа, если не хотите иметь дело с токеном. Я просто считаю, что проще использовать анонимный маршрут в настройке запроса и вместо этого предоставить легко отформатированный заголовок запроса.

Кроме того, это работает для репозиториев, содержащих до 100 открытых выпусков. Если у вас больше, вам нужно продублировать запрос (для страницы 2 и т. д.) и объединить результаты.

Шаги для использования этого запроса:

  • на новом листе на вкладке "Данные" откройте раскрывающийся список "Получить данные"
  • выберите «Запустить редактор Power Query»
  • в редакторе выбираем "Новый запрос", "Другие источники", "Пустой запрос"
  • теперь вы нажимаете «Расширенный редактор» и вставляете приведенный выше запрос
  • нажмите кнопку «Готово» в расширенном редакторе, затем «Закрыть и загрузить» на панели инструментов.
  • проблемы загружаются в вашу таблицу, и вы находитесь в бизнесе
  • никакой дрянной сторонний инструмент не нужен
person cdonner    schedule 20.11.2019
comment
Мне не удалось заставить это работать с заголовком авторизации, но я удалил этот заголовок и поместил свое имя пользователя и токен PAT в базовый раздел «Настройки источника данных» > «Редактировать разрешения» > диалоговое окно «Доступ к веб-содержимому». - person Daz; 19.07.2021
comment
Стандартный заголовок accept в документации Github теперь называется application/vnd.github.v3+json. - person Daz; 19.07.2021

Экспорт запросов на вытягивание может экспортировать задачи в файл CSV, который можно открыть в Excel. . Он также поддерживает GitLab и Bitbucket.

Из его документации:

Экспортируйте открытые PR и задачи в sshaw/git-link и sshaw/itunes_store_transporter:

epr sshaw/git-link sshaw/itunes_store_transporter › pr.csv

Экспортировать открытый запрос на вытягивание, не созданный sshaw, в padrino/padrino-framework:

epr -x pr -c '!sshaw' padrino/padrino-framework › pr.csv

У него есть несколько опций для фильтрации того, что экспортируется.

person Dumb E.    schedule 26.07.2018

GitHub JSON API можно запрашивать непосредственно в Excel с помощью Power Query. Это требует некоторых знаний о том, как преобразовать JSON в формат таблицы Excel, но это довольно удобно для Google.

Вот как сначала добраться до данных:

  • В Excel на ленте щелкните Данные > Получить данные > Из JSON. В диалоговом окне введите URL-адрес API... в формате, подобном (добавьте параметры по своему усмотрению): https://api.github.com/repos/{владелец}/{repo}/issues

  • Появится диалоговое окно с надписью «Доступ к веб-содержимому».

  • С левой стороны щелкните вкладку «Основные».

  • В текстовом поле Имя пользователя введите свое имя пользователя GitHub.

  • В текстовом поле «Пароль» введите пароль/токен личного доступа GitHub.

  • Щелкните Подключиться.

  • Редактор Power Query будет отображаться со списком элементов с надписью «Запись».

... теперь погуглите, как соответствующим образом преобразовать, чтобы соответствующие данные о проблеме можно было отображать в виде одной таблицы.

person Henry Staples    schedule 22.04.2020

В качестве разовой задачи, основанной на рекомендации @Chip на основе «концентратора»... в системе Windows с уже установленной подсказкой GitBash:

  1. Загрузите последний исполняемый файл концентратора (например, для 64-разрядной версии Windows) https://github.com/github/hub/releases/ и распакуйте его (hub.exe находится в каталоге .../bin).

  2. Создайте токен личного доступа github https://github.com/settings/tokens и скопируйте текст токена. строку в буфер обмена.

  3. Создайте текстовый файл (например, в блокноте) для использования в качестве входного файла для hub.exe... первая строка — это ваше имя пользователя github, а во второй строке вставьте токен личного доступа, а затем новую строку (чтобы оба линии будут обрабатываться при вводе в хаб). Здесь я предполагаю, что файл infile.txt находится в базовом каталоге репозитория.

  4. Запустите Git Bash... и не забудьте cd (сменить каталог) на интересующий вас репозиторий! Затем введите строку вида:

    ‹path_to_hub_folder›/bin/hub.exe issue -s all -f %U|%t|%S|%cI|%uI|%L%n ‹ infile.txt › outfile.csv

  5. Затем откройте файл с помощью '|' как разделитель столбцов. (и рассмотрите возможность удаления токена личного доступа на github).

person timeNtrack    schedule 01.12.2020