Functions
2.1 Annotated Commit
2.2 Blame
2.3 Blob
2.4 Branch
2.5 Buffer
2.6 Checkout
2.7 Cherrypick
2.8 Clone
2.9 Commit
2.10 Config
2.11 Credentials
2.12 Describe
2.13 Diff
2.14 Fetch
2.15 Filter
2.16 Errors
2.17 Graph
2.18 Ignore
2.19 Index
2.20 Indexer
2.21 Global
2.22 Merge
2.23 Message
2.24 Note
2.25 Object
2.26 Object Database
2.27 Oid
2.28 Oid Array
2.29 Packbuilder
2.30 Patch
2.31 Pathspec
2.32 Proxy
2.33 Push
2.34 Rebase
2.35 Refdb
2.36 Reference
2.37 Reflog
2.38 Refspec
2.39 Remote
2.40 Repository
2.41 Reset
2.42 Revert
2.43 Revparse
2.44 Revwalk
2.45 Signature
2.46 Stash
2.47 Status
2.48 Strarray
2.49 Submodule
2.50 Tag
2.51 Tree
2.52 Treebuilder
On this page:
git_  index_  add
git_  index_  add_  all
git_  index_  add_  bypath
git_  index_  add_  frombuffer
git_  index_  caps
git_  index_  checksum
git_  index_  clear
git_  index_  conflict_  add
git_  index_  conflict_  cleanup
git_  index_  conflict_  get
git_  index_  conflict_  iterator_  free
git_  index_  conflict_  iterator_  new
git_  index_  conflict_  next
git_  index_  conflict_  remove
git_  index_  entry_  is_  conflict
git_  index_  entry_  stage
git_  index_  entrycount
git_  index_  find
git_  index_  find_  prefix
git_  index_  free
git_  index_  get_  byindex
git_  index_  get_  bypath
git_  index_  has_  conflicts
git_  index_  new
git_  index_  open
git_  index_  owner
git_  index_  path
git_  index_  read
git_  index_  read_  tree
git_  index_  remove
git_  index_  remove_  all
git_  index_  remove_  bypath
git_  index_  remove_  directory
git_  index_  set_  caps
git_  index_  set_  version
git_  index_  update_  all
git_  index_  version
git_  index_  write
git_  index_  write_  tree
git_  index_  write_  tree_  to
7.7

2.19 Index

 (require libgit2/include/index) package: libgit2

procedure

(git_index_add index source_entry)  integer?

  index : index?
  source_entry : index_entry?
Add or update an index entry from an in-memory struct

If a previous index entry exists that has the same path and stage as the given ’source_entry’, it will be replaced. Otherwise, the ’source_entry’ will be added.

A full copy (including the ’path’ string) of the given ’source_entry’ will be inserted on the index.

procedure

(git_index_add_all index    
  pathspec    
  flags    
  callback    
  payload)  integer?
  index : index?
  pathspec : strarray?
  flags : git_index_add_option_t
  callback : git_index_matched_path_cb
  payload : bytes?
Add or update index entries matching files in the working directory.

This method will fail in bare index instances.

The pathspec is a list of file names or shell glob patterns that will matched against files in the repository’s working directory. Each file that matches will be added to the index (either updating an existing entry or adding a new entry). You can disable glob expansion and force exact matching with the GIT_INDEX_ADD_DISABLE_PATHSPEC_MATCH flag.

Files that are ignored will be skipped (unlike git_index_add_bypath). If a file is already tracked in the index, then it will be updated even if it is ignored. Pass the GIT_INDEX_ADD_FORCE flag to skip the checking of ignore rules.

To emulate git add -A and generate an error if the pathspec contains the exact path of an ignored file (when not using FORCE), add the GIT_INDEX_ADD_CHECK_PATHSPEC flag. This checks that each entry in the pathspec that is an exact match to a filename on disk is either not ignored or already in the index. If this check fails, the function will return GIT_EINVALIDSPEC.

To emulate git add -A with the "dry-run" option, just use a callback function that always returns a positive value. See below for details.

If any files are currently the result of a merge conflict, those files will no longer be marked as conflicting. The data about the conflicts will be moved to the "resolve undo" (REUC) section.

If you provide a callback function, it will be invoked on each matching item in the working directory immediately before it is added to / updated in the index. Returning zero will add the item to the index, greater than zero will skip the item, and less than zero will abort the scan and return that value to the caller.

procedure

(git_index_add_bypath index path)  integer?

  index : index?
  path : string?
Add or update an index entry from a file on disk

The file path must be relative to the repository’s working folder and must be readable.

This method will fail in bare index instances.

This forces the file to be added to the index, not looking at gitignore rules. Those rules can be evaluated through the git_status APIs (in status.h) before calling this.

If this file currently is the result of a merge conflict, this file will no longer be marked as conflicting. The data about the conflict will be moved to the "resolve undo" (REUC) section.

