我应该使用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,例如: