Class: Git::Base
- Inherits:
-
Object
- Object
- Git::Base
- Defined in:
- lib/git/base.rb
Overview
Instance Attribute Summary collapse
-
#git_ssh ⇒ String, ...
readonly
private
Returns the per-instance git_ssh configuration value.
-
#index
readonly
returns reference to the git index file.
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)
rubocop:enable Style/ArgumentsForwarding.
- #apply_mail(file)
-
#archive(treeish, file = nil, opts = {})
creates an archive file of the given tree-ish.
-
#branch(branch_name = current_branch) ⇒ Git::Branch
An object for branch_name.
-
#branch?(branch) ⇒ Boolean
returns
trueif the branch exists. -
#branches ⇒ Git::Branches
A collection of all the branches in the repository.
-
#cat_file(objectish) ⇒ String
Returns the contents of a git object.
-
#chdir
changes current working directory for a block to the git working directory.
-
#checkout
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 protected]') # sets value g.config('user.email', '[email protected]', 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.
-
#diff_path_status(objectish = 'HEAD', obj2 = nil, opts = {}) ⇒ Git::DiffPathStatus
(also: #diff_name_status)
Returns a Git::Diff::PathStatus object for accessing the name-status report.
-
#diff_stats(objectish = 'HEAD', obj2 = nil, opts = {}) ⇒ Git::DiffStats
Returns a Git::Diff::Stats object for accessing diff statistics.
-
#dir
returns a reference to the working directory @git.dir.path @git.dir.writeable?.
-
#each_conflict
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.
-
#fsck(objects = [], options = {}) ⇒ Git::FsckResult
Verifies the connectivity and validity of objects in the database.
-
#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.
-
#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
rubocop:disable Naming/PredicatePrefix.
-
#is_local_branch?(branch) ⇒ Boolean
rubocop:disable Naming/PredicatePrefix.
-
#is_remote_branch?(branch) ⇒ Boolean
rubocop:disable Naming/PredicatePrefix.
-
#lib
this is a convenience method for accessing the class that wraps all the actual 'git' forked system calls.
-
#local_branch?(branch) ⇒ Boolean
returns
trueif the branch exists locally. -
#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 ⇒ 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.
-
#remote_branch?(branch) ⇒ Boolean
returns
trueif the branch exists remotely. -
#remote_set_branches(name, *branches, add: false) ⇒ nil
Configures which branches are fetched for a remote.
-
#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 = nil, must_exist: nil)
-
#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 = nil, must_exist: nil)
-
#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
- #with_temp_working
-
#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
#initialize(options = {}) ⇒ Git::Base
Create an object that executes Git commands in the context of a working copy or a bare repository.
174 175 176 177 178 179 |
# File 'lib/git/base.rb', line 174 def initialize( = {}) = default_paths() setup_logger([:log]) @git_ssh = .key?(:git_ssh) ? [:git_ssh] : :use_global_config initialize_components() end |
Instance Attribute Details
#git_ssh ⇒ String, ... (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns the per-instance git_ssh configuration value.
This may be:
- a [String] path when an explicit git_ssh command has been configured
- the Symbol
:use_global_configwhen this instance is using the global config nilwhen SSH has been explicitly disabled for this instance
361 362 363 |
# File 'lib/git/base.rb', line 361 def git_ssh @git_ssh end |
#index (readonly)
returns reference to the git index file
255 256 257 |
# File 'lib/git/base.rb', line 255 def index @index end |
Class Method Details
.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.
16 17 18 19 |
# File 'lib/git/base.rb', line 16 def self.(git_dir, = {}) normalize_paths(, default_repository: git_dir, bare: true) new() end |
.binary_version(binary_path)
42 43 44 |
# File 'lib/git/base.rb', line 42 def self.binary_version(binary_path) parse_version_string(execute_git_version(binary_path)) end |
.clone(repository_url, directory, options = {}) ⇒ Git::Base
Clone a repository into an empty or newly created directory
22 23 24 25 26 27 28 |
# File 'lib/git/base.rb', line 22 def self.clone(repository_url, directory, = {}) = {} [:git_ssh] = [:git_ssh] if .key?(:git_ssh) = LibImpl.new(, [:log]).clone(repository_url, directory, ) normalize_paths(, bare: [:bare] || [:mirror]) new() end |
.config ⇒ Git::Config
Returns (and initialize if needed) a Git::Config instance
38 39 40 |
# File 'lib/git/base.rb', line 38 def self.config @config ||= Config.new end |
.init(directory = '.', options = {}) ⇒ Git::Base
Create an empty Git repository or reinitialize an existing Git repository
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/git/base.rb', line 63 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) # 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). # LibImpl.new().init() new() end |
.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).
135 136 137 138 139 140 141 142 143 |
# File 'lib/git/base.rb', line 135 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) new() end |
.repository_default_branch(repository, options = {}) ⇒ String
Returns the name of the default branch of the given repository
31 32 33 |
# File 'lib/git/base.rb', line 31 def self.repository_default_branch(repository, = {}) LibImpl.new(nil, [:log]).repository_default_branch(repository) end |
.root_of_worktree(working_dir)
90 91 92 93 94 |
# File 'lib/git/base.rb', line 90 def self.root_of_worktree(working_dir) raise ArgumentError, "'#{working_dir}' does not exist" unless Dir.exist?(working_dir) execute_rev_parse_toplevel(working_dir) end |
Instance Method Details
#add(paths = '.', **options)
Update the index from the current worktree to prepare the for the next commit
194 195 196 |
# File 'lib/git/base.rb', line 194 def add(paths = '.', **) lib.add(paths, ) end |
#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 => <branch_name>
208 209 210 211 212 |
# File 'lib/git/base.rb', line 208 def add_remote(name, url, opts = {}) url = url.repo.to_s if url.is_a?(Git::Base) lib.remote_add(name, url, opts) Git::Remote.new(self, name) end |
#add_tag(name, *options)
Create a new git tag
644 645 646 647 |
# File 'lib/git/base.rb', line 644 def add_tag(name, *) lib.tag(name, *) tag(name) end |
#apply(file)
rubocop:enable Style/ArgumentsForwarding
719 720 721 722 723 |
# File 'lib/git/base.rb', line 719 def apply(file) return unless File.exist?(file) lib.apply(file) end |
#apply_mail(file)
725 726 727 |
# File 'lib/git/base.rb', line 725 def apply_mail(file) lib.apply_mail(file) if File.exist?(file) end |
#archive(treeish, file = nil, opts = {})
creates an archive file of the given tree-ish
655 656 657 |
# File 'lib/git/base.rb', line 655 def archive(treeish, file = nil, opts = {}) object(treeish).archive(file, opts) end |
#branch(branch_name = current_branch) ⇒ Git::Branch
Returns an object for branch_name.
854 855 856 |
# File 'lib/git/base.rb', line 854 def branch(branch_name = current_branch) Git::Branch.new(self, branch_name) end |
#branch?(branch) ⇒ Boolean
returns true if the branch exists
332 333 334 335 |
# File 'lib/git/base.rb', line 332 def branch?(branch) branch_names = branches.map(&:name) branch_names.include?(branch) end |
#branches ⇒ Git::Branches
Returns a collection of all the branches in the repository. Each branch is represented as a Git::Branch.
860 861 862 |
# File 'lib/git/base.rb', line 860 def branches Git::Branches.new(self) end |
#cat_file(objectish) ⇒ String
Returns the contents of a git object
Uses git cat-file -p to pretty-print the contents of the given object.
837 838 839 |
# File 'lib/git/base.rb', line 837 def cat_file(objectish) lib.cat_file_contents(objectish) end |
#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
223 224 225 226 227 |
# File 'lib/git/base.rb', line 223 def chdir # :yields: the Git::Path Dir.chdir(dir.to_s) do yield dir.to_s end end |
#checkout
checks out a branch as the new git working directory
485 486 487 |
# File 'lib/git/base.rb', line 485 def checkout(*, **) lib.checkout(*, **) end |
#checkout_file(version, file)
checks out an old version of a file
490 491 492 |
# File 'lib/git/base.rb', line 490 def checkout_file(version, file) lib.checkout_file(version, file) end |
#checkout_index(opts = {})
763 764 765 |
# File 'lib/git/base.rb', line 763 def checkout_index(opts = {}) lib.checkout_index(opts) end |
#clean(opts = {})
cleans the working directory
options: :force :d :ff
431 432 433 |
# File 'lib/git/base.rb', line 431 def clean(opts = {}) lib.clean(opts) end |
#commit(message, opts = {})
commits all pending changes in the index file to the git repository
options:
:all
:allow_empty
:amend
:author
472 473 474 |
# File 'lib/git/base.rb', line 472 def commit(, opts = {}) lib.commit(, opts) end |
#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.
479 480 481 482 |
# File 'lib/git/base.rb', line 479 def commit_all(, opts = {}) opts = { add_all: true }.merge(opts) lib.commit(, opts) end |
#commit_tree(tree = nil, opts = {}) ⇒ Git::Object::Commit
Returns a commit object.
876 877 878 |
# File 'lib/git/base.rb', line 876 def commit_tree(tree = nil, opts = {}) Git::Object::Commit.new(self, lib.commit_tree(tree, opts)) end |
#config(name = nil, value = nil, options = {})
g.config('user.name', 'Scott Chacon') # sets value g.config('user.email', '[email protected]') # sets value g.config('user.email', '[email protected]', file: 'path/to/custom/config) # sets value in file g.config('user.name') # returns 'Scott Chacon' g.config # returns whole config hash
234 235 236 237 238 239 240 241 242 243 244 245 |
# File 'lib/git/base.rb', line 234 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 |
#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
849 850 851 |
# File 'lib/git/base.rb', line 849 def current_branch lib.branch_current end |
#delete_tag(name)
deletes a tag
650 651 652 |
# File 'lib/git/base.rb', line 650 def delete_tag(name) lib.tag(name, { d: true }) end |
#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
450 451 452 |
# File 'lib/git/base.rb', line 450 def describe(committish = nil, opts = {}) lib.describe(committish, opts) end |
#diff(objectish = 'HEAD', obj2 = nil) ⇒ Git::Diff
Returns a Git::Diff object.
881 882 883 |
# File 'lib/git/base.rb', line 881 def diff(objectish = 'HEAD', obj2 = nil) Git::Diff.new(self, objectish, obj2) end |
#diff_path_status(objectish = 'HEAD', obj2 = nil, opts = {}) ⇒ Git::DiffPathStatus Also known as: diff_name_status
Returns a Git::Diff::PathStatus object for accessing the name-status report.
962 963 964 965 966 967 968 969 970 971 972 973 |
# File 'lib/git/base.rb', line 962 def diff_path_status(objectish = 'HEAD', obj2 = nil, opts = {}) path_limiter = if opts.key?(:path_limiter) opts[:path_limiter] elsif opts.key?(:path) Git::Deprecation.warn( 'Git::Base#diff_path_status :path option is deprecated. Use :path_limiter instead.' ) opts[:path] end Git::DiffPathStatus.new(self, objectish, obj2, path_limiter) end |
#diff_stats(objectish = 'HEAD', obj2 = nil, opts = {}) ⇒ Git::DiffStats
Returns a Git::Diff::Stats object for accessing diff statistics.
950 951 952 |
# File 'lib/git/base.rb', line 950 def diff_stats(objectish = 'HEAD', obj2 = nil, opts = {}) Git::DiffStats.new(self, objectish, obj2, opts[:path_limiter]) end |
#dir
returns a reference to the working directory @git.dir.path @git.dir.writeable?
250 251 252 |
# File 'lib/git/base.rb', line 250 def dir @working_directory end |
#each_conflict
iterates over the files which are unmerged
534 535 536 |
# File 'lib/git/base.rb', line 534 def each_conflict(&) # :yields: file, your_version, their_version lib.conflicts(&) end |
#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
496 497 498 499 500 501 502 |
# File 'lib/git/base.rb', line 496 def fetch(remote = 'origin', opts = {}) if remote.is_a?(Hash) opts = remote remote = nil end lib.fetch(remote, opts) end |
#fsck(objects = [], options = {}) ⇒ Git::FsckResult
Verifies the connectivity and validity of objects in the database
Runs git fsck to check repository integrity and identify dangling,
missing, or unreachable objects.
rubocop:disable Style/ArgumentsForwarding
714 715 716 |
# File 'lib/git/base.rb', line 714 def fsck(*objects, **opts) lib.fsck(*objects, **opts) end |
#gblob(objectish) ⇒ Git::Object
Returns a Git object.
886 887 888 |
# File 'lib/git/base.rb', line 886 def gblob(objectish) Git::Object.new(self, objectish, 'blob') end |
#gc
664 665 666 |
# File 'lib/git/base.rb', line 664 def gc lib.gc end |
#gcommit(objectish) ⇒ Git::Object
Returns a Git object.
891 892 893 |
# File 'lib/git/base.rb', line 891 def gcommit(objectish) Git::Object.new(self, objectish, 'commit') end |
#grep(string, path_limiter = nil, opts = {}) ⇒ Hash<String, Array>
Run a grep for 'string' on the HEAD of the git repository
395 396 397 |
# File 'lib/git/base.rb', line 395 def grep(string, path_limiter = nil, opts = {}) object('HEAD').grep(string, path_limiter, opts) end |
#gtree(objectish) ⇒ Git::Object
Returns a Git object.
896 897 898 |
# File 'lib/git/base.rb', line 896 def gtree(objectish) Git::Object.new(self, objectish, 'tree') end |
#ignored_files ⇒ Array<String>
List the files in the worktree that are ignored by git
402 403 404 |
# File 'lib/git/base.rb', line 402 def ignored_files lib.ignored_files end |
#is_branch?(branch) ⇒ Boolean
rubocop:disable Naming/PredicatePrefix
337 338 339 340 341 342 343 |
# File 'lib/git/base.rb', line 337 def is_branch?(branch) # rubocop:disable Naming/PredicatePrefix Git::Deprecation.warn( 'Git::Base#is_branch? is deprecated and will be removed in a future version. ' \ 'Use Git::Base#branch? instead.' ) branch?(branch) end |
#is_local_branch?(branch) ⇒ Boolean
rubocop:disable Naming/PredicatePrefix
309 310 311 312 313 314 315 |
# File 'lib/git/base.rb', line 309 def is_local_branch?(branch) # rubocop:disable Naming/PredicatePrefix Git::Deprecation.warn( 'Git::Base#is_local_branch? is deprecated and will be removed in a future version. ' \ 'Use Git::Base#local_branch? instead.' ) local_branch?(branch) end |
#is_remote_branch?(branch) ⇒ Boolean
rubocop:disable Naming/PredicatePrefix
323 324 325 326 327 328 329 |
# File 'lib/git/base.rb', line 323 def is_remote_branch?(branch) # rubocop:disable Naming/PredicatePrefix Git::Deprecation.warn( 'Git::Base#is_remote_branch? is deprecated and will be removed in a future version. ' \ 'Use Git::Base#remote_branch? instead.' ) remote_branch?(branch) end |
#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
348 349 350 |
# File 'lib/git/base.rb', line 348 def lib @lib ||= LibImpl.new(self, @logger) end |
#local_branch?(branch) ⇒ Boolean
returns true if the branch exists locally
304 305 306 307 |
# File 'lib/git/base.rb', line 304 def local_branch?(branch) branch_names = branches.local.map(&:name) branch_names.include?(branch) end |
#log(count = 30) ⇒ Git::Log
Returns a log with the specified number of commits.
901 902 903 |
# File 'lib/git/base.rb', line 901 def log(count = 30) Git::Log.new(self, count) end |
#ls_files(location = nil)
784 785 786 |
# File 'lib/git/base.rb', line 784 def ls_files(location = nil) lib.ls_files(location) end |
#ls_tree(objectish, opts = {})
822 823 824 |
# File 'lib/git/base.rb', line 822 def ls_tree(objectish, opts = {}) lib.ls_tree(objectish, opts) end |
#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
529 530 531 |
# File 'lib/git/base.rb', line 529 def merge(branch, = 'merge', opts = {}) lib.merge(branch, , opts) end |
#merge_base ⇒ 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)
938 939 940 941 |
# File 'lib/git/base.rb', line 938 def merge_base(*) shas = lib.merge_base(*) shas.map { |sha| gcommit(sha) } end |
#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
915 916 917 |
# File 'lib/git/base.rb', line 915 def object(objectish) Git::Object.new(self, objectish) end |
#pull(remote = nil, branch = nil, opts = {}) ⇒ Void
Pulls the given branch from the given remote into the current branch
557 558 559 |
# File 'lib/git/base.rb', line 557 def pull(remote = nil, branch = nil, opts = {}) lib.pull(remote, branch, opts) end |
#push(remote = nil, branch = nil, options = {}) ⇒ Void
Push changes to a remote repository
522 523 524 |
# File 'lib/git/base.rb', line 522 def push(*, **) lib.push(*, **) end |
#read_tree(treeish, opts = {})
767 768 769 |
# File 'lib/git/base.rb', line 767 def read_tree(treeish, opts = {}) lib.read_tree(treeish, opts) end |
#remote(remote_name = 'origin') ⇒ Git::Remote
Returns a remote of the specified name.
920 921 922 |
# File 'lib/git/base.rb', line 920 def remote(remote_name = 'origin') Git::Remote.new(self, remote_name) end |
#remote_branch?(branch) ⇒ Boolean
returns true if the branch exists remotely
318 319 320 321 |
# File 'lib/git/base.rb', line 318 def remote_branch?(branch) branch_names = branches.remote.map(&:name) branch_names.include?(branch) end |
#remote_set_branches(name, *branches, add: false) ⇒ nil
Configures which branches are fetched for a remote
Uses git remote set-branches to set or append fetch refspecs. When the add:
option is not given, the --add option is not passed to the git command
the underlying git command fails
605 606 607 608 609 610 611 612 |
# File 'lib/git/base.rb', line 605 def remote_set_branches(name, *branches, add: false) branch_list = branches.flatten raise ArgumentError, 'branches are required' if branch_list.empty? lib.remote_set_branches(name, branch_list, add: add) nil end |
#remotes
returns an array of Git:Remote objects
562 563 564 |
# File 'lib/git/base.rb', line 562 def remotes lib.remotes.map { |r| Git::Remote.new(self, r) } end |
#remove_remote(name)
removes a remote from this repository
@git.remove_remote('scott_git')
617 618 619 |
# File 'lib/git/base.rb', line 617 def remove_remote(name) lib.remote_remove(name) end |
#repack
repacks the repository
660 661 662 |
# File 'lib/git/base.rb', line 660 def repack lib.repack end |
#repo
returns reference to the git repository directory @git.dir.path
259 260 261 |
# File 'lib/git/base.rb', line 259 def repo @repository end |
#repo_size
returns the repository size in bytes
264 265 266 267 268 269 270 271 |
# File 'lib/git/base.rb', line 264 def repo_size all_files = Dir.glob(File.join(repo.path, '**', '*'), File::FNM_DOTMATCH) all_files.reject { |file| file.include?('..') } .map { |file| File.(file) } .uniq .sum { |file| File.stat(file).size.to_i } end |
#reset(commitish = nil, opts = {})
resets the working directory to the provided commitish
414 415 416 |
# File 'lib/git/base.rb', line 414 def reset(commitish = nil, opts = {}) lib.reset(commitish, opts) end |
#reset_hard(commitish = nil, opts = {})
resets the working directory to the commitish with '--hard'
419 420 421 422 |
# File 'lib/git/base.rb', line 419 def reset_hard(commitish = nil, opts = {}) opts = { hard: true }.merge(opts) lib.reset(commitish, opts) end |
#rev_parse(objectish) Also known as: revparse
runs git rev-parse to convert the objectish to a full sha
815 816 817 |
# File 'lib/git/base.rb', line 815 def rev_parse(objectish) lib.rev_parse(objectish) end |
#revert(commitish = nil, opts = {})
reverts the working directory to the provided commitish. Accepts a range, such as comittish..HEAD
options:
:no_edit
460 461 462 |
# File 'lib/git/base.rb', line 460 def revert(commitish = nil, opts = {}) lib.revert(commitish, opts) end |
#rm(path = '.', opts = {}) Also known as: remove
removes file(s) from the git repository
407 408 409 |
# File 'lib/git/base.rb', line 407 def rm(path = '.', opts = {}) lib.rm(path, opts) end |
#set_index(index_file, check = nil, must_exist: nil)
273 274 275 276 277 278 279 280 281 282 283 284 285 286 |
# File 'lib/git/base.rb', line 273 def set_index(index_file, check = nil, must_exist: nil) unless check.nil? Git::Deprecation.warn( 'The "check" argument is deprecated and will be removed in a future version. ' \ 'Use "must_exist:" instead.' ) end # default is true must_exist = must_exist.nil? && check.nil? ? true : must_exist | check @lib = nil @index = Git::Index.new(index_file.to_s, must_exist:) end |
#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')
571 572 573 574 575 |
# File 'lib/git/base.rb', line 571 def set_remote_url(name, url) url = url.repo.to_s if url.is_a?(Git::Base) lib.remote_set_url(name, url) Git::Remote.new(self, name) end |
#set_working(work_dir, check = nil, must_exist: nil)
288 289 290 291 292 293 294 295 296 297 298 299 300 301 |
# File 'lib/git/base.rb', line 288 def set_working(work_dir, check = nil, must_exist: nil) unless check.nil? Git::Deprecation.warn( 'The "check" argument is deprecated and will be removed in a future version. ' \ 'Use "must_exist:" instead.' ) end # default is true must_exist = must_exist.nil? && check.nil? ? true : must_exist | check @lib = nil @working_directory = Git::WorkingDirectory.new(work_dir.to_s, must_exist:) end |
#show(objectish = nil, path = nil) ⇒ String
Shows objects
734 735 736 |
# File 'lib/git/base.rb', line 734 def show(objectish = nil, path = nil) lib.show(objectish, path) end |
#status ⇒ Git::Status
Returns a status object.
925 926 927 |
# File 'lib/git/base.rb', line 925 def status Git::Status.new(self) end |
#tag(tag_name) ⇒ Git::Object::Tag
Returns a tag object.
930 931 932 |
# File 'lib/git/base.rb', line 930 def tag(tag_name) Git::Object::Tag.new(self, tag_name) end |
#tags
returns an array of all Git::Tag objects for this repository
622 623 624 |
# File 'lib/git/base.rb', line 622 def lib..map { |r| tag(r) } end |
#update_ref(branch, commit)
780 781 782 |
# File 'lib/git/base.rb', line 780 def update_ref(branch, commit) branch(branch).update_ref(commit) end |
#with_index(new_index)
LOWER LEVEL INDEX OPERATIONS ##
740 741 742 743 744 745 746 |
# File 'lib/git/base.rb', line 740 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 |
#with_temp_index
748 749 750 751 752 753 754 755 756 757 758 759 760 761 |
# File 'lib/git/base.rb', line 748 def with_temp_index(&) # 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, &) end |
#with_temp_working
799 800 801 802 803 804 805 806 |
# File 'lib/git/base.rb', line 799 def with_temp_working(&) tempfile = Tempfile.new('temp-workdir') temp_dir = tempfile.path tempfile.close tempfile.unlink Dir.mkdir(temp_dir, 0o700) with_working(temp_dir, &) end |
#with_working(work_dir)
:yields: the Git::WorkingDirectory
788 789 790 791 792 793 794 795 796 797 |
# File 'lib/git/base.rb', line 788 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 |
#worktree(dir, commitish = nil)
returns a Git::Worktree object for dir, commitish
865 866 867 |
# File 'lib/git/base.rb', line 865 def worktree(dir, commitish = nil) Git::Worktree.new(self, dir, commitish) end |
#worktrees
returns a Git::worktrees object of all the Git::Worktrees objects for this repo
871 872 873 |
# File 'lib/git/base.rb', line 871 def worktrees Git::Worktrees.new(self) end |
#write_and_commit_tree(opts = {})
775 776 777 778 |
# File 'lib/git/base.rb', line 775 def write_and_commit_tree(opts = {}) tree = write_tree commit_tree(tree, opts) end |
#write_tree
771 772 773 |
# File 'lib/git/base.rb', line 771 def write_tree lib.write_tree end |