Class Git::Base
In: lib/git/base.rb
Parent: Object

Methods

add   add_remote   add_tag   bare   branch   branches   chdir   checkout   clone   commit   commit_all   config   current_branch   diff   dir   fetch   gblob   gcommit   grep   gtree   index   init   lib   log   merge   new   object   open   pull   push   remote   remotes   remove   repack   repo   repo_size   reset   reset_hard   revparse   status   tag   tags  

Public Class methods

opens a bare Git Repository - no working directory options

[Source]

# File lib/git/base.rb, line 10
    def self.bare(git_dir)
      self.new :repository => git_dir
    end

clones a git repository locally

 repository - http://repo.or.cz/w/sinatra.git
 name - sinatra

options:

  :repository

   :bare
  or
   :working_directory
   :index_file

[Source]

# File lib/git/base.rb, line 58
    def self.clone(repository, name, opts = {})
      # run git-clone 
      self.new(Git::Lib.new.clone(repository, name, opts))
    end

initializes a git repository

options:

 :repository
 :index_file

[Source]

# File lib/git/base.rb, line 29
    def self.init(working_dir, opts = {})
      default = {:working_directory => working_dir,
                 :repository => File.join(working_dir, '.git')}
      git_options = default.merge(opts)
      
      if git_options[:working_directory]
        # if !working_dir, make it
        FileUtils.mkdir_p(git_options[:working_directory]) if !File.directory?(git_options[:working_directory])
      end
      
      # run git_init there
      Git::Lib.new(git_options).init
       
      self.new(git_options)
    end

[Source]

# File lib/git/base.rb, line 63
    def initialize(options = {})
      if working_dir = options[:working_directory]
        options[:repository] = File.join(working_dir, '.git') if !options[:repository]
        options[:index] = File.join(working_dir, '.git', 'index') if !options[:index]
      end
      
      @working_directory = Git::WorkingDirectory.new(options[:working_directory]) if options[:working_directory]
      @repository = Git::Repository.new(options[:repository]) if options[:repository]
      @index = Git::Index.new(options[:index], false) if options[:index]
    end

opens a new Git Project from a working directory you can specify non-standard git_dir and index file in the options

[Source]

# File lib/git/base.rb, line 16
    def self.open(working_dir, opts={})    
      default = {:working_directory => working_dir}
      git_options = default.merge(opts)
      
      self.new(git_options)
    end

Public Instance methods

adds files from the working directory to the git repository

[Source]

# File lib/git/base.rb, line 212
    def add(path = '.')
      self.lib.add(path)
    end

adds a new remote to this repository url can be a git url or a Git::Base object if it’s a local reference

 @git.add_remote('scotts_git', 'git://repo.or.cz/rubygit.git')
 @git.fetch('scotts_git')
 @git.merge('scotts_git/master')

[Source]

# File lib/git/base.rb, line 290
    def add_remote(name, url, opts = {})
      if url.is_a?(Git::Base)
        url = url.repo.path
      end
      self.lib.remote_add(name, url, opts)
      Git::Remote.new(self, name)
    end

creates a new git tag (Git::Tag)

[Source]

# File lib/git/base.rb, line 309
    def add_tag(tag_name)
      self.lib.tag(tag_name)
      tag(tag_name)
    end

returns a Git::Branch object for branch_name

[Source]

# File lib/git/base.rb, line 167
    def branch(branch_name = 'master')
      Git::Branch.new(self, branch_name)
    end

returns a Git::Branches object of all the Git::Branch objects for this repo

[Source]

# File lib/git/base.rb, line 162
    def branches
      Git::Branches.new(self)
    end

changes current working directory for a block to the git working directory

example

 @git.chdir do
   # write files
   @git.add
   @git.commit('message')
 end

[Source]

# File lib/git/base.rb, line 102
    def chdir
      Dir.chdir(dir.path) do
        yield dir.path
      end
    end

checks out a branch as the new git working directory

[Source]

# File lib/git/base.rb, line 246
    def checkout(branch = 'master', opts = {})
      self.lib.checkout(branch, opts)
    end

commits all pending changes in the index file to the git repository

[Source]

# File lib/git/base.rb, line 233
    def commit(message, opts = {})
      self.lib.commit(message, opts)
    end

commits all pending changes in the index file to the git repository, but automatically adds all modified files without having to explicitly calling @git.add() on them.

[Source]

# File lib/git/base.rb, line 240
    def commit_all(message, opts = {})
      opts = {:add_all => true}.merge(opts)
      self.lib.commit(message, opts)
    end

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

[Source]

# File lib/git/base.rb, line 121
    def config(name = nil, value = nil)
      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

returns the name of the branch the working directory is currently on

[Source]

# File lib/git/base.rb, line 330
    def current_branch
      self.lib.branch_current
    end

returns a Git::Diff object

[Source]

# File lib/git/base.rb, line 207
    def diff(objectish = 'HEAD', obj2 = nil)
      Git::Diff.new(self, objectish, obj2)
    end

returns a reference to the working directory

 @git.dir.path
 @git.dir.writeable?

[Source]

# File lib/git/base.rb, line 78
    def dir
      @working_directory
    end

