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)
- #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 +true+ if the branch exists.
-
#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
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.
-
#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 +true+ if 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 +true+ if 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.
163 164 165 166 167 168 |
# File 'lib/git/base.rb', line 163 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
350 351 352 |
# File 'lib/git/base.rb', line 350 def git_ssh @git_ssh end |
#index (readonly)
returns reference to the git index file
244 245 246 |
# File 'lib/git/base.rb', line 244 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.
17 18 19 20 |
# File 'lib/git/base.rb', line 17 def self.(git_dir, = {}) normalize_paths(, default_repository: git_dir, bare: true) new() end |
.binary_version(binary_path)
43 44 45 46 47 48 49 |
# File 'lib/git/base.rb', line 43 def self.binary_version(binary_path) result, status = execute_git_version(binary_path) raise "Failed to get git version: #{status}\n#{result}" unless status.success? parse_version_string(result) end |
.clone(repository_url, directory, options = {}) ⇒ Git::Base
Clone a repository into an empty or newly created directory
23 24 25 26 27 28 29 |
# File 'lib/git/base.rb', line 23 def self.clone(repository_url, directory, = {}) = {} [:git_ssh] = [:git_ssh] if .key?(:git_ssh) = Git::Lib.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
39 40 41 |
# File 'lib/git/base.rb', line 39 def self.config @config ||= Config.new end |
.init(directory = '.', options = {}) ⇒ Git::Base
Create an empty Git repository or reinitialize an existing Git repository
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/git/base.rb', line 71 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). # Git::Lib.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).
124 125 126 127 128 129 130 131 132 |
# File 'lib/git/base.rb', line 124 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
32 33 34 |
# File 'lib/git/base.rb', line 32 def self.repository_default_branch(repository, = {}) Git::Lib.new(nil, [:log]).repository_default_branch(repository) end |
.root_of_worktree(working_dir)
98 99 100 101 102 103 |
# File 'lib/git/base.rb', line 98 def self.root_of_worktree(working_dir) raise ArgumentError, "'#{working_dir}' does not exist" unless Dir.exist?(working_dir) result, status = execute_rev_parse_toplevel(working_dir) process_rev_parse_result(result, status, working_dir) end |
Instance Method Details
#add(paths = '.', **options)
Update the index from the current worktree to prepare the for the next commit
183 184 185 |
# File 'lib/git/base.rb', line 183 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 =>
197 198 199 200 201 |
# File 'lib/git/base.rb', line 197 def add_remote(name, url, opts = {}) url = url.repo.path 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
633 634 635 636 |
# File 'lib/git/base.rb', line 633 def add_tag(name, *) lib.tag(name, *) tag(name) end |
#apply(file)
657 658 659 660 661 |
# File 'lib/git/base.rb', line 657 def apply(file) return unless File.exist?(file) lib.apply(file) end |
#apply_mail(file)
663 664 665 |
# File 'lib/git/base.rb', line 663 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
644 645 646 |
# File 'lib/git/base.rb', line 644 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.
781 782 783 |
# File 'lib/git/base.rb', line 781 def branch(branch_name = current_branch) Git::Branch.new(self, branch_name) end |
#branch?(branch) ⇒ Boolean
returns +true+ if the branch exists
321 322 323 324 |
# File 'lib/git/base.rb', line 321 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.
787 788 789 |
# File 'lib/git/base.rb', line 787 def branches Git::Branches.new(self) end |
#cat_file(objectish)
764 765 766 |
# File 'lib/git/base.rb', line 764 def cat_file(objectish) lib.cat_file(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
212 213 214 215 216 |
# File 'lib/git/base.rb', line 212 def chdir # :yields: the Git::Path Dir.chdir(dir.path) do yield dir.path end end |
#checkout
checks out a branch as the new git working directory
474 475 476 |
# File 'lib/git/base.rb', line 474 def checkout(*, **) lib.checkout(*, **) end |
#checkout_file(version, file)
checks out an old version of a file
479 480 481 |
# File 'lib/git/base.rb', line 479 def checkout_file(version, file) lib.checkout_file(version, file) end |
#checkout_index(opts = {})
701 702 703 |
# File 'lib/git/base.rb', line 701 def checkout_index(opts = {}) lib.checkout_index(opts) end |
#clean(opts = {})
cleans the working directory
options: :force :d :ff
420 421 422 |
# File 'lib/git/base.rb', line 420 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
461 462 463 |
# File 'lib/git/base.rb', line 461 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.
468 469 470 471 |
# File 'lib/git/base.rb', line 468 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.
803 804 805 |
# File 'lib/git/base.rb', line 803 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
223 224 225 226 227 228 229 230 231 232 233 234 |
# File 'lib/git/base.rb', line 223 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
776 777 778 |
# File 'lib/git/base.rb', line 776 def current_branch lib.branch_current end |
#delete_tag(name)
deletes a tag
639 640 641 |
# File 'lib/git/base.rb', line 639 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
439 440 441 |
# File 'lib/git/base.rb', line 439 def describe(committish = nil, opts = {}) lib.describe(committish, opts) end |
#diff(objectish = 'HEAD', obj2 = nil) ⇒ Git::Diff
Returns a Git::Diff object.
808 809 810 |
# File 'lib/git/base.rb', line 808 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.
889 890 891 892 893 894 895 896 897 898 899 900 |
# File 'lib/git/base.rb', line 889 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.
877 878 879 |
# File 'lib/git/base.rb', line 877 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?
239 240 241 |
# File 'lib/git/base.rb', line 239 def dir @working_directory end |
#each_conflict
iterates over the files which are unmerged
523 524 525 |
# File 'lib/git/base.rb', line 523 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
485 486 487 488 489 490 491 |
# File 'lib/git/base.rb', line 485 def fetch(remote = 'origin', opts = {}) if remote.is_a?(Hash) opts = remote remote = nil end lib.fetch(remote, opts) end |
#gblob(objectish) ⇒ Git::Object
Returns a Git object.
813 814 815 |
# File 'lib/git/base.rb', line 813 def gblob(objectish) Git::Object.new(self, objectish, 'blob') end |
#gc
653 654 655 |
# File 'lib/git/base.rb', line 653 def gc lib.gc end |
#gcommit(objectish) ⇒ Git::Object
Returns a Git object.
818 819 820 |
# File 'lib/git/base.rb', line 818 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
384 385 386 |
# File 'lib/git/base.rb', line 384 def grep(string, path_limiter = nil, opts = {}) object('HEAD').grep(string, path_limiter, opts) end |
#gtree(objectish) ⇒ Git::Object
Returns a Git object.
823 824 825 |
# File 'lib/git/base.rb', line 823 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
391 392 393 |
# File 'lib/git/base.rb', line 391 def ignored_files lib.ignored_files end |
#is_branch?(branch) ⇒ Boolean
rubocop:disable Naming/PredicatePrefix
326 327 328 329 330 331 332 |
# File 'lib/git/base.rb', line 326 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
298 299 300 301 302 303 304 |
# File 'lib/git/base.rb', line 298 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
312 313 314 315 316 317 318 |
# File 'lib/git/base.rb', line 312 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
337 338 339 |
# File 'lib/git/base.rb', line 337 def lib @lib ||= Git::Lib.new(self, @logger) end |
#local_branch?(branch) ⇒ Boolean
returns +true+ if the branch exists locally
293 294 295 296 |
# File 'lib/git/base.rb', line 293 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.
828 829 830 |
# File 'lib/git/base.rb', line 828 def log(count = 30) Git::Log.new(self, count) end |
#ls_files(location = nil)
722 723 724 |
# File 'lib/git/base.rb', line 722 def ls_files(location = nil) lib.ls_files(location) end |
#ls_tree(objectish, opts = {})
760 761 762 |
# File 'lib/git/base.rb', line 760 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
518 519 520 |
# File 'lib/git/base.rb', line 518 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)
865 866 867 868 |
# File 'lib/git/base.rb', line 865 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
842 843 844 |
# File 'lib/git/base.rb', line 842 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
546 547 548 |
# File 'lib/git/base.rb', line 546 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
511 512 513 |
# File 'lib/git/base.rb', line 511 def push(*, **) lib.push(*, **) end |
#read_tree(treeish, opts = {})
705 706 707 |
# File 'lib/git/base.rb', line 705 def read_tree(treeish, opts = {}) lib.read_tree(treeish, opts) end |
#remote(remote_name = 'origin') ⇒ Git::Remote
Returns a remote of the specified name.
847 848 849 |
# File 'lib/git/base.rb', line 847 def remote(remote_name = 'origin') Git::Remote.new(self, remote_name) end |
#remote_branch?(branch) ⇒ Boolean
returns +true+ if the branch exists remotely
307 308 309 310 |
# File 'lib/git/base.rb', line 307 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
594 595 596 597 598 599 600 601 |
# File 'lib/git/base.rb', line 594 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
551 552 553 |
# File 'lib/git/base.rb', line 551 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')
606 607 608 |
# File 'lib/git/base.rb', line 606 def remove_remote(name) lib.remote_remove(name) end |
#repack
repacks the repository
649 650 651 |
# File 'lib/git/base.rb', line 649 def repack lib.repack end |
#repo
returns reference to the git repository directory @git.dir.path
248 249 250 |
# File 'lib/git/base.rb', line 248 def repo @repository end |
#repo_size
returns the repository size in bytes
253 254 255 256 257 258 259 260 |
# File 'lib/git/base.rb', line 253 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
403 404 405 |
# File 'lib/git/base.rb', line 403 def reset(commitish = nil, opts = {}) lib.reset(commitish, opts) end |
#reset_hard(commitish = nil, opts = {})
resets the working directory to the commitish with '--hard'
408 409 410 411 |
# File 'lib/git/base.rb', line 408 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
753 754 755 |
# File 'lib/git/base.rb', line 753 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
449 450 451 |
# File 'lib/git/base.rb', line 449 def revert(commitish = nil, opts = {}) lib.revert(commitish, opts) end |
#rm(path = '.', opts = {}) Also known as: remove
removes file(s) from the git repository
396 397 398 |
# File 'lib/git/base.rb', line 396 def rm(path = '.', opts = {}) lib.rm(path, opts) end |
#set_index(index_file, check = nil, must_exist: nil)
262 263 264 265 266 267 268 269 270 271 272 273 274 275 |
# File 'lib/git/base.rb', line 262 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')
560 561 562 563 564 |
# File 'lib/git/base.rb', line 560 def set_remote_url(name, url) url = url.repo.path 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)
277 278 279 280 281 282 283 284 285 286 287 288 289 290 |
# File 'lib/git/base.rb', line 277 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
672 673 674 |
# File 'lib/git/base.rb', line 672 def show(objectish = nil, path = nil) lib.show(objectish, path) end |
#status ⇒ Git::Status
Returns a status object.
852 853 854 |
# File 'lib/git/base.rb', line 852 def status Git::Status.new(self) end |
#tag(tag_name) ⇒ Git::Object::Tag
Returns a tag object.
857 858 859 |
# File 'lib/git/base.rb', line 857 def tag(tag_name) Git::Object::Tag.new(self, tag_name) end |
#tags
returns an array of all Git::Tag objects for this repository
611 612 613 |
# File 'lib/git/base.rb', line 611 def lib..map { |r| tag(r) } end |
#update_ref(branch, commit)
718 719 720 |
# File 'lib/git/base.rb', line 718 def update_ref(branch, commit) branch(branch).update_ref(commit) end |
#with_index(new_index)
LOWER LEVEL INDEX OPERATIONS ##
678 679 680 681 682 683 684 |
# File 'lib/git/base.rb', line 678 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
686 687 688 689 690 691 692 693 694 695 696 697 698 699 |
# File 'lib/git/base.rb', line 686 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
737 738 739 740 741 742 743 744 |
# File 'lib/git/base.rb', line 737 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
726 727 728 729 730 731 732 733 734 735 |
# File 'lib/git/base.rb', line 726 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
792 793 794 |
# File 'lib/git/base.rb', line 792 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
798 799 800 |
# File 'lib/git/base.rb', line 798 def worktrees Git::Worktrees.new(self) end |
#write_and_commit_tree(opts = {})
713 714 715 716 |
# File 'lib/git/base.rb', line 713 def write_and_commit_tree(opts = {}) tree = write_tree commit_tree(tree, opts) end |
#write_tree
709 710 711 |
# File 'lib/git/base.rb', line 709 def write_tree lib.write_tree end |