跳到目录

此套餐由rOpenSci(开放科学)Tidyverse公司团队。

R的简单Git客户端

基于“libgit2”的R的简单git客户端,支持SSH和HTTPS远程。gert中的所有函数都使用基本的R数据类型(例如向量和数据帧)作为其参数和返回值。用户凭据通过git凭据存储和存储在磁盘或ssh代理上的ssh密钥与命令行“git”共享。在Linux上,需要一个更新版本的“libgit2”;我们为较旧的Ubuntu LTS版本提供PPA。

安装

#安装最新版本
安装.包(“gert”,回购= c(c)(
罗宾西= 'https://ropensci.r-universe.dev网址',
CRAN(起重机)= 'https://cloud.r-project.org网站'))
    
#要安装CRAN释放装置:
安装.包(“gert”)

在Linux上,您需要安装libgit2:

如果找不到合适的libgit2版本,包会自动尝试下载静态构建。

你好,世界

gert入门的一些基本命令:

图书馆(格特)
回购 <- git_克隆("https://github.com/r-lib/gert")
设置wd(“gert”)

#显示一些信息
git_log(日志)(最大值= 10)

#创建分支
git分支创建(“我的分支”,签出= 真的)

#承诺一些事情
写入行(“Lorem ipsum悲哀坐amet”,'测试.txt')
数字地址('测试.txt')
git_承诺(“添加文件”,作者= “杰里<jerry@gmail.com>")
数字日志(最大值= 10)

#将其合并到master中
git分支检查(“主人”)
git_合并(“我的分支”)
git_branch_delete(git分支删除)(“我的分支”)

#删除提交
git_reset_硬(“头部^”)

我应该使用HTTPS还是SSH远程?

在大多数平台上,gert支持HTTPS或SSH远程。如果你没有任何偏好,最安全的选择是使用PAT作为密码的HTTPS远程这也是我自己用的。HTTPS远程具有以下优点:

  • 您的凭据由您的操作系统安全存储,可以通过gert和命令行访问吉特.
  • Https可以在任何网络上工作。然而,ssh协议需要端口22,这在公共wifi网络上经常被阻塞。
  • 您可以使用与GITHUB API相同的GITHUB_PAT通过https进行身份验证。
  • libgit2支持所有平台上的https(SSH支持取决于libssh2的可用性)。

再次声明:无需在gert/git中使用Github主密码。相反生成个人访问令牌并在从https远程推/拉时输入此密码。这适用于gert和git命令行,即使您启用了2FA(您应该启用)。

忍者小贴士:使用凭据::set_github_pat()自动设置GITHUB_PAT公司使用git凭据存储中存储的值在R会话中创建环境变量。这是一种比将PAT硬编码在您的伦维龙.

与的差异吉特2

Gert基于利比亚吉特2,就像rOpenSci包一样吉特2。两者都是不错的套餐。建立良好的git2r自2015年以来一直在CRAN上,由Stefan Widgren积极维护,并被广泛使用。Gert于2019年启动,基于libgit2中最新的API以及从使用git2r中吸取的教训,采用了一种全新的方法。一些主要差异:

简单

Gert专注于使最终用户免受libgit2复杂性影响的高级功能。gert中的函数使用标准的R数据类型(例如向量和数据帧)作为其参数和返回值,这对于R用户/包来说应该很容易使用。目标存储库可以从当前工作目录推断出来,也可以指定为文件路径。分支和远程是按名称引用的,很像命令行吉特。gert中的所有函数都没有向用户公开任何externalptr类型。

>gert::git_log(最大值=6)#A tibble:6 x 6提交作者时间文件合并消息*<chr><chr><dttm><int><lgl><chr1 6f39ba6dae890d679970c0f8bf03…Jeroen Ooms<jeroenooms@…2020-06-16 01:16:33 17 FALSE“添加一些家庭数据…2 c023c407a0f0bfa395576bc3551…Jeroen Ooms<jeroenooms@…2020-06-16 01:06:38 1 FALSE“检查匹配…3 24234060ea8e54c73ddd0bce90ff…Jeroen Ooms<jeroenooms@…2020-06-15 13:17:57 1 FALSE“更新fedora链接…4 e60b0fbad129f470a2f7065063fa…Jeroen Ooms<jeroenooms@…2020-06-15 13:05:45 4 FALSE“调整文档和rea…5 629420ddccbab51c1e78f472bf06…Jeroen Ooms<jeroenooms@…2020-06-15 12:14:25 1 FALSE“更多测试\n”6 a62ce14eb887e183ad0a3cf0e22c…Jeroen Ooms<jeroenooms@…2020-06-15 12:06:41 1 FALSE“修复单元测试”

对于熟悉吉特命令行中,gert应该主要是自我解释的,并且通常“只工作”。

自动身份验证

auth的总体目标是,只要命令行也是这样,gert就应该成功地发现凭据吉特。如果失败,还有一种调试方法。

要使用git2r中的远程进行身份验证,您通常需要在每次调用中手动传递凭据,例如。,git2r::克隆()。https远程通常是这种情况,即使是ssh远程也是如此。这给那些吉特或间接使用git2r。

在gert中,使用资格证书包裹。此包调用本地OS凭据存储,该存储也由吉特命令行。因此,gert将自动获取安全存储在操作系统密钥链中的https凭据。

如果存储区中没有可用的凭据,gert将尝试使用您的GITHUB_PAT公司(如果设置)用于GitHub https远程。如果这些都不起作用,它会使用以下命令安全地提示用户输入凭据任务通行证总之,这些方法应该使https身份验证在任何情况下都“有效”,而不必在R中手动提供密码。

使用ssh远程进行身份验证有点复杂,但gert将再次尝试使其尽可能顺利。首先,gert会告诉您在附加软件包时是否支持SSH(所有现代系统都支持这种情况):

> 图书馆(格特)
链接到libgit2 v1。0,支持ssh:
全局配置: /用户/杰伦/.gitconfig文件
默认用户:杰罗恩·乌姆斯<杰罗努姆@gmail.com网站

在Mac/Linux上,gert首先尝试使用来自ssh-代理。如果这不起作用,它会在您的系统上寻找合适的ssh密钥(通常是标识_ rsa),如果它受到密码短语的保护,gert将使用以下命令安全地提示用户输入密码短语任务通行证。如果用户还没有SSH密钥,则资格证书软件包使设置变得容易。

> 图书馆(凭据)
找到git版本2.24.3(苹果Git-128)
支持的HTTPS凭据帮助程序:缓存,存储
找到OpenSSH_8.1p1,LibreSSL2.7.3
默认SSH密钥: /用户/杰伦/.ssh文件/标识_ rsa

仍然存在的一个限制是libgit2不支持ssh-代理在Windows上。这是不太可能改变因为ssh-agent使用本机Windows软件中不存在的unix套接字。

libgit2依赖项

如果您使用Windows或macOS,并从CRAN安装gert,它会附带“电池”。Gert引入了外部依赖的预构建版本,如libgit2和支持SSH和TLS(用于HTTPS)所需的第三方库。此方法确保gert使用为您的操作系统正确配置的库。

git2r包采用另一种方法,将libgit2源代码绑定到R包中,并在编译R包时自动构建libgit2。这主要是由于历史原因,因为直到最近,libgit2并不是在每个Linux系统上都可用。

然而,问题是配置和构建libgit2很复杂(与大多数系统库一样),并且需要几个特定于平台的标志和系统依赖性。因此,根据编译期间检测到的内容,git2r有时会安装缺少的功能。例如,在macOS上,一些git2r用户具有SSH支持,但其他用户没有。由于缺少libgit2特性而导致的奇怪问题变得非常顽固,并引起了很多挫折。因此,gert不绑定和编译libgit2源代码,而是始终链接到系统库。

我们为Windows、MacOS和Linux-x86_64提供了预构建版本的libgit2,安装时会自动下载。或者,在某些平台上,您可以根据libgit2的系统版本构建gert,例如: