GitHub v3 API — как создать первоначальную фиксацию в репозитории?

Я использую v3 API, и мне удалось вывести список репозиториев/деревьев/ветвей, получить доступ к содержимому файлов и создать BLOB/деревья/коммиты. Сейчас я пытаюсь создать новое репо, и мне удалось сделать это с помощью «POST user/repos».

Но когда я пытаюсь создать blobs/trees/commits/references в этом новом репо, я получаю то же сообщение об ошибке. (409) «Репозиторий Git пуст». Очевидно, я могу пойти и инициировать репозиторий самостоятельно через командную строку git, но мне бы хотелось, чтобы мое приложение сделало это за меня.

Есть ли способ сделать это? Что мне нужно сделать в первую очередь через API после того, как я создам пустой репозиторий?

Спасибо


person Rui Viana    schedule 28.05.2012    source источник
comment
Похоже, они еще не поддерживают его, stackoverflow.com/questions/9670604/   -  person aclark    schedule 29.05.2012


Ответы (3)


С 2012 года теперь можно автоматически инициализировать репозиторий после создания, согласно эта запись в блоге опубликована в блоге GitHub:

Сегодня мы упростили добавление коммитов в репозиторий через GitHub API. До сих пор вы могли создать репозиторий, но вам нужно было инициализировать его локально через ваш Git-клиент перед добавлением каких-либо коммитов через API.

Теперь вы можете дополнительно инициализировать репозиторий при его создании, отправив значение true для параметра auto_init:

curl -i -u pengwynn \
     -d '{"name": "create-repo-test", "auto_init": true}' \
     https://api.github.com/user/repos 

Полученный репозиторий будет иметь заглушку README и первоначальную фиксацию.

person Jai Pandya    schedule 02.02.2013

Обновление от мая 2013 г.: обратите внимание, что API контента репозитория теперь авторизует добавление файлов.

См. "Файл CRUD и репозиторий статистика теперь доступна в API".


Оригинальный ответ (май 2012 г.)

Поскольку, похоже, он еще не поддерживается ("GitHub v3 API: как создать начальную фиксацию для моего нового блестящего репозитория?", as aclark комментарии), вы можете начать с отправки начального пустого коммита.

git commit --allow-empty -m 'Initial commit'
git push origin master

В любом случае рекомендуется инициализировать свой репозиторий.< br> И это показано в "полусекретном пустом дереве git ".

person VonC    schedule 29.05.2012
comment
Благодарю. Действительно странно, что API поддерживает создание репозиториев, но не их инициализацию. - person Rui Viana; 03.06.2012

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

  1. Создайте репозиторий, используя параметр auto_init, как в ответе Джая Пандья; или, если репозиторий уже существует, используйте конечная точка создания файла для создания фиктивного файла — это создаст ветку:
PUT https://api.github.com/repos/USER/REPO/contents/dummy

{
  "branch": "master",
  "message": "Create a dummy file for the sake of creating a branch",
  "content": "ZHVtbXk="
}

Это даст вам кучу данных, включая SHA фиксации, но вы можете отбросить все это, так как мы собираемся уничтожить эту фиксацию.

  1. Используйте конечную точку создания фиксации, чтобы создать фиксацию, которая указывает в пустое дерево:
POST https://api.github.com/repos/USER/REPO/git/commits

{
  "message": "Initial commit",
  "tree": "4b825dc642cb6eb9a060e54bf8d69288fbee4904"
}

На этот раз вам нужно принять к сведению возвращенный коммит SHA.

  1. Используйте конечную точку ссылки на обновление, чтобы ветка указывала на коммит, который вы только что создали (обратите внимание на Use Of The ForceTM):
PATCH https://api.github.com/repos/USER/REPO/git/refs/heads/master

{
    "sha": "<the SHA of the commit>",
    "force": true
}
  1. Готово! Ваш репозиторий теперь имеет одну ветку, одну фиксацию и ноль файлов.
person Konamiman    schedule 25.11.2018
comment
Интересный. +1. Я задокументировал пустое дерево в stackoverflow.com/a/9766506/6309. - person VonC; 26.11.2018