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

Я ищу несколько примеров кода, для грубых или грит, показывающих, как сделать git push,

Фон

У меня есть грабли deploy:staging а также deploy:production что я использую для развертывания моего приложения.

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

  1. Получить самый последний тег (например, git describe --abbrev=0)
  2. Переместите версию, представленную этим тегом, на указанный пульт (например, git push staging v1.00)
  3. Храните версию в конфиге heroku var (например. heroku config:add APP_VERSION=v1.00)

(Там также есть несколько проверок, чтобы убедиться, что я не забыл создать новый тег перед нажатием и т. Д.)

Первоначально я использовал системные вызовы из моего Rakefile для этих команд CLI; затем я перешел к использованию драгоценных камней git и heroku-api.

Тем не менее, git gem, похоже, заброшен (в прошлом году никаких коммитов не было); кажется, что Grit и Rugged теперь являются стандартными жемчужинами для работы с Git.

К сожалению, из-за отсутствия документации я не могу понять, как сделать git push с любой из этих библиотек.

(В следующих примерах предположим, что удаленный / ветвь, на которую я нажимаю, является origin / master и уже настроен как удаленный в локальном репо)

Начиная с бурного:

$ irb
2.0.0-p0 :001 > require 'rugged'
 => true 
2.0.0-p0 :002 > repo = Rugged::Repository.new('/path/to/repo')
 => #<Rugged::Repository:0x007fe8b48821c0 @encoding=#<Encoding:UTF-8>> 
2.0.0-p0 :003 > remote = Rugged::Remote.lookup(repo, 'origin')
 NoMethodError: undefined method `lookup' for Rugged::Remote:Class

Теперь для песка:

$ irb
2.0.0-p0 :001 > require 'grit'
 => true 
2.0.0-p0 :002 > repo = Grit::Repo.new('/path/to/repo')
 => #<Grit::Repo "/path/to/repo/.git"> 
2.0.0-p0 :004 > remote = repo.remotes.last
 => #<Grit::Remote "origin/master"> 
2.0.0-p0 :005 > repo.git.push(remote)
NoMethodError: undefined method `delete' for #<Grit::Remote "origin/master">

Любая помощь будет принята с благодарностью.

2 ответа

Решение

Хорошо, я думаю, что я понял это, НО теперь он запрашивает мои учетные данные gitHub, и я не могу набрать свои учетные данные, потому что я получаю ошибку "Timeout".

Вот что я сделал:

Добавьте удаленное репо в проект:

repo.git.remote ({}, 'add', 'RemoteRepoName', ' https://github.com//.git')

Нажмите, чтобы GitHub

pusher = repo.git.push ({: process_info => true,: progress => true}, 'RemoteRepoName', 'master')

С grit repo.git.push фактически вызывает Git#native через method_missing. Его подпись такова:

def native(cmd, options = {}, *args, &block)

поэтому вы хотите сделать следующее:

repo.git.push({}, remote)

Да, глупо ставить НЕОБЯЗАТЕЛЬНЫЕ опции в начале, но так написано.

Другие вопросы по тегам