fetches changes from a remote branch - this does not modify the working directory, it just gets the changes from the remote if there are any

[Source]

# File lib/git/base.rb, line 252
    def fetch(remote = 'origin')
      self.lib.fetch(remote)
    end
gblob(objectish)

Alias for object

gcommit(objectish)

Alias for object

will run a grep for ‘string’ on the HEAD of the git repository

to be more surgical in your grep, you can call grep() off a specific git object. for example:

 @git.object("v2.3").grep('TODO')

in any case, it returns a hash of arrays of the type:

 hsh[tree-ish] = [[line_no, match], [line_no, match2]]
 hsh[tree-ish] = [[line_no, match], [line_no, match2]]

so you might use it like this:

  @git.grep("TODO").each do |sha, arr|
    puts "in blob #{sha}:"
    arr.each do |match|
      puts "\t line #{match[0]}: '#{match[1]}'"
    end
  end

[Source]

# File lib/git/base.rb, line 202
    def grep(string)
      self.object('HEAD').grep(string)
    end
gtree(objectish)

Alias for object

returns reference to the git index file

[Source]

# File lib/git/base.rb, line 89
    def index
      @index
    end

this is a convenience method for accessing the class that wraps all the actual ‘git’ forked system calls. At some point I hope to replace the Git::Lib class with one that uses native methods or libgit C bindings

[Source]

# File lib/git/base.rb, line 179
    def lib
      Git::Lib.new(self)
    end

returns a Git::Log object with count commits

[Source]

# File lib/git/base.rb, line 152
    def log(count = 30)
      Git::Log.new(self, count)
    end

merges one or more branches into the current working branch

you can specify more than one branch to merge by passing an array of branches

[Source]

# File lib/git/base.rb, line 268
    def merge(branch, message = 'merge')
      self.lib.merge(branch, message)
    end

returns a Git::Object of the appropriate type you can also call @git.gtree(‘tree’), but that’s just for readability. If you call @git.gtree(‘HEAD’) it will still return a Git::Object::Commit object.

@git.object calls a factory method that will run a rev-parse on the objectish and determine the type of the object and return an appropriate object for that type

[Source]

# File lib/git/base.rb, line 144
    def object(objectish)
      Git::Object.new(self, objectish)
    end

fetches a branch from a remote and merges it into the current working branch

[Source]

# File lib/git/base.rb, line 273
    def pull(remote = 'origin', branch = 'master', message = 'origin pull')
      fetch(remote)
      merge(branch, message)
    end

pushes changes to a remote repository - easiest if this is a cloned repository, otherwise you may have to run something like this first to setup the push parameters:

 @git.config('remote.remote-name.push', 'refs/heads/master:refs/heads/master')

[Source]

# File lib/git/base.rb, line 261
    def push(remote = 'origin', branch = 'master')
      self.lib.push(remote, branch)
    end

returns a Git::Remote object

[Source]

# File lib/git/base.rb, line 172
    def remote(remote_name = 'origin')
      Git::Remote.new(self, remote_name)
    end

returns an array of Git:Remote objects

[Source]

# File lib/git/base.rb, line 279
    def remotes
      self.lib.remotes.map { |r| Git::Remote.new(self, r) }
    end

removes file(s) from the git repository

[Source]

# File lib/git/base.rb, line 217
    def remove(path = '.', opts = {})
      self.lib.remove(path, opts)
    end

repacks the repository

[Source]

# File lib/git/base.rb, line 315
    def repack
      self.lib.repack
    end

returns reference to the git repository directory

 @git.dir.path

[Source]

# File lib/git/base.rb, line 84
    def repo
      @repository
    end

returns the repository size in bytes

[Source]

# File lib/git/base.rb, line 109
    def repo_size
      size = 0
      Dir.chdir(repo.path) do
        (size, dot) = `du -d0`.chomp.split
      end
      size.to_i
    end

resets the working directory to the provided commitish

[Source]

# File lib/git/base.rb, line 222
    def reset(commitish = nil, opts = {})
      self.lib.reset(commitish, opts)
    end

resets the working directory to the commitish with ’—hard’

[Source]

# File lib/git/base.rb, line 227
    def reset_hard(commitish = nil, opts = {})
      opts = {:hard => true}.merge(opts)
      self.lib.reset(commitish, opts)
    end

runs git rev-parse to convert the objectish to a full sha

  @git.revparse("HEAD^^")
  @git.revparse('v2.4^{tree}')
  @git.revparse('v2.4:/doc/index.html')

[Source]

# File lib/git/base.rb, line 325
    def revparse(objectish)
      self.lib.revparse(objectish)
    end

returns a Git::Status object

[Source]

# File lib/git/base.rb, line 157
    def status
      Git::Status.new(self)
    end

returns a Git::Tag object

[Source]

# File lib/git/base.rb, line 304
    def tag(tag_name)
      Git::Object.new(self, tag_name, true)
    end

returns an array of all Git::Tag objects for this repository

[Source]

# File lib/git/base.rb, line 299
    def tags
      self.lib.tags.map { |r| tag(r) }
    end

[Validate]