用r比较git中两个版本文件的两个数据

时间:2017-11-18 14:25:50

标签: r git

我构建了一个我想要保持版本控制的数据集。作为发布过程的一部分,我想比较不同版本的数据集。为简单起见,我想将数据保存为csv格式。

如何使用R go获取数据文件的两个不同git版本? (下一步是比较内容,但这不是问题的一部分)

示例代码:(编辑2017-11-19修正了一些错误)

#
# re-using git2r sample code for status
#

## Create a temporary git repository
path <- tempfile(pattern="git2r-")
dir.create(path)
repo <- init(path)
setwd(path)

#
# set up a simple frame and commit it twice 
#

df <- data.frame(x = 1, y = 1:2)
write.csv2(df, "df.csv", row.names = FALSE)
add(repo, "df.csv")
commit(repo, "First commit message")
df <- data.frame(x = 1, y = 1:3)
write.csv2(df, "df.csv", row.names = FALSE)
add(repo, "df.csv")
commit(repo, "2nd commit message")

我在寻找什么 - 一种恢复文件特定版本的方法

df_first_commit <- 
df_2nd_commit <- 

并使用接受答案的帮助

checkout(commits(repo)[[1]])
df_2nd_commit <- read.csv2("df.csv")
checkout(commits(repo)[[2]])
df_first_commit <- read.csv2("df.csv")

1 个答案:

答案 0 :(得分:1)

我找到了一种方法,也许有更好的方法。 它将涉及checkout个不同的修订, 为了安全地做到这一点,从干净的状态开始是很重要的, 没有未提交的编辑。

首先,您需要找到要切换到的提交,检查结果:

commits(repo)

一旦你知道你感兴趣的提交,切换到它:

# n is the commit number to switch to, 1 is the last, 2 is the one before, ...
checkout(commits(repo)[[n]])

此时,您可以将文件读入df_foo。 您可以切换到另一个提交以读入df_bar进行比较。 要切换回以前的状态:

checkout(repo, branch="master")

基于?checkout, 我希望能够在给定的版本中签出特定文件, 但这不适合我:

# doesn't work
checkout(commit, path="df.csv")

特定文件的签出似乎仅适用于repo参数,并且不适用于特定提交。 例如,这可以从索引中替换特定文件的内容:

checkout(repo, path="df.csv")

更重要的是,我正在寻找相当于git show SHA:path的, 获取文件的内容,但show方法的文档是无用的,我的微弱尝试并不富有成效:

# nothing useful here
show(commit, ":df.csv")
show(paste0(commit@sha, ":df.csv"))