Changes between commits, trees, working tree, etc.
Changes between commits, trees, working tree, etc.
## S3 method for class 'git_repository'diff( x, index =FALSE, as_char =FALSE, filename =NULL, context_lines =3, interhunk_lines =0, old_prefix ="a", new_prefix ="b", id_abbrev =NULL, path =NULL, max_size =NULL,...)## S3 method for class 'git_tree'diff( x, new_tree =NULL, index =FALSE, as_char =FALSE, filename =NULL, context_lines =3, interhunk_lines =0, old_prefix ="a", new_prefix ="b", id_abbrev =NULL, path =NULL, max_size =NULL,...)
Arguments
x: A git_repository object or the old git_tree
object to compare to.
index: - When object equals a git_repository: Whether to compare the index to HEAD. If FALSE (the default), then the working tree is compared to the index.
When object equals a git_tree: Whether to use the working directory (by default), or the index (if set to TRUE) in the comparison to object.
as_char: logical: should the result be converted to a character string?. Default is FALSE.
filename: If as_char is TRUE, then the diff can be written to a file with name filename (the file is overwritten if it exists). Default is NULL.
context_lines: The number of unchanged lines that define the boundary of a hunk (and to display before and after). Defaults to 3.
interhunk_lines: The maximum number of unchanged lines between hunk boundaries before the hunks will be merged into one. Defaults to 0.
old_prefix: The virtual "directory" prefix for old file names in hunk headers. Default is "a".
new_prefix: The virtual "directory" prefix for new file names in hunk headers. Defaults to "b".
id_abbrev: The abbreviation length to use when formatting object ids. Defaults to the value of 'core.abbrev' from the config, or 7 if NULL.
path: A character vector of paths / fnmatch patterns to constrain diff. Default is NULL which include all paths.
max_size: A size (in bytes) above which a blob will be marked as binary automatically; pass a negative value to disable. Defaults to 512MB when max_size is NULL.
...: Not used.
new_tree: The new git_tree object to compare, or NULL. If NULL, then we use the working directory or the index (see the index argument).
Returns
A git_diff object if as_char is FALSE. If as_char is TRUE and filename is NULL, a character string, else NULL.
Line endings
Different operating systems handle line endings differently. Windows uses both a carriage-return character and a linefeed character to represent a newline in a file. While Linux and macOS use only the linefeed character for a newline in a file. To avoid problems in your diffs, you can configure Git to properly handle line endings using the core.autocrlf
setting in the Git config file, see the Git documentation (https://git-scm.com/).
Examples
## Not run:## Initialize a repositorypath <- tempfile(pattern="git2r-")dir.create(path)repo <- init(path)## Config userconfig(repo, user.name ="Alice", user.email ="alice@example.org")## Create a file, add, commitwriteLines("Hello world!", file.path(path,"test.txt"))add(repo,"test.txt")commit(repo,"Commit message")## Change the filewriteLines(c("Hello again!","Here is a second line","And a third"), file.path(path,"test.txt"))## diff between index and workdirdiff_1 <- diff(repo)summary(diff_1)cat(diff(repo, as_char=TRUE))## Diff between index and HEAD is emptydiff_2 <- diff(repo, index=TRUE)summary(diff_2)cat(diff(repo, index=TRUE, as_char=TRUE))## Diff between tree and working dir, same as diff_1diff_3 <- diff(tree(commits(repo)[[1]]))summary(diff_3)cat(diff(tree(commits(repo)[[1]]), as_char=TRUE))## Add changes, diff between index and HEAD is the same as diff_1add(repo,"test.txt")diff_4 <- diff(repo, index=TRUE)summary(diff_4)cat(diff(repo, index=TRUE, as_char=TRUE))## Diff between tree and indexdiff_5 <- diff(tree(commits(repo)[[1]]), index=TRUE)summary(diff_5)cat(diff(tree(commits(repo)[[1]]), index=TRUE, as_char=TRUE))## Diff between two treescommit(repo,"Second commit")tree_1 <- tree(commits(repo)[[2]])tree_2 <- tree(commits(repo)[[1]])diff_6 <- diff(tree_1, tree_2)summary(diff_6)cat(diff(tree_1, tree_2, as_char=TRUE))## Binary filesset.seed(42)writeBin(as.raw((sample(0:255,1000, replace=TRUE))), con=file.path(path,"test.bin"))add(repo,"test.bin")diff_7 <- diff(repo, index=TRUE)summary(diff_7)cat(diff(repo, index=TRUE, as_char=TRUE))## End(Not run)