Class: Git::Base
- Inherits:
-
Object
- Object
- Git::Base
- Defined in:
- lib/git/base.rb
Overview
Class Method Summary collapse
-
.bare(git_dir, options = {}) ⇒ Git::Base
Open a bare repository.
- .binary_version(binary_path)
-
.clone(repository_url, directory, options = {}) ⇒ Git::Base
Clone a repository into an empty or newly created directory.
-
.config ⇒ Git::Config
Returns (and initialize if needed) a Git::Config instance.
-
.init(directory = '.', options = {}) ⇒ Git::Base
Create an empty Git repository or reinitialize an existing Git repository.
-
.open(working_dir, options = {}) ⇒ Git::Base
Open a an existing Git working directory.
-
.repository_default_branch(repository, options = {}) ⇒ String
Returns the name of the default branch of the given repository.
- .root_of_worktree(working_dir)
Instance Method Summary collapse
-
#add(paths = '.', **options)
Update the index from the current worktree to prepare the for the next commit.
-
#add_remote(name, url, opts = {})
adds a new remote to this repository url can be a git url or a Git::Base object if it's a local reference.
-
#add_tag(name, *options)
Create a new git tag.
- #apply(file)
- #apply_mail(file)
-
#archive(treeish, file = nil, opts = {})
creates an archive file of the given tree-ish.
-
#branch(branch_name = self.current_branch) ⇒ Git::Branch
An object for branch_name.
-
#branches ⇒ Git::Branches
A collection of all the branches in the repository.
- #cat_file(objectish)
-
#chdir
changes current working directory for a block to the git working directory.
-
#checkout(*args, **options)
checks out a branch as the new git working directory.
-
#checkout_file(version, file)
checks out an old version of a file.
- #checkout_index(opts = {})
-
#clean(opts = {})
cleans the working directory.
-
#commit(message, opts = {})
commits all pending changes in the index file to the git repository.
-
#commit_all(message, opts = {})
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.
-
#commit_tree(tree = nil, opts = {}) ⇒ Git::Object::Commit
A commit object.
-
#config(name = nil, value = nil, options = {})
g.config('user.name', 'Scott Chacon') # sets value g.config('user.email', 'email@email.com') # sets value g.config('user.email', 'email@email.com', file: 'path/to/custom/config) # sets value in file g.config('user.name') # returns 'Scott Chacon' g.config # returns whole config hash.
-
#current_branch ⇒ String
The name of the branch HEAD refers to or 'HEAD' if detached.
-
#delete_tag(name)
deletes a tag.
-
#describe(committish = nil, opts = {})
returns the most recent tag that is reachable from a commit.
-
#diff(objectish = 'HEAD', obj2 = nil) ⇒ Git::Diff
A Git::Diff object.
-
#dir
returns a reference to the working directory @git.dir.path @git.dir.writeable?.
-
#each_conflict(&block)
iterates over the files which are unmerged.
-
#fetch(remote = 'origin', opts = {})
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.
-
#gblob(objectish) ⇒ Git::Object
A Git object.
- #gc
-
#gcommit(objectish) ⇒ Git::Object
A Git object.
-
#grep(string, path_limiter = nil, opts = {}) ⇒ Hash<String, Array>
Run a grep for 'string' on the HEAD of the git repository.
-
#gtree(objectish) ⇒ Git::Object
A Git object.
-
#ignored_files ⇒ Array<String>
List the files in the worktree that are ignored by git.
-
#index
returns reference to the git index file.
-
#initialize(options = {}) ⇒ Git::Base
constructor
Create an object that executes Git commands in the context of a working copy or a bare repository.
-
#is_branch?(branch) ⇒ Boolean
returns +true+ if the branch exists.
-
#is_local_branch?(branch) ⇒ Boolean
returns +true+ if the branch exists locally.
-
#is_remote_branch?(branch) ⇒ Boolean
returns +true+ if the branch exists remotely.
-
#lib
this is a convenience method for accessing the class that wraps all the actual 'git' forked system calls.
-
#log(count = 30) ⇒ Git::Log
A log with the specified number of commits.
- #ls_files(location = nil)
- #ls_tree(objectish, opts = {})
-
#merge(branch, message = 'merge', opts = {})
merges one or more branches into the current working branch.
-
#merge_base(*args) ⇒ Array<Git::Object::Commit>
Find as good common ancestors as possible for a merge example: g.merge_base('master', 'some_branch', 'some_sha', octopus: true).
-
#object(objectish) ⇒ Git::Object
returns a Git::Object of the appropriate type you can also call @git.gtree('tree'), but that's just for readability.
-
#pull(remote = nil, branch = nil, opts = {}) ⇒ Void
Pulls the given branch from the given remote into the current branch.
-
#push(remote = nil, branch = nil, options = {}) ⇒ Void
Push changes to a remote repository.
- #read_tree(treeish, opts = {})
-
#remote(remote_name = 'origin') ⇒ Git::Remote
A remote of the specified name.
-
#remotes
returns an array of Git:Remote objects.
-
#remove_remote(name)
removes a remote from this repository.
-
#repack
repacks the repository.
-
#repo
returns reference to the git repository directory @git.dir.path.
-
#repo_size
returns the repository size in bytes.
-
#reset(commitish = nil, opts = {})
resets the working directory to the provided commitish.
-
#reset_hard(commitish = nil, opts = {})
resets the working directory to the commitish with '--hard'.
-
#rev_parse(objectish)
(also: #revparse)
runs git rev-parse to convert the objectish to a full sha.
-
#revert(commitish = nil, opts = {})
reverts the working directory to the provided commitish.
-
#rm(path = '.', opts = {})
(also: #remove)
removes file(s) from the git repository.
- #set_index(index_file, check = true)
-
#set_remote_url(name, url)
sets the url for a remote url can be a git url or a Git::Base object if it's a local reference.
- #set_working(work_dir, check = true)
-
#show(objectish = nil, path = nil) ⇒ String
Shows objects.
-
#status ⇒ Git::Status
A status object.
-
#tag(tag_name) ⇒ Git::Object::Tag
A tag object.
-
#tags
returns an array of all Git::Tag objects for this repository.
- #update_ref(branch, commit)
-
#with_index(new_index)
LOWER LEVEL INDEX OPERATIONS ##.
- #with_temp_index(&blk)
- #with_temp_working(&blk)
-
#with_working(work_dir)
:yields: the Git::WorkingDirectory.
-
#worktree(dir, commitish = nil)
returns a Git::Worktree object for dir, commitish.
-
#worktrees
returns a Git::worktrees object of all the Git::Worktrees objects for this repo.
- #write_and_commit_tree(opts = {})
- #write_tree
Constructor Details
permalink #initialize(options = {}) ⇒ Git::Base
Create an object that executes Git commands in the context of a working copy or a bare repository.
138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/git/base.rb', line 138 def initialize( = {}) if working_dir = [:working_directory] [:repository] ||= File.join(working_dir, '.git') [:index] ||= File.join([:repository], 'index') end @logger = ([:log] || Logger.new(nil)) @logger.info("Starting Git") @working_directory = [:working_directory] ? Git::WorkingDirectory.new([:working_directory]) : nil @repository = [:repository] ? Git::Repository.new([:repository]) : nil @index = [:index] ? Git::Index.new([:index], false) : nil end |
Class Method Details
permalink .bare(git_dir, options = {}) ⇒ Git::Base
Open a bare repository
Opens a bare repository located in the git_dir
directory.
Since there is no working copy, you can not checkout or commit
but you can do most read operations.
17 18 19 20 |
# File 'lib/git/base.rb', line 17 def self.(git_dir, = {}) normalize_paths(, default_repository: git_dir, bare: true) self.new() end |
permalink .binary_version(binary_path)
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/git/base.rb', line 41 def self.binary_version(binary_path) result = nil status = nil begin result, status = Open3.capture2e(binary_path, "-c", "core.quotePath=true", "-c", "color.ui=false", "version") result = result.chomp rescue Errno::ENOENT raise RuntimeError, "Failed to get git version: #{binary_path} not found" end if status.success? version = result[/\d+(\.\d+)+/] version_parts = version.split('.').collect { |i| i.to_i } version_parts.fill(0, version_parts.length...3) else raise RuntimeError, "Failed to get git version: #{status}\n#{result}" end end |
permalink .clone(repository_url, directory, options = {}) ⇒ Git::Base
Clone a repository into an empty or newly created directory
23 24 25 26 27 |
# File 'lib/git/base.rb', line 23 def self.clone(repository_url, directory, = {}) = Git::Lib.new(nil, [:log]).clone(repository_url, directory, ) normalize_paths(, bare: [:bare] || [:mirror]) new() end |
permalink .config ⇒ Git::Config
Returns (and initialize if needed) a Git::Config instance
37 38 39 |
# File 'lib/git/base.rb', line 37 def self.config @@config ||= Config.new end |
permalink .init(directory = '.', options = {}) ⇒ Git::Base
Create an empty Git repository or reinitialize an existing Git repository
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/git/base.rb', line 62 def self.init(directory = '.', = {}) normalize_paths(, default_working_directory: directory, default_repository: directory, bare: [:bare]) = { :bare => [:bare], :initial_branch => [:initial_branch] } directory = [:bare] ? [:repository] : [:working_directory] FileUtils.mkdir_p(directory) unless File.exist?(directory) # TODO: this dance seems awkward: this creates a Git::Lib so we can call # init so we can create a new Git::Base which in turn (ultimately) # creates another/different Git::Lib. # # TODO: maybe refactor so this Git::Bare.init does this: # self.new(opts).init(init_opts) and move all/some of this code into # Git::Bare#init. This way the init method can be called on any # repository you have a Git::Base instance for. This would not # change the existing interface (other than adding to it). # Git::Lib.new().init() self.new() end |
permalink .open(working_dir, options = {}) ⇒ Git::Base
Open a an existing Git working directory
Git.open will most likely be the most common way to create a git reference, referring to an existing working directory.
If not provided in the options, the library will assume
the repository and index are in the default places (.git/
, .git/index
).
106 107 108 109 110 111 112 113 114 |
# File 'lib/git/base.rb', line 106 def self.open(working_dir, = {}) raise ArgumentError, "'#{working_dir}' is not a directory" unless Dir.exist?(working_dir) working_dir = root_of_worktree(working_dir) unless [:repository] normalize_paths(, default_working_directory: working_dir) self.new() end |
permalink .repository_default_branch(repository, options = {}) ⇒ String
Returns the name of the default branch of the given repository
30 31 32 |
# File 'lib/git/base.rb', line 30 def self.repository_default_branch(repository, = {}) Git::Lib.new(nil, [:log]).repository_default_branch(repository) end |
permalink .root_of_worktree(working_dir)
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/git/base.rb', line 88 def self.root_of_worktree(working_dir) result = working_dir status = nil raise ArgumentError, "'#{working_dir}' does not exist" unless Dir.exist?(working_dir) begin result, status = Open3.capture2e(Git::Base.config.binary_path, "-c", "core.quotePath=true", "-c", "color.ui=false", "rev-parse", "--show-toplevel", chdir: File.(working_dir)) result = result.chomp rescue Errno::ENOENT raise ArgumentError, "Failed to find the root of the worktree: git binary not found" end raise ArgumentError, "'#{working_dir}' is not in a git working tree" unless status.success? result end |
Instance Method Details
permalink #add(paths = '.', **options)
Update the index from the current worktree to prepare the for the next commit
164 165 166 |
# File 'lib/git/base.rb', line 164 def add(paths = '.', **) self.lib.add(paths, ) end |
permalink #add_remote(name, url, opts = {})
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')
Options:
:fetch => true
:track =>
178 179 180 181 182 |
# File 'lib/git/base.rb', line 178 def add_remote(name, url, opts = {}) url = url.repo.path if url.is_a?(Git::Base) self.lib.remote_add(name, url, opts) Git::Remote.new(self, name) end |
permalink #add_tag(name, *options)
Create a new git tag
202 203 204 205 |
# File 'lib/git/base.rb', line 202 def add_tag(name, *) self.lib.tag(name, *) self.tag(name) end |
permalink #apply(file)
571 572 573 574 575 |
# File 'lib/git/base.rb', line 571 def apply(file) if File.exist?(file) self.lib.apply(file) end end |
permalink #apply_mail(file)
577 578 579 |
# File 'lib/git/base.rb', line 577 def apply_mail(file) self.lib.apply_mail(file) if File.exist?(file) end |
permalink #archive(treeish, file = nil, opts = {})
creates an archive file of the given tree-ish
558 559 560 |
# File 'lib/git/base.rb', line 558 def archive(treeish, file = nil, opts = {}) self.object(treeish).archive(file, opts) end |
permalink #branch(branch_name = self.current_branch) ⇒ Git::Branch
Returns an object for branch_name.
696 697 698 |
# File 'lib/git/base.rb', line 696 def branch(branch_name = self.current_branch) Git::Branch.new(self, branch_name) end |
permalink #branches ⇒ Git::Branches
Returns a collection of all the branches in the repository. Each branch is represented as a Git::Branch.
702 703 704 |
# File 'lib/git/base.rb', line 702 def branches Git::Branches.new(self) end |
permalink #cat_file(objectish)
679 680 681 |
# File 'lib/git/base.rb', line 679 def cat_file(objectish) self.lib.cat_file(objectish) end |
permalink #chdir
changes current working directory for a block to the git working directory
example @git.chdir do # write files @git.add @git.commit('message') end
216 217 218 219 220 |
# File 'lib/git/base.rb', line 216 def chdir # :yields: the Git::Path Dir.chdir(dir.path) do yield dir.path end end |
permalink #checkout(*args, **options)
checks out a branch as the new git working directory
425 426 427 |
# File 'lib/git/base.rb', line 425 def checkout(*args, **) self.lib.checkout(*args, **) end |
permalink #checkout_file(version, file)
checks out an old version of a file
430 431 432 |
# File 'lib/git/base.rb', line 430 def checkout_file(version, file) self.lib.checkout_file(version,file) end |
permalink #checkout_index(opts = {})
615 616 617 |
# File 'lib/git/base.rb', line 615 def checkout_index(opts = {}) self.lib.checkout_index(opts) end |
permalink #clean(opts = {})
cleans the working directory
options: :force :d :ff
371 372 373 |
# File 'lib/git/base.rb', line 371 def clean(opts = {}) self.lib.clean(opts) end |
permalink #commit(message, opts = {})
commits all pending changes in the index file to the git repository
options: :all :allow_empty :amend :author
412 413 414 |
# File 'lib/git/base.rb', line 412 def commit(, opts = {}) self.lib.commit(, opts) end |
permalink #commit_all(message, opts = {})
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.
419 420 421 422 |
# File 'lib/git/base.rb', line 419 def commit_all(, opts = {}) opts = {:add_all => true}.merge(opts) self.lib.commit(, opts) end |
permalink #commit_tree(tree = nil, opts = {}) ⇒ Git::Object::Commit
Returns a commit object.
718 719 720 |
# File 'lib/git/base.rb', line 718 def commit_tree(tree = nil, opts = {}) Git::Object::Commit.new(self, self.lib.commit_tree(tree, opts)) end |
permalink #config(name = nil, value = nil, options = {})
g.config('user.name', 'Scott Chacon') # sets value g.config('user.email', 'email@email.com') # sets value g.config('user.email', 'email@email.com', file: 'path/to/custom/config) # sets value in file g.config('user.name') # returns 'Scott Chacon' g.config # returns whole config hash
227 228 229 230 231 232 233 234 235 236 237 238 |
# File 'lib/git/base.rb', line 227 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 |
permalink #current_branch ⇒ String
The name of the branch HEAD refers to or 'HEAD' if detached
Returns one of the following:
- The branch name that HEAD refers to (even if it is an unborn branch)
- 'HEAD' if in a detached HEAD state
691 692 693 |
# File 'lib/git/base.rb', line 691 def current_branch self.lib.branch_current end |
permalink #delete_tag(name)
deletes a tag
553 554 555 |
# File 'lib/git/base.rb', line 553 def delete_tag(name) self.lib.tag(name, {:d => true}) end |
permalink #describe(committish = nil, opts = {})
returns the most recent tag that is reachable from a commit
options: :all :tags :contains :debug :exact_match :dirty :abbrev :candidates :long :always :match
390 391 392 |
# File 'lib/git/base.rb', line 390 def describe(committish=nil, opts={}) self.lib.describe(committish, opts) end |
permalink #diff(objectish = 'HEAD', obj2 = nil) ⇒ Git::Diff
Returns a Git::Diff object.
723 724 725 |
# File 'lib/git/base.rb', line 723 def diff(objectish = 'HEAD', obj2 = nil) Git::Diff.new(self, objectish, obj2) end |
permalink #dir
returns a reference to the working directory @git.dir.path @git.dir.writeable?
243 244 245 |
# File 'lib/git/base.rb', line 243 def dir @working_directory end |
permalink #each_conflict(&block)
iterates over the files which are unmerged
474 475 476 |
# File 'lib/git/base.rb', line 474 def each_conflict(&block) # :yields: file, your_version, their_version self.lib.conflicts(&block) end |
permalink #fetch(remote = 'origin', opts = {})
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
436 437 438 439 440 441 442 |
# File 'lib/git/base.rb', line 436 def fetch(remote = 'origin', opts = {}) if remote.is_a?(Hash) opts = remote remote = nil end self.lib.fetch(remote, opts) end |
permalink #gblob(objectish) ⇒ Git::Object
Returns a Git object.
728 729 730 |
# File 'lib/git/base.rb', line 728 def gblob(objectish) Git::Object.new(self, objectish, 'blob') end |
permalink #gcommit(objectish) ⇒ Git::Object
Returns a Git object.
733 734 735 |
# File 'lib/git/base.rb', line 733 def gcommit(objectish) Git::Object.new(self, objectish, 'commit') end |
permalink #grep(string, path_limiter = nil, opts = {}) ⇒ Hash<String, Array>
Run a grep for 'string' on the HEAD of the git repository
335 336 337 |
# File 'lib/git/base.rb', line 335 def grep(string, path_limiter = nil, opts = {}) self.object('HEAD').grep(string, path_limiter, opts) end |
permalink #gtree(objectish) ⇒ Git::Object
Returns a Git object.
738 739 740 |
# File 'lib/git/base.rb', line 738 def gtree(objectish) Git::Object.new(self, objectish, 'tree') end |
permalink #ignored_files ⇒ Array<String>
List the files in the worktree that are ignored by git
342 343 344 |
# File 'lib/git/base.rb', line 342 def ignored_files self.lib.ignored_files end |
permalink #index
returns reference to the git index file
248 249 250 |
# File 'lib/git/base.rb', line 248 def index @index end |
permalink #is_branch?(branch) ⇒ Boolean
returns +true+ if the branch exists
292 293 294 295 |
# File 'lib/git/base.rb', line 292 def is_branch?(branch) branch_names = self.branches.map {|b| b.name} branch_names.include?(branch) end |
permalink #is_local_branch?(branch) ⇒ Boolean
returns +true+ if the branch exists locally
280 281 282 283 |
# File 'lib/git/base.rb', line 280 def is_local_branch?(branch) branch_names = self.branches.local.map {|b| b.name} branch_names.include?(branch) end |
permalink #is_remote_branch?(branch) ⇒ Boolean
returns +true+ if the branch exists remotely
286 287 288 289 |
# File 'lib/git/base.rb', line 286 def is_remote_branch?(branch) branch_names = self.branches.remote.map {|b| b.name} branch_names.include?(branch) end |
permalink #lib
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
300 301 302 |
# File 'lib/git/base.rb', line 300 def lib @lib ||= Git::Lib.new(self, @logger) end |
permalink #log(count = 30) ⇒ Git::Log
Returns a log with the specified number of commits.
743 744 745 |
# File 'lib/git/base.rb', line 743 def log(count = 30) Git::Log.new(self, count) end |
permalink #ls_files(location = nil)
637 638 639 |
# File 'lib/git/base.rb', line 637 def ls_files(location=nil) self.lib.ls_files(location) end |
permalink #ls_tree(objectish, opts = {})
675 676 677 |
# File 'lib/git/base.rb', line 675 def ls_tree(objectish, opts = {}) self.lib.ls_tree(objectish, opts) end |
permalink #merge(branch, message = 'merge', opts = {})
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
469 470 471 |
# File 'lib/git/base.rb', line 469 def merge(branch, = 'merge', opts = {}) self.lib.merge(branch, , opts) end |
permalink #merge_base(*args) ⇒ Array<Git::Object::Commit>
Find as good common ancestors as possible for a merge example: g.merge_base('master', 'some_branch', 'some_sha', octopus: true)
780 781 782 783 |
# File 'lib/git/base.rb', line 780 def merge_base(*args) shas = self.lib.merge_base(*args) shas.map { |sha| gcommit(sha) } end |
permalink #object(objectish) ⇒ Git::Object
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.
object calls a 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
757 758 759 |
# File 'lib/git/base.rb', line 757 def object(objectish) Git::Object.new(self, objectish) end |
permalink #pull(remote = nil, branch = nil, opts = {}) ⇒ Void
Pulls the given branch from the given remote into the current branch
497 498 499 |
# File 'lib/git/base.rb', line 497 def pull(remote = nil, branch = nil, opts = {}) self.lib.pull(remote, branch, opts) end |
permalink #push(remote = nil, branch = nil, options = {}) ⇒ Void
Push changes to a remote repository
462 463 464 |
# File 'lib/git/base.rb', line 462 def push(*args, **) self.lib.push(*args, **) end |
permalink #read_tree(treeish, opts = {})
619 620 621 |
# File 'lib/git/base.rb', line 619 def read_tree(treeish, opts = {}) self.lib.read_tree(treeish, opts) end |
permalink #remote(remote_name = 'origin') ⇒ Git::Remote
Returns a remote of the specified name.
762 763 764 |
# File 'lib/git/base.rb', line 762 def remote(remote_name = 'origin') Git::Remote.new(self, remote_name) end |
permalink #remotes
returns an array of Git:Remote objects
502 503 504 |
# File 'lib/git/base.rb', line 502 def remotes self.lib.remotes.map { |r| Git::Remote.new(self, r) } end |
permalink #remove_remote(name)
removes a remote from this repository
@git.remove_remote('scott_git')
520 521 522 |
# File 'lib/git/base.rb', line 520 def remove_remote(name) self.lib.remote_remove(name) end |
permalink #repack
repacks the repository
563 564 565 |
# File 'lib/git/base.rb', line 563 def repack self.lib.repack end |
permalink #repo
returns reference to the git repository directory @git.dir.path
254 255 256 |
# File 'lib/git/base.rb', line 254 def repo @repository end |
permalink #repo_size
returns the repository size in bytes
259 260 261 262 263 264 265 266 267 |
# File 'lib/git/base.rb', line 259 def repo_size Dir.glob(File.join(repo.path, '**', '*'), File::FNM_DOTMATCH).reject do |f| f.include?('..') end.map do |f| File.(f) end.uniq.map do |f| File.stat(f).size.to_i end.reduce(:+) end |
permalink #reset(commitish = nil, opts = {})
resets the working directory to the provided commitish
354 355 356 |
# File 'lib/git/base.rb', line 354 def reset(commitish = nil, opts = {}) self.lib.reset(commitish, opts) end |
permalink #reset_hard(commitish = nil, opts = {})
resets the working directory to the commitish with '--hard'
359 360 361 362 |
# File 'lib/git/base.rb', line 359 def reset_hard(commitish = nil, opts = {}) opts = {:hard => true}.merge(opts) self.lib.reset(commitish, opts) end |
permalink #rev_parse(objectish) Also known as: revparse
runs git rev-parse to convert the objectish to a full sha
668 669 670 |
# File 'lib/git/base.rb', line 668 def rev_parse(objectish) self.lib.rev_parse(objectish) end |
permalink #revert(commitish = nil, opts = {})
reverts the working directory to the provided commitish. Accepts a range, such as comittish..HEAD
options: :no_edit
400 401 402 |
# File 'lib/git/base.rb', line 400 def revert(commitish = nil, opts = {}) self.lib.revert(commitish, opts) end |
permalink #rm(path = '.', opts = {}) Also known as: remove
removes file(s) from the git repository
347 348 349 |
# File 'lib/git/base.rb', line 347 def rm(path = '.', opts = {}) self.lib.rm(path, opts) end |
permalink #set_index(index_file, check = true)
269 270 271 272 |
# File 'lib/git/base.rb', line 269 def set_index(index_file, check = true) @lib = nil @index = Git::Index.new(index_file.to_s, check) end |
permalink #set_remote_url(name, url)
sets the url for a remote url can be a git url or a Git::Base object if it's a local reference
@git.set_remote_url('scotts_git', 'git://repo.or.cz/rubygit.git')
511 512 513 514 515 |
# File 'lib/git/base.rb', line 511 def set_remote_url(name, url) url = url.repo.path if url.is_a?(Git::Base) self.lib.remote_set_url(name, url) Git::Remote.new(self, name) end |
permalink #set_working(work_dir, check = true)
274 275 276 277 |
# File 'lib/git/base.rb', line 274 def set_working(work_dir, check = true) @lib = nil @working_directory = Git::WorkingDirectory.new(work_dir.to_s, check) end |
permalink #show(objectish = nil, path = nil) ⇒ String
Shows objects
586 587 588 |
# File 'lib/git/base.rb', line 586 def show(objectish=nil, path=nil) self.lib.show(objectish, path) end |
permalink #status ⇒ Git::Status
Returns a status object.
767 768 769 |
# File 'lib/git/base.rb', line 767 def status Git::Status.new(self) end |
permalink #tag(tag_name) ⇒ Git::Object::Tag
Returns a tag object.
772 773 774 |
# File 'lib/git/base.rb', line 772 def tag(tag_name) Git::Object.new(self, tag_name, 'tag', true) end |
permalink #tags
returns an array of all Git::Tag objects for this repository
525 526 527 |
# File 'lib/git/base.rb', line 525 def self.lib..map { |r| tag(r) } end |
permalink #update_ref(branch, commit)
632 633 634 |
# File 'lib/git/base.rb', line 632 def update_ref(branch, commit) branch(branch).update_ref(commit) end |
permalink #with_index(new_index)
LOWER LEVEL INDEX OPERATIONS ##
592 593 594 595 596 597 598 |
# File 'lib/git/base.rb', line 592 def with_index(new_index) # :yields: new_index old_index = @index set_index(new_index, false) return_value = yield @index set_index(old_index) return_value end |
permalink #with_temp_index(&blk)
600 601 602 603 604 605 606 607 608 609 610 611 612 613 |
# File 'lib/git/base.rb', line 600 def with_temp_index &blk # Workaround for JRUBY, since they handle the TempFile path different. # MUST be improved to be safer and OS independent. if RUBY_PLATFORM == 'java' temp_path = "/tmp/temp-index-#{(0...15).map{ ('a'..'z').to_a[rand(26)] }.join}" else tempfile = Tempfile.new('temp-index') temp_path = tempfile.path tempfile.close tempfile.unlink end with_index(temp_path, &blk) end |
permalink #with_temp_working(&blk)
652 653 654 655 656 657 658 659 |
# File 'lib/git/base.rb', line 652 def with_temp_working &blk tempfile = Tempfile.new("temp-workdir") temp_dir = tempfile.path tempfile.close tempfile.unlink Dir.mkdir(temp_dir, 0700) with_working(temp_dir, &blk) end |
permalink #with_working(work_dir)
:yields: the Git::WorkingDirectory
641 642 643 644 645 646 647 648 649 650 |
# File 'lib/git/base.rb', line 641 def with_working(work_dir) # :yields: the Git::WorkingDirectory return_value = false old_working = @working_directory set_working(work_dir) Dir.chdir work_dir do return_value = yield @working_directory end set_working(old_working) return_value end |
permalink #worktree(dir, commitish = nil)
returns a Git::Worktree object for dir, commitish
707 708 709 |
# File 'lib/git/base.rb', line 707 def worktree(dir, commitish = nil) Git::Worktree.new(self, dir, commitish) end |
permalink #worktrees
returns a Git::worktrees object of all the Git::Worktrees objects for this repo
713 714 715 |
# File 'lib/git/base.rb', line 713 def worktrees Git::Worktrees.new(self) end |
permalink #write_and_commit_tree(opts = {})
627 628 629 630 |
# File 'lib/git/base.rb', line 627 def write_and_commit_tree(opts = {}) tree = write_tree commit_tree(tree, opts) end |
permalink #write_tree
623 624 625 |
# File 'lib/git/base.rb', line 623 def write_tree self.lib.write_tree end |