Module: Git
- Extended by:
- Configuring, Repository::Factories
- Defined in:
- lib/git.rb,
lib/git.rb,
lib/git/log.rb,
lib/git/url.rb,
lib/git/diff.rb,
lib/git/stash.rb,
lib/git/author.rb,
lib/git/branch.rb,
lib/git/config.rb,
lib/git/errors.rb,
lib/git/object.rb,
lib/git/remote.rb,
lib/git/status.rb,
lib/git/status.rb,
lib/git/status.rb,
lib/git/stashes.rb,
lib/git/version.rb,
lib/git/branches.rb,
lib/git/commands.rb,
lib/git/file_ref.rb,
lib/git/tag_info.rb,
lib/git/worktree.rb,
lib/git/diff_info.rb,
lib/git/worktrees.rb,
lib/git/diff_stats.rb,
lib/git/repository.rb,
lib/git/stash_info.rb,
lib/git/branch_info.rb,
lib/git/commands/am.rb,
lib/git/commands/gc.rb,
lib/git/commands/mv.rb,
lib/git/commands/rm.rb,
lib/git/configuring.rb,
lib/git/diff_result.rb,
lib/git/fsck_object.rb,
lib/git/fsck_result.rb,
lib/git/parsers/tag.rb,
lib/git/command_line.rb,
lib/git/commands/add.rb,
lib/git/commands/log.rb,
lib/git/commands/tag.rb,
lib/git/dirstat_info.rb,
lib/git/escaped_path.rb,
lib/git/parsers/diff.rb,
lib/git/parsers/fsck.rb,
lib/git/parsers/grep.rb,
lib/git/commands/base.rb,
lib/git/commands/diff.rb,
lib/git/commands/fsck.rb,
lib/git/commands/grep.rb,
lib/git/commands/init.rb,
lib/git/commands/pull.rb,
lib/git/commands/push.rb,
lib/git/commands/show.rb,
lib/git/parsers/stash.rb,
lib/git/commands/apply.rb,
lib/git/commands/clean.rb,
lib/git/commands/clone.rb,
lib/git/commands/fetch.rb,
lib/git/commands/merge.rb,
lib/git/commands/reset.rb,
lib/git/commands/stash.rb,
lib/git/encoding_utils.rb,
lib/git/parsers/branch.rb,
lib/git/commands/branch.rb,
lib/git/commands/commit.rb,
lib/git/commands/remote.rb,
lib/git/commands/repack.rb,
lib/git/commands/revert.rb,
lib/git/commands/status.rb,
lib/git/parsers/ls_tree.rb,
lib/git/commands/am/quit.rb,
lib/git/commands/am/skip.rb,
lib/git/commands/archive.rb,
lib/git/commands/ls_tree.rb,
lib/git/commands/version.rb,
lib/git/diff_path_status.rb,
lib/git/parsers/cat_file.rb,
lib/git/command_line/base.rb,
lib/git/commands/am/abort.rb,
lib/git/commands/am/apply.rb,
lib/git/commands/am/retry.rb,
lib/git/commands/cat_file.rb,
lib/git/commands/checkout.rb,
lib/git/commands/describe.rb,
lib/git/commands/ls_files.rb,
lib/git/commands/name_rev.rb,
lib/git/commands/show_ref.rb,
lib/git/commands/tag/list.rb,
lib/git/commands/worktree.rb,
lib/git/config_entry_info.rb,
lib/git/execution_context.rb,
lib/git/parsers/ls_remote.rb,
lib/git/tag_delete_result.rb,
lib/git/commands/arguments.rb,
lib/git/commands/ls_remote.rb,
lib/git/commands/read_tree.rb,
lib/git/commands/rev_parse.rb,
lib/git/commands/stash/pop.rb,
lib/git/detached_head_info.rb,
lib/git/diff_file_raw_info.rb,
lib/git/repository/diffing.rb,
lib/git/repository/logging.rb,
lib/git/repository/merging.rb,
lib/git/repository/staging.rb,
lib/git/tag_delete_failure.rb,
lib/git/version_constraint.rb,
lib/git/command_line/result.rb,
lib/git/commands/diff_files.rb,
lib/git/commands/diff_index.rb,
lib/git/commands/merge/quit.rb,
lib/git/commands/merge_base.rb,
lib/git/commands/remote/add.rb,
lib/git/commands/stash/drop.rb,
lib/git/commands/stash/list.rb,
lib/git/commands/stash/push.rb,
lib/git/commands/stash/show.rb,
lib/git/commands/tag/create.rb,
lib/git/commands/tag/delete.rb,
lib/git/commands/tag/verify.rb,
lib/git/commands/update_ref.rb,
lib/git/commands/write_tree.rb,
lib/git/repository/stashing.rb,
lib/git/branch_delete_result.rb,
lib/git/commands/am/continue.rb,
lib/git/commands/branch/copy.rb,
lib/git/commands/branch/list.rb,
lib/git/commands/branch/move.rb,
lib/git/commands/commit_tree.rb,
lib/git/commands/maintenance.rb,
lib/git/commands/merge/abort.rb,
lib/git/commands/merge/start.rb,
lib/git/commands/remote/list.rb,
lib/git/commands/remote/show.rb,
lib/git/commands/revert/quit.rb,
lib/git/commands/revert/skip.rb,
lib/git/commands/stash/apply.rb,
lib/git/commands/stash/clear.rb,
lib/git/commands/stash/store.rb,
lib/git/diff_file_patch_info.rb,
lib/git/parsers/config_entry.rb,
lib/git/repository/branching.rb,
lib/git/repository/factories.rb,
lib/git/branch_delete_failure.rb,
lib/git/commands/cat_file/raw.rb,
lib/git/commands/remote/prune.rb,
lib/git/commands/revert/abort.rb,
lib/git/commands/revert/start.rb,
lib/git/commands/stash/branch.rb,
lib/git/commands/stash/create.rb,
lib/git/commands/symbolic_ref.rb,
lib/git/commands/worktree/add.rb,
lib/git/repository/committing.rb,
lib/git/repository/inspecting.rb,
lib/git/command_line/capturing.rb,
lib/git/command_line/streaming.rb,
lib/git/commands/branch/create.rb,
lib/git/commands/branch/delete.rb,
lib/git/commands/remote/remove.rb,
lib/git/commands/remote/rename.rb,
lib/git/commands/remote/update.rb,
lib/git/commands/show_ref/list.rb,
lib/git/commands/worktree/list.rb,
lib/git/commands/worktree/lock.rb,
lib/git/commands/worktree/move.rb,
lib/git/diff_file_numstat_info.rb,
lib/git/repository/maintenance.rb,
lib/git/commands/cat_file/batch.rb,
lib/git/commands/checkout/files.rb,
lib/git/commands/checkout_index.rb,
lib/git/commands/merge/continue.rb,
lib/git/commands/remote/get_url.rb,
lib/git/commands/remote/set_url.rb,
lib/git/commands/worktree/prune.rb,
lib/git/commands/checkout/branch.rb,
lib/git/commands/maintenance/run.rb,
lib/git/commands/remote/set_head.rb,
lib/git/commands/revert/continue.rb,
lib/git/commands/show_ref/exists.rb,
lib/git/commands/show_ref/verify.rb,
lib/git/commands/worktree/remove.rb,
lib/git/commands/worktree/repair.rb,
lib/git/commands/worktree/unlock.rb,
lib/git/execution_context/global.rb,
lib/git/repository/path_resolver.rb,
lib/git/commands/maintenance/stop.rb,
lib/git/commands/update_ref/batch.rb,
lib/git/repository/shared_private.rb,
lib/git/commands/cat_file/filtered.rb,
lib/git/commands/maintenance/start.rb,
lib/git/commands/symbolic_ref/read.rb,
lib/git/commands/update_ref/delete.rb,
lib/git/commands/update_ref/update.rb,
lib/git/repository/context_helpers.rb,
lib/git/commands/remote/set_url_add.rb,
lib/git/commands/branch/set_upstream.rb,
lib/git/commands/branch/show_current.rb,
lib/git/commands/remote/set_branches.rb,
lib/git/commands/symbolic_ref/delete.rb,
lib/git/commands/symbolic_ref/update.rb,
lib/git/execution_context/repository.rb,
lib/git/repository/object_operations.rb,
lib/git/repository/remote_operations.rb,
lib/git/repository/status_operations.rb,
lib/git/commands/archive/list_formats.rb,
lib/git/commands/config_option_syntax.rb,
lib/git/commands/maintenance/register.rb,
lib/git/commands/am/show_current_patch.rb,
lib/git/commands/branch/unset_upstream.rb,
lib/git/commands/remote/set_url_delete.rb,
lib/git/repository/worktree_operations.rb,
lib/git/commands/maintenance/unregister.rb,
lib/git/commands/config_option_syntax/add.rb,
lib/git/commands/config_option_syntax/get.rb,
lib/git/commands/config_option_syntax/set.rb,
lib/git/commands/worktree/management_base.rb,
lib/git/commands/config_option_syntax/list.rb,
lib/git/commands/show_ref/exclude_existing.rb,
lib/git/commands/config_option_syntax/unset.rb,
lib/git/commands/config_option_syntax/get_all.rb,
lib/git/commands/config_option_syntax/get_color.rb,
lib/git/commands/config_option_syntax/unset_all.rb,
lib/git/commands/config_option_syntax/get_regexp.rb,
lib/git/commands/config_option_syntax/replace_all.rb,
lib/git/commands/config_option_syntax/get_urlmatch.rb,
lib/git/commands/config_option_syntax/get_color_bool.rb,
lib/git/commands/config_option_syntax/remove_section.rb,
lib/git/commands/config_option_syntax/rename_section.rb
Overview
The Git module provides the basic functions to open a git reference to work with. You can open a working directory, open a bare repository, initialize a new repo or clone an existing remote repository.
Defined Under Namespace
Modules: CommandLine, Commands, Configuring, EncodingUtils, Parsers Classes: Author, Branch, BranchDeleteFailure, BranchDeleteResult, BranchInfo, Branches, CommandLineError, Config, ConfigEntryInfo, DetachedHeadInfo, Diff, DiffFileNumstatInfo, DiffFilePatchInfo, DiffFileRawInfo, DiffInfo, DiffPathStatus, DiffResult, DiffStats, DirstatEntry, DirstatInfo, Error, EscapedPath, ExecutionContext, FailedError, FileDiffInfo, FileRef, FsckObject, FsckResult, GitAltURI, Log, Object, ProcessIOError, Remote, Repository, SignaledError, Stash, StashInfo, Stashes, Status, TagDeleteFailure, TagDeleteResult, TagInfo, TimeoutError, URL, UnexpectedResultError, Version, VersionConstraint, VersionError, Worktree, Worktrees
Constant Summary collapse
- Deprecation =
The deprecation instance used to emit deprecation warnings for the Git gem
ActiveSupport::Deprecation.new('6.0.0', 'Git')
- MINIMUM_GIT_VERSION =
Minimum git version required by this gem
Commands and features may require newer versions, but this is the absolute minimum supported version for the gem as a whole.
Version.parse('2.28.0')
- Base =
Deprecated.
Define instance methods on Repository instead.
Compatibility shim for code that monkeypatches the
Git::Baseclass from versions prior to 5.0.0.Git::Baseis a module included in Repository, so any instance methods added toGit::Baseare automatically available on Repository instances. A deprecation warning is emitted for each method added, encouraging migration to Repository. Module.new do # Emit a deprecation warning each time a method is defined in Git::Base so # that authors of monkeypatches are nudged toward Git::Repository. def self.method_added(method_name) Git::Deprecation.warn( 'Monkeypatching Git::Base is deprecated and will be removed in v6.0.0. ' \ "Define #{method_name} in Git::Repository instead." ) super end # Raise a clear error when legacy code calls Git::Base.new directly. def self.new(...) raise NoMethodError, 'Git::Base.new is not supported. Use Git.open, Git.clone, or Git.init instead.' end end
- GitExecuteError =
Deprecated.
Use Git::Error instead
An alias for Git::Error
Git::GitExecuteError error class is an alias for Git::Error for backwards compatibility. It is recommended to use Git::Error directly.
ActiveSupport::Deprecation::DeprecatedConstantProxy.new('Git::GitExecuteError', 'Git::Error', Git::Deprecation)
- VERSION =
The current gem version
'5.0.0.beta.5'- BRANCH_REFNAME_REGEXP =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
Note:This regex is similar to Git::Branch::BRANCH_NAME_REGEXP but uses \A/\z anchors instead of ^/$ for stricter matching. As part of the architectural redesign, Git::Branch will eventually be refactored to use BranchInfo internally, at which point this will become the single source of truth for branch name parsing.
Note:This regex assumes remote names do not contain '/'. If a remote name contains '/', parsing will be incorrect. For example, 'remotes/team/upstream/main' would parse as remote_name='team' instead of 'team/upstream'. This is an inherent ambiguity in git refnames that can only be resolved with knowledge of configured remotes. See: https://github.com/ruby-git/ruby-git/issues/919
Regular expression for parsing branch refnames
Captures:
- remote_name: the remote name (e.g., 'origin') for remote branches, nil for local
- branch_name: the branch name without the remote prefix
%r{ \A # start of string (?:(?:refs/)?remotes/(?<remote_name>[^/]+)/)? # optional 'refs?/remotes/<remote_name>/' (?<branch_name>.+) # branch name (everything else) \z # end of string }x
Class Method Summary collapse
-
.binary_version(binary_path = nil) ⇒ Array<Integer>
deprecated
Deprecated.
Use Git.git_version instead, which returns a Version (not an Array)
For the legacy array shape, call:
Git.git_version.to_a. The optional binary_path argument is preserved:Git.git_version(binary_path). -
.cached_git_version(binary_path) { ... } ⇒ Git::Version
private
Return the cached git version for the given binary path.
-
.clear_git_version_cache
private
Clear the cached git version for all binary paths.
-
.config ⇒ Git::Config
Returns the process-wide Config singleton.
-
.configure {|config| ... }
Configures the gem by yielding Config.instance to the block.
-
.const_missing(name) ⇒ Class
private
Intercept the first lookup of the deprecated
Git::CommandLineResultconstant. -
.default_branch(repository, options = {}) ⇒ String
Returns the name of the default branch of the given repository.
-
.export(repository_url, directory = nil, options = {})
Clone a repository into
directorythen remove its.gitdirectory. -
.git_version(binary_path = nil) ⇒ Git::Version
Return the version of a git binary as a Version.
-
.global_config(name = nil, value = nil) ⇒ String, ...
deprecated
Deprecated.
Use config_get, config_set, or config_list instead.
Git.global_config('user.name')→Git.config_get('user.name', global: true)Git.global_config('user.name', 'Bob')→Git.config_set('user.name', 'Bob', global: true)Git.global_config→Git.config_list(global: true)
-
.ls_remote(repository = '.', options = {}) ⇒ Hash{String => Hash}
Displays references available in a remote repository along with the associated commit IDs.
Instance Method Summary collapse
-
#config(name = nil, value = nil)
deprecated
Deprecated.
Mixing in the
Gitmodule is deprecated and will be removed in v6.0.0. UseGit.config_get(name),Git.config_set(name, value), orGit.config_listinstead. -
#global_config(name = nil, value = nil)
deprecated
Deprecated.
Mixing in the
Gitmodule is deprecated and will be removed in v6.0.0. UseGit.config_get(name, global: true),Git.config_set(name, value, global: true), orGit.config_list(global: true)instead.
Class Method Details
.binary_version(binary_path = nil) ⇒ Array<Integer>
Use git_version instead, which returns a Version (not an Array)
For the legacy array shape, call: Git.git_version.to_a.
The optional binary_path argument is preserved:
Git.git_version(binary_path).
Return the version of the git binary
751 752 753 754 755 756 757 758 759 760 |
# File 'lib/git.rb', line 751 def self.binary_version(binary_path = nil) binary_path ||= Git::Config.instance.binary_path Git::Deprecation.warn( 'Git.binary_version is deprecated and will be removed in 6.0. ' \ 'Use Git.git_version instead, which returns a Git::Version ' \ '(not an Array). For the legacy array shape, call: Git.git_version.to_a. ' \ 'The optional binary_path argument is preserved: Git.git_version(binary_path).' ) git_version(binary_path).to_a end |
.cached_git_version(binary_path) { ... } ⇒ Git::Version
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.
Return the cached git version for the given binary path
If it isn't already known, compute it using the given block.
515 516 517 518 519 |
# File 'lib/git.rb', line 515 def self.cached_git_version(binary_path, &block) @git_version_cache_mutex.synchronize do @git_version_cache[binary_path] ||= block.call end end |
.clear_git_version_cache
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.
This method returns an undefined value.
Clear the cached git version for all binary paths
526 527 528 529 530 |
# File 'lib/git.rb', line 526 def self.clear_git_version_cache @git_version_cache_mutex.synchronize do @git_version_cache.clear end end |
.config ⇒ Git::Config
Returns the process-wide Config singleton
233 234 235 |
# File 'lib/git.rb', line 233 def self.config Git::Config.instance end |
.configure {|config| ... }
This method returns an undefined value.
Configures the gem by yielding Git::Config.instance to the block
221 222 223 224 |
# File 'lib/git.rb', line 221 def self.configure yield Git::Config.instance nil end |
.const_missing(name) ⇒ Class
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.
Intercept the first lookup of the deprecated Git::CommandLineResult constant
When name is :CommandLineResult, caches and returns Git::CommandLine::Result
after emitting a deprecation warning. Calls super for any other unknown constant,
preserving normal Ruby NameError behavior.
161 162 163 164 165 166 167 168 169 170 171 172 |
# File 'lib/git.rb', line 161 def self.const_missing(name) return super unless name == :CommandLineResult # Cache the constant first so subsequent accesses are zero-cost even if # the deprecation behavior raises (e.g. in the test suite). const_set(:CommandLineResult, Git::CommandLine::Result) Git::Deprecation.warn( 'Git::CommandLineResult is deprecated and will be removed in v6.0.0. ' \ 'Use Git::CommandLine::Result instead.' ) Git::CommandLine::Result end |
.default_branch(repository, options = {}) ⇒ String
Returns the name of the default branch of the given repository
310 311 312 313 314 |
# File 'lib/git.rb', line 310 def self.default_branch(repository, = {}) context = Git::ExecutionContext::Global.new(logger: [:log]) output = Git::Commands::LsRemote.new(context).call(repository, 'HEAD', symref: true).stdout Git::Parsers::LsRemote.parse_default_branch(output) end |
.export(repository_url, directory = nil, options = {})
This method returns an undefined value.
Clone a repository into directory then remove its .git directory
Exports the current HEAD (or the specific branch given in options[:branch])
into the given directory. It then removes all traces of git from the directory.
Takes the same options as clone except that :remote is silently ignored
and :depth defaults to 1.
336 337 338 339 340 341 |
# File 'lib/git.rb', line 336 def self.export(repository_url, directory = nil, = {}) .delete(:remote) repo = clone(repository_url, directory, { depth: 1 }.merge()) repo.checkout("origin/#{[:branch]}") if [:branch] FileUtils.rm_r File.join(repo.dir.to_s, '.git') end |
.git_version(binary_path = nil) ⇒ Git::Version
Return the version of a git binary as a Version
551 552 553 554 |
# File 'lib/git.rb', line 551 def self.git_version(binary_path = nil) path = binary_path || Git::Config.instance.binary_path cached_git_version(path) { run_git_version(path) } end |
.global_config(name = nil, value = nil) ⇒ String, ...
Use config_get, config_set, or config_list instead.
Git.global_config('user.name')→Git.config_get('user.name', global: true)Git.global_config('user.name', 'Bob')→Git.config_set('user.name', 'Bob', global: true)Git.global_config→Git.config_list(global: true)
Get or set a git global configuration value
367 368 369 370 371 372 373 374 |
# File 'lib/git.rb', line 367 def self.global_config(name = nil, value = nil) Git::Deprecation.warn( 'Git.global_config is deprecated and will be removed in v6.0.0. ' \ 'Use Git.config_get(name, global: true), Git.config_set(name, value, global: true), ' \ 'or Git.config_list(global: true) instead.' ) legacy_config_set_get_list(name, value, global: true) end |
.ls_remote(repository = '.', options = {}) ⇒ Hash{String => Hash}
Displays references available in a remote repository along with the associated commit IDs
463 464 465 466 467 468 469 470 471 472 473 |
# File 'lib/git.rb', line 463 def self.ls_remote(repository = '.', = {}) repository = normalize_ls_remote_repository(repository) = .dup log = .delete(:log) unknown = .keys - LS_REMOTE_ALLOWED_OPTS raise ArgumentError, "Unknown options: #{unknown.join(', ')}" unless unknown.empty? context = Git::ExecutionContext::Global.new(logger: log) output_lines = Git::Commands::LsRemote.new(context).call(repository, **).stdout.split("\n") Git::Parsers::LsRemote.parse_output(output_lines) end |
Instance Method Details
#config(name, value) ⇒ Git::CommandLine::Result #config(name) ⇒ String #config ⇒ Hash{String => String}
Mixing in the Git module is deprecated and will be removed in v6.0.0.
Use Git.config_get(name), Git.config_set(name, value), or Git.config_list instead.
Gets or sets local git configuration options
200 201 202 203 204 205 206 |
# File 'lib/git.rb', line 200 def config(name = nil, value = nil) Git::Deprecation.warn( 'Git#config is deprecated and will be removed in v6.0.0. ' \ 'Use Git.config_get(name), Git.config_set(name, value), or Git.config_list instead.' ) Git.__send__(:legacy_config_set_get_list, name, value, global: false) end |
#global_config(name, value) ⇒ Git::CommandLine::Result #global_config(name) ⇒ String #global_config ⇒ Hash{String => String}
Mixing in the Git module is deprecated and will be removed in v6.0.0.
Use Git.config_get(name, global: true), Git.config_set(name, value, global: true), or
Git.config_list(global: true) instead.
Gets or sets global git configuration options
263 264 265 266 267 268 269 270 |
# File 'lib/git.rb', line 263 def global_config(name = nil, value = nil) Git::Deprecation.warn( 'Git#global_config is deprecated and will be removed in v6.0.0. ' \ 'Use Git.config_get(name, global: true), Git.config_set(name, value, global: true), ' \ 'or Git.config_list(global: true) instead.' ) Git.__send__(:legacy_config_set_get_list, name, value, global: true) end |