def initialize(options = {})
      if working_dir = options[:working_directory]
        options[:repository] ||= File.join(working_dir, '.git')
        options[:index] ||= File.join(options[:repository], 'index')
      end
      @logger = (options[:log] || Logger.new(nil))
      @logger.info("Starting Git")

      @working_directory = options[:working_directory] ? Git::WorkingDirectory.new(options[:working_directory]) : nil
      @repository = options[:repository] ? Git::Repository.new(options[:repository]) : nil
      @index = options[:index] ? Git::Index.new(options[:index], false) : nil
    end
Create an object that executes Git commands in the context of a working
copy or a bare repository.

@param [Hash] options The options for this command (see list of valid
options below)

@option options [Pathname] :working_dir the path to the root of the working
directory.  Should be `nil` if executing commands on a bare repository.

@option options [Pathname] :repository used to specify a non-standard path to
the repository directory.  The default is `"#{working_dir}/.git"`.

@option options [Pathname] :index used to specify a non-standard path to an
index file.  The default is `"#{working_dir}/.git/index"`

@option options [Logger] :log A logger to use for Git operations.  Git
commands are logged at the `:info` level.  Additional logging is done
at the `:debug` level.

@return [Git::Base] an object that can execute git commands in the context
of the opened working copy or bare repository