0

我正在创建一个具有 ruby​​-git ( https://github.com/schacon/ruby-git ) 作为依赖项的 gem (参见https://github.com/hamchapman/rewinder )。

我的部分 gem 有一个可执行文件https://github.com/hamchapman/rewinder/blob/master/bin/rewinder

这基本上只需要主库文件https://github.com/hamchapman/rewinder/blob/master/lib/rewinder.rb

然后在那里运行该方法(目前一切都很混乱-暂时忽略它)。

当我在本地安装 gem 并在另一个 repo 中使用它时,我收到以下错误:

/Users/Hami/.rvm/gems/ruby-2.1.2/gems/git-1.2.7/lib/git/lib.rb:764:in `command': git checkout '6eef72baf24bed761f753267cce16402e4a947f8'  2>&1:Note: checking out '6eef72baf24bed761f753267cce16402e4a947f8'. (Git::GitExecuteError)

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 6eef72b... Trying another bg-color change for homeboy
/Users/Hami/.rvm/gems/ruby-2.1.2@global/gems/bundler-1.6.2/lib/bundler/rubygems_integration.rb:252:in `block in replace_gem': hookup is not part of the bundle. Add it to Gemfile. (Gem::LoadError)
    from /Users/Hami/.rvm/gems/ruby-2.1.2/bin/hookup:22:in `<main>'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/bin/ruby_executable_hooks:15:in `eval'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/bin/ruby_executable_hooks:15:in `<main>'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/gems/git-1.2.7/lib/git/lib.rb:528:in `checkout'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/gems/git-1.2.7/lib/git/base.rb:325:in `checkout'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/gems/rewinder-0.0.1/lib/rewinder.rb:11:in `block in heloo'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/gems/rewinder-0.0.1/lib/rewinder.rb:10:in `each'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/gems/rewinder-0.0.1/lib/rewinder.rb:10:in `each_with_index'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/gems/rewinder-0.0.1/lib/rewinder.rb:10:in `heloo'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/gems/rewinder-0.0.1/bin/rewinder:4:in `<top (required)>'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/bin/rewinder:23:in `load'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/bin/rewinder:23:in `<main>'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/bin/ruby_executable_hooks:15:in `eval'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/bin/ruby_executable_hooks:15:in `<main>'

我真的不明白这个错误,因为我的 gem 和 ruby​​-git gem 都没有hookup作为依赖项。如果我加载文件/Users/Hami/.rvm/gems/ruby-2.1.2/bin/hookup

然后像这样注释掉底部的两行:

#!/usr/bin/env ruby_executable_hooks
#
# This file was generated by RubyGems.
#
# The application 'hookup' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'rubygems'

version = ">= 0"

if ARGV.first
  str = ARGV.first
  str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
  if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
    version = $1
    ARGV.shift
  end
end

#gem 'hookup', version
#load Gem.bin_path('hookup', 'hookup', version)

那么错误不会发生。

从我读到的内容看来,这可能与 oh-my-zsh 包装某些命令的方式有关 - 也许它正在包装一个 git 命令?

有什么建议么?

4

1 回答 1

1

连接文档

每次您当前的 HEAD 更改时,连接检查以查看您的GemfileGemfile.lock或 gem 规格是否已更改。如果是这样,它运行捆绑检查,如果这表明任何依赖项不满足,它运行捆绑安装。

从这里我收集到 gem 监听git checkout事件。既然你在你的代码中这样做了,hookup hooks 就会变得生动起来,并且会感到困惑(不管它是否是你的 ruby​​ 应用程序的一部分)。

尝试卸载 gem 并重试。

如果这解决了您的问题,您可能会考虑向 gem 的作者提出问题以解决此问题。

于 2014-07-30T09:42:48.860 回答