109

In my gemfile I have this:

gem "authlogic", :git => "git://github.com/odorcicd/authlogic.git", :branch => "rails3"

How do I install that as a gem so I can test it?

Lance
  • 75,200
  • 93
  • 289
  • 503

4 Answers4

223

You don't need to build the gem locally. In your gemfile you can specify a github source with a ref, branch or tag.

gem 'rails', git: 'git://github.com/rails/rails.git', ref: '4aded'
gem 'rails', git: 'git://github.com/rails/rails.git', branch: '2-3-stable'
gem 'rails', git: 'git://github.com/rails/rails.git', tag: 'v2.3.5'

Then you run bundle install or the short form is just bundle.

Read more about it here: http://bundler.io/man/gemfile.5.html#GIT

Update: There's a github source identifier.

gem 'country_select', github: 'stefanpenner/country_select'

However, they warn against using it: NOTE: This shorthand should be avoided until Bundler 2.0, since it currently expands to an insecure git:// URL. This allows a man-in-the-middle attacker to compromise your system.

After Bundler 2.0, you can get around the above issue with this statement near the top of the Gemfile:

git_source(:github) { |repo| "https://github.com/#{repo}.git" }
Archonic
  • 5,207
  • 5
  • 39
  • 55
  • update from 2017, I couldn't get the GitHub source identifier to work but the :git => ref works fine – Amias May 31 '17 at 08:21
  • Maybe its Windows shenanigans, but with RubyInstaller 2.3 on Windows 10, I have this same setup for a gem I have that is unreleased, and I issue the `bundle install` command, RubyGems says its fetching the git repo, and its installed, but when I do `gem list gemname` it doesn't show up in my locally installed gems. – FilBot3 Aug 26 '17 at 21:40
  • nvm, its because I'm expecting `bundle install` to install as though it were global, or for all rubygems. however, its doing it per project, or sometimes per user. https://github.com/bundler/bundler/issues/3070#issuecomment-46361014 – FilBot3 Aug 26 '17 at 21:47
  • At least for our environment, the `github:` identifier gives the `transmits data without encryption` warning that I'm looking to avoid. Converting to a `git:` identifier with `https` might not be enough, as I also have a branch to specify. – Pysis Dec 07 '17 at 15:07
  • Regarding installing with github source identifier: `NOTE: This shorthand should be avoided until Bundler 2.0, since it currently expands to an insecure git:// URL. This allows a man-in-the-middle attacker to compromise your system.` - per the [link you gave](http://bundler.io/man/gemfile.5.html#GITHUB) – Danny Bullis Jan 22 '18 at 22:00
65
  1. Clone the Git repository.

    $ git clone git://github.com/odorcicd/authlogic.git
    
  2. Change to the new directory.

    cd authlogic
    
  3. Checkout branch

    $ git checkout -b rails3 remotes/origin/rails3
    
  4. Build the gem.

    $ rake build gem
    
  5. Install the gem.

    $ gem install pkg/gemname-1.23.gem
    
patrick-fitzgerald
  • 2,561
  • 3
  • 35
  • 49
janic_
  • 791
  • 6
  • 3
6

I have to modify @janic_'s answer to make it work. Hope it will help other ruby noobs like myself.

  1. Clone the Git repository.

    $ git clone git://github.com/odorcicd/authlogic.git
    
  2. Change to the new directory.

    $ cd authlogic
    
  3. Checkout branch

    $ git checkout -b rails3 remotes/origin/rails3
    
  4. Install bundles

    $ bundle install
    
  5. Build the gem.

    $ rake build
    
  6. Install the gem.

    $ gem install pkg/gemname-1.23.gem
    
Hai Feng Kao
  • 5,219
  • 2
  • 27
  • 38
2

To update @Archonic answer, you need to replace the git protocol per the https protocol

fatal: remote error:
  The unauthenticated git protocol on port 9418 is no longer supported.

Therefore, you need to write:

gem 'rails', git: 'https://github.com/rails/rails.git', ref: '4aded'
gem 'rails', git: 'https://github.com/rails/rails.git', branch: '2-3-stable'
gem 'rails', git: 'https://github.com/rails/rails.git', tag: 'v2.3.5'
charlesdg
  • 814
  • 11
  • 18
  • If you read till the end of the accepted answer, it says you can use `git_source(:github) { |repo| "https://github.com/#{repo}.git" }` to solve the https issue. – Archonic Mar 14 '23 at 20:24