Пример толчка мерзавца, использующего или бурный или песок
Я ищу несколько примеров кода, для грубых или грит, показывающих, как сделать git push
,
Фон
У меня есть грабли deploy:staging
а также deploy:production
что я использую для развертывания моего приложения.
Я развертываю на героку, поэтому по этим задачам по сути делаю следующее:
- Получить самый последний тег (например,
git describe --abbrev=0
) - Переместите версию, представленную этим тегом, на указанный пульт (например,
git push staging v1.00
) - Храните версию в конфиге 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)
Да, глупо ставить НЕОБЯЗАТЕЛЬНЫЕ опции в начале, но так написано.