procedure

(git_index_add_frombuffer index    
  entry    
  buffer    
  len)  integer?
  index : index?
  entry : index_entry?
  buffer : bytes?
  len : integer?
Add or update an index entry from a buffer in memory

This method will create a blob in the repository that owns the index and then add the index entry to the index. The path of the entry represents the position of the blob relative to the repository’s root folder.

If a previous index entry exists that has the same path as the given ’entry’, it will be replaced. Otherwise, the ’entry’ will be added. The id and the file_size of the ’entry’ are updated with the real value of the blob.

This forces the file to be added to the index, not looking at gitignore rules. Those rules can be evaluated through the git_status APIs (in status.h) before calling this.

If this file currently is the result of a merge conflict, this file will no longer be marked as conflicting. The data about the conflict will be moved to the "resolve undo" (REUC) section.

procedure

(git_index_caps index)  git_indexcap_t

  index : index?
Read index capabilities flags.

procedure

(git_index_checksum index)  oid?

  index : index?
Get the checksum of the index

This checksum is the SHA-1 hash over the index file (except the last 20 bytes which are the checksum itself). In cases where the index does not exist on-disk, it will be zeroed out.

procedure

(git_index_clear index)  integer?

  index : index?
Clear the contents (all the entries) of an index object.

This clears the index object in memory; changes must be explicitly written to disk for them to take effect persistently.

procedure

(git_index_conflict_add index    
  ancestor_entry    
  our_entry    
  their_entry)  integer?
  index : index?
  ancestor_entry : index_entry?
  our_entry : index_entry?
  their_entry : index_entry?
Add or update index entries to represent a conflict. Any staged entries that exist at the given paths will be removed.

The entries are the entries from the tree included in the merge. Any entry may be null to indicate that that file was not present in the trees during the merge. For example, ancestor_entry may be NULL to indicate that a file was added in both branches and must be resolved.

procedure

(git_index_conflict_cleanup index)  integer?

  index : index?
Remove all conflicts in the index (entries with a stage greater than 0).

procedure

(git_index_conflict_get index path)  integer?

  index : index?
  path : string?
Get the index entries that represent a conflict of a single file.

The entries are not modifiable and should not be freed. Because the git_index_entry struct is a publicly defined struct, you should be able to make your own permanent copy of the data if necessary.

Returns (values (ancestor_out : index_entry?) (our_out : index_entry?) (their_out : index_entry?)). See Multiple Values

procedure

(git_index_conflict_iterator_free iterator)  void?

  iterator : index_conflict_iterator?
Frees a git_index_conflict_iterator.

procedure

(git_index_conflict_iterator_new index)

  index_conflict_iterator?
  index : index?
Create an iterator for the conflicts in the index.

The index must not be modified while iterating; the results are undefined.

procedure

(git_index_conflict_next iterator)  integer?

  iterator : index_conflict_iterator?
Returns the current conflict (ancestor, ours and theirs entry) and advance the iterator internally to the next value.

Returns (values (ancestor_out : index_entry?) (our_out : index_entry?) (their_out : index_entry?)). See Multiple Values

procedure

(git_index_conflict_remove index path)  integer?

  index : index?
  path : string?
Removes the index entries that represent a conflict of a single file.

procedure

(git_index_entry_is_conflict entry)  boolean?

  entry : index_entry?
Return whether the given index entry is a conflict (has a high stage entry). This is simply shorthand for git_index_entry_stage > 0.

procedure

(git_index_entry_stage entry)  integer?

  entry : index_entry?
Return the stage number from a git index entry

This entry is calculated from the entry’s flag attribute like this:

(entry->flags & GIT_IDXENTRY_STAGEMASK) >> GIT_IDXENTRY_STAGESHIFT

procedure

(git_index_entrycount index)  integer?

  index : index?
Get the count of entries currently in the index

procedure

(git_index_find index path)  integer?

  index : index?
  path : string?
Find the first position of any entries which point to given path in the Git index.

procedure

(git_index_find_prefix index prefix)  integer?

  index : index?
  prefix : string?
Find the first position of any entries matching a prefix. To find the first position of a path inside a given folder, suffix the prefix with a ’/’.

procedure

(git_index_free index)  void?

  index : index?
Free an existing index object.

procedure

(git_index_get_byindex index n)  index_entry?

  index : index?
  n : integer?
Get a pointer to one of the entries in the index

The entry is not modifiable and should not be freed. Because the git_index_entry struct is a publicly defined struct, you should be able to make your own permanent copy of the data if necessary.

procedure

(git_index_get_bypath index path stage)  index_entry?

  index : index?
  path : string?
  stage : integer?
Get a pointer to one of the entries in the index

The entry is not modifiable and should not be freed. Because the git_index_entry struct is a publicly defined struct, you should be able to make your own permanent copy of the data if necessary.

