module Git

Git/Ruby Library

This provides bindings for working with git in complex interactions, including branching and merging, object inspection and manipulation, history, patch generation and more. You should be able to do most fundamental git operations with this library.

This module provides the basic functions to open a git reference to work with. You can open a working directory, open a bare repository, initialize a new repo or clone an existing remote repository.

Author

Scott Chacon (schacon@gmail.com)

License

MIT License

Constants

VERSION

The current gem version @return [String] the current gem version.

Public Class Methods

bare(git_dir, options = {}) click to toggle source

open a bare repository

this takes the path to a bare git repo it expects not to be able to use a working directory so you can't checkout stuff, commit things, etc. but you can do most read operations

# File lib/git.rb, line 84
def self.bare(git_dir, options = {})
  Base.bare(git_dir, options)
end
clone(repository, name, options = {}) click to toggle source

clones a remote repository

options

:bare => true (does a bare clone)
:repository => '/path/to/alt_git_dir'
:index => '/path/to/alt_index_file'

example

Git.clone('git://repo.or.cz/rubygit.git', 'clone.git', :bare => true)
# File lib/git.rb, line 98
def self.clone(repository, name, options = {})
  Base.clone(repository, name, options)
end
config() click to toggle source
# File lib/git.rb, line 70
def self.config
  return Base.config
end
configure() { |config| ... } click to toggle source
# File lib/git.rb, line 66
def self.configure
  yield Base.config
end
export(repository, name, options = {}) click to toggle source

Export the current HEAD (or a branch, if options[:branch] is specified) into the name directory, then remove all traces of git from the directory.

See clone for options. Does not obey the :remote option, since the .git info will be deleted anyway; always uses the default remote, 'origin.'

# File lib/git.rb, line 109
def self.export(repository, name, options = {})
  options.delete(:remote)
  repo = clone(repository, name, {:depth => 1}.merge(options))
  repo.checkout("origin/#{options[:branch]}") if options[:branch]
  Dir.chdir(repo.dir.to_s) { FileUtils.rm_r '.git' }
end
global_config(name = nil, value = nil) click to toggle source
Same as g.config, but forces it to be at the global level

g.config('user.name', 'Scott Chacon') # sets value g.config('user.email', 'email@email.com') # sets value g.config('user.name') # returns 'Scott Chacon' g.config # returns whole config hash

# File lib/git.rb, line 122
def self.global_config(name = nil, value = nil)
  lib = Git::Lib.new(nil, nil)
  if(name && value)
    # set value
    lib.global_config_set(name, value)
  elsif (name)
    # return value
    lib.global_config_get(name)
  else
    # return hash
    lib.global_config_list
  end
end
init(working_dir = '.', options = {}) click to toggle source

initialize a new git repository, defaults to the current working directory

options

:repository => '/path/to/alt_git_dir'
:index => '/path/to/alt_index_file'
# File lib/git.rb, line 141
def self.init(working_dir = '.', options = {})
  Base.init(working_dir, options)
end
ls_remote(location=nil) click to toggle source

returns a Hash containing information about the references of the target repository

@param [String|NilClass] location the target repository location or nil for '.' @return [{String=>Hash}] the available references of the target repo.

# File lib/git.rb, line 150
def self.ls_remote(location=nil)
  Git::Lib.new.ls_remote(location)
end
open(working_dir, options = {}) click to toggle source

open an existing git working directory

this will most likely be the most common way to create a git reference, referring to a working directory. if not provided in the options, the library will assume your git_dir and index are in the default place (.git/, .git/index)

options

:repository => '/path/to/alt_git_dir'
:index => '/path/to/alt_index_file'
# File lib/git.rb, line 164
def self.open(working_dir, options = {})
  Base.open(working_dir, options)
end

Public Instance Methods

config(name = nil, value = nil) click to toggle source

g.config('user.name', 'Scott Chacon') # sets value g.config('user.email', 'email@email.com') # sets value g.config('user.name') # returns 'Scott Chacon' g.config # returns whole config hash

# File lib/git.rb, line 52
def config(name = nil, value = nil)
  lib = Git::Lib.new
  if(name && value)
    # set value
    lib.config_set(name, value)
  elsif (name)
    # return value
    lib.config_get(name)
  else
    # return hash
    lib.config_list
  end
end
global_config(name = nil, value = nil) click to toggle source
# File lib/git.rb, line 74
def global_config(name = nil, value = nil)
  self.class.global_config(name, value)
end