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/remote_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/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/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, RemoteInfo, 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.
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.0.1'- 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
754 755 756 757 758 759 760 761 762 763 |
# File 'lib/git.rb', line 754 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.
518 519 520 521 522 |
# File 'lib/git.rb', line 518 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
529 530 531 532 533 |
# File 'lib/git.rb', line 529 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
236 237 238 |
# File 'lib/git.rb', line 236 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
224 225 226 227 |
# File 'lib/git.rb', line 224 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.
164 165 166 167 168 169 170 171 172 173 174 175 |
# File 'lib/git.rb', line 164 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
313 314 315 316 317 |
# File 'lib/git.rb', line 313 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.
339 340 341 342 343 344 |
# File 'lib/git.rb', line 339 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
554 555 556 557 |
# File 'lib/git.rb', line 554 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
370 371 372 373 374 375 376 377 |
# File 'lib/git.rb', line 370 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
466 467 468 469 470 471 472 473 474 475 476 |
# File 'lib/git.rb', line 466 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
203 204 205 206 207 208 209 |
# File 'lib/git.rb', line 203 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
266 267 268 269 270 271 272 273 |
# File 'lib/git.rb', line 266 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 |