procedure

(git_index_has_conflicts index)  boolean?

  index : index?
Determine if the index contains entries representing file conflicts.

procedure

(git_index_new)  index?

Create an in-memory index object.

This index object cannot be read/written to the filesystem, but may be used to perform in-memory index operations.

The index must be freed once it’s no longer in use.

procedure

(git_index_open index_path)  index?

  index_path : string?
Create a new bare Git index object as a memory representation of the Git index file in ’index_path’, without a repository to back it.

Since there is no ODB or working directory behind this index, any Index methods which rely on these (e.g. index_add_bypath) will fail with the GIT_ERROR error code.

If you need to access the index of an actual repository, use the git_repository_index wrapper.

The index must be freed once it’s no longer in use.

procedure

(git_index_owner index)  repository?

  index : index?
Get the repository this index relates to

procedure

(git_index_path index)  string?

  index : index?
Get the full path to the index file on disk.

procedure

(git_index_read index force)  integer?

  index : index?
  force : boolean?
Update the contents of an existing index object in memory by reading from the hard disk.

If force is true, this performs a "hard" read that discards in-memory changes and always reloads the on-disk index data. If there is no on-disk version, the index will be cleared.

If force is false, this does a "soft" read that reloads the index data from disk only if it has changed since the last time it was loaded. Purely in-memory index data will be untouched. Be aware: if there are changes on disk, unwritten in-memory changes are discarded.

procedure

(git_index_read_tree index tree)  integer?

  index : index?
  tree : tree?
Read a tree into the index file with stats

The current index contents will be replaced by the specified tree.

procedure

(git_index_remove index path stage)  integer?

  index : index?
  path : string?
  stage : integer?
Remove an entry from the index

procedure

(git_index_remove_all index    
  pathspec    
  callback    
  payload)  integer?
  index : index?
  pathspec : strarray?
  callback : git_index_matched_path_cb
  payload : bytes?
Remove all matching index entries.

If you provide a callback function, it will be invoked on each matching item in the index immediately before it is removed. Return 0 to remove the item, > 0 to skip the item, and < 0 to abort the scan.

procedure

(git_index_remove_bypath index path)  integer?

  index : index?
  path : string?
Remove an index entry corresponding to a file on disk

The file path must be relative to the repository’s working folder. It may exist.

If this file currently is the result of a merge conflict, this file will no longer be marked as conflicting. The data about the conflict will be moved to the "resolve undo" (REUC) section.

procedure

(git_index_remove_directory index dir stage)  integer?

  index : index?
  dir : string?
  stage : integer?
Remove all entries from the index under a given directory

procedure

(git_index_set_caps index caps)  integer?

  index : index?
  caps : git_indexcap_t
Set index capabilities flags.

If you pass GIT_INDEXCAP_FROM_OWNER for the caps, then the capabilities will be read from the config of the owner object, looking at core.ignorecase, core.filemode, core.symlinks.

procedure

(git_index_set_version index version)  integer?

  index : index?
  version : int?
Set index on-disk version.

Valid values are 2, 3, or 4. If 2 is given, git_index_write may write an index with version 3 instead, if necessary to accurately represent the index.

procedure

(git_index_update_all index    
  pathspec    
  callback    
  payload)  integer?
  index : index?
  pathspec : strarray?
  callback : git_index_matched_path_cb
  payload : bytes?
Update all index entries to match the working directory

This method will fail in bare index instances.

This scans the existing index entries and synchronizes them with the working directory, deleting them if the corresponding working directory file no longer exists otherwise updating the information (including adding the latest version of file to the ODB if needed).

If you provide a callback function, it will be invoked on each matching item in the index immediately before it is updated (either refreshed or removed depending on working directory state). Return 0 to proceed with updating the item, > 0 to skip the item, and < 0 to abort the scan.

procedure

(git_index_version index)  integer?

  index : index?
Get index on-disk version.

Valid return values are 2, 3, or 4. If 3 is returned, an index with version 2 may be written instead, if the extension data in version 3 is not necessary.

procedure

(git_index_write index)  integer?

  index : index?
Write an existing index object from memory back to disk using an atomic file lock.

procedure

(git_index_write_tree out index)  integer?

  out : oid?
  index : index?
Write the index as a tree

This method will scan the index and write a representation of its current state back to disk; it recursively creates tree objects for each of the subtrees stored in the index, but only returns the OID of the root tree. This is the OID that can be used e.g. to create a commit.

The index instance cannot be bare, and needs to be associated to an existing repository.

The index must not contain any file in conflict.

procedure

(git_index_write_tree_to out index repo)  integer?

  out : oid?
  index : index?
  repo : repository?
Write the index as a tree to the given repository

This method will do the same as git_index_write_tree, but letting the user choose the repository where the tree will be written.

The index must not contain any file in conflict.