Module: Git
- Extended by:
- Configuring, 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/factories.rb,
lib/git/worktrees.rb,
lib/git/diff_stats.rb,
lib/git/repository.rb,
lib/git/stash_info.rb,
lib/git/author_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/remote_info.rb,
lib/git/status_info.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/path_resolver.rb,
lib/git/worktree_info.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/parsers/remote.rb,
lib/git/parsers/status.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/parsers/worktree.rb,
lib/git/status_file_info.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/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/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, Factories, Parsers, PathResolver Classes: Author, AuthorInfo, 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, RemoteInfo, Repository, SignaledError, Stash, StashInfo, Stashes, Status, StatusFileInfo, StatusInfo, TagDeleteFailure, TagDeleteResult, TagInfo, TimeoutError, URL, UnexpectedResultError, Version, VersionConstraint, VersionError, Worktree, WorktreeInfo, 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.
Move custom methods to an application-owned extension module and include or prepend it into Repository.
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 an application-owned extension module. Module.new do # Emit a deprecation warning each time a method is defined in Git::Base so # that authors of monkeypatches are nudged toward application-owned extensions. def self.method_added(method_name) Git::Deprecation.warn( 'Monkeypatching Git::Base is deprecated and will be removed in v6.0.0. ' \ "Move #{method_name} to an application-owned extension module for Git::Repository." ) 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.6.0'- 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 handles both raw full refs (e.g.,
refs/heads/main) as stored in Git::BranchInfo#refname and normalized short-form refs (e.g.,main,remotes/origin/main) used elsewhere.Note:This regex is a fallback for branch refnames parsed without configured remote context. Remote names containing '/' can only be resolved reliably when the parser is given the configured remote names. 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/heads/)? # optional refs/heads/ prefix (stripped) (?:(?: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
780 781 782 783 784 785 786 787 788 789 |
# File 'lib/git.rb', line 780 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 v6.0.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.
544 545 546 547 548 |
# File 'lib/git.rb', line 544 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
555 556 557 558 559 |
# File 'lib/git.rb', line 555 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
242 243 244 |
# File 'lib/git.rb', line 242 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
230 231 232 233 |
# File 'lib/git.rb', line 230 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.
170 171 172 173 174 175 176 177 178 179 180 181 |
# File 'lib/git.rb', line 170 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
319 320 321 322 323 |
# File 'lib/git.rb', line 319 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)
into the given directory. It then removes all traces of git from the directory.
Removing .git is not atomic. If it fails, the exported files are complete and
usable, but the directory keeps whatever part of .git could not be deleted.
Nothing is cleaned up, because the exported files are the deliverable and the
leftover has to be removed by hand once the cause of the failure is fixed.
Takes the same options as clone except that :depth defaults to 1 and
:remote is ignored with a deprecation warning.
360 361 362 363 364 365 366 367 368 369 370 |
# File 'lib/git.rb', line 360 def self.export(repository_url, directory = nil, = {}) if .key?(:remote) Git::Deprecation.warn( 'The :remote option to Git.export is ignored, is deprecated, and will be removed in a future ' \ 'major release. Delete it from the call.' ) .delete(:remote) end repo = clone(repository_url, directory, { depth: 1 }.merge()) 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
580 581 582 583 |
# File 'lib/git.rb', line 580 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
396 397 398 399 400 401 402 403 |
# File 'lib/git.rb', line 396 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
492 493 494 495 496 497 498 499 500 501 502 |
# File 'lib/git.rb', line 492 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
209 210 211 212 213 214 215 |
# File 'lib/git.rb', line 209 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
272 273 274 275 276 277 278 279 |
# File 'lib/git.rb', line 272 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 |