获取Git库仓的引用有很多种方法,索引是一个有序的路径列表

  • 栏目:基础 时间:2020-05-03 18:32
<返回列表

Git Extensions 3.2 发布了。Git Extensions 是一个 Git 的图形化客户端,用来控制 Git 库,支持 Windows 资源管理器集成和 Visual Studio 集成。

一个Git库仓在 JGit里面表现为Repository类,该类可以看作是这个库的句柄。通过Repository类实例,你可以创建JGit命令以及可以控制配置、参数等。

Visual Studio Team Services(VSTS)举办了世界上最大的Git仓库:Windows源代码。保持代码可用的主副本的云,让它可以永久而被更新的超过4000用户,同时是一个巨大的成就,但它是唯一有用的如果工程师可以使用git客户端机器上的核心。我们可能通过建立2。

此版本更新内容较多,列举部分如下:

获取Git库仓的引用有很多种方法,看到很多人在这方面有困难,本文总结了如何通过JGit来访问Git库仓来帮助大家。

Windows存储库比其他任何Git存储库都要大得多,它暴露了核心Git中的一些性能问题,我们需要修复它以使其与我们在微软中看到的大型存储库一起工作。由于Git是开源的,所以我们在所有平台上为所有用户改进Git,并将这些修改反馈给用户。

Features:

存储库和建造者

Repository类是抽象的,允许实现不同的存储后端。 举例来说,有一个InMemoryRepository类作为测试和实验。当然,最常用的是FileRepository,它表示的是一个本地文件系统。因为实际的实现被考虑为内置的,每一个Repository的实现都有一个相应的存储库建造者,他们应该被用于在内部创建实例。

因此FileRepositoryBuilder是一种被推荐的方式,用这种方式创建了一个FileRepository。由于历史原因,另外还有一个RepositoryBuilder,它是完全一样的,但是在下一个大版本升级之后将会被移除。

为了你的需要,一旦你已经配置了一个存储库构建器,调用它的build()方法来创建一个存储库。

FileRepositoryBuilder repositoryBuilder = new FileRepositoryBuilder();
韦德体育 ,repositoryBuilder.setMustExist( true );
repositoryBuilder.setGitDir( ... );
Repository repository = repositoryBuilder.build();

布局的原因,我在每行放置了一个方法调用,但是FileRepositoryBuilder还是一个流接口的实现,所以这个方法调用能够被链接。

这里讨论的所有方法只能应用于本地存储库。Git是一个分布式的版本控制系统,因此不是为了直接操作远程库设计。

为了操作远程库,首先你不得不克隆它。现在你可以在本地副本做些修改,例如提交新的或修改的文件,创建分支或标签等等。为了向远程库同步你的变更,你首先不得不从远程库集成(即获取)变更(如果有的话),然后最终推送你本地的变更。

微软(心脏)

Fixes:

更多详情可查看更新说明及下载地址

(文/开源中国)    

推荐 setGitDir()

在JGit中,一个基于文件的存储库是通过一个目录被识别的。然而,识别一个存储库的两个目录在合适条件下可能出现:当前检出的版本属于工作目录并且git目录保存着对象数据库和元数据(如分支,标签等等)。

尽管FileRepositoryBuilder有setGitDir()方法和setWorkTree()方法,我推荐始终使用setGitDir()方法,因为:

回顾我们在2017所建立的,以及我们已经走了多远,我想分享一些我最喜欢的补丁的细节,我们在过去的一年中与Git社区合作过。

这是一个存储库吗?

FileRepositoryBuilder的build()方法不论一个存储库是否存在都会返回一个Repository。即使所给的目录不存在,一个实例也被返回了。

我发现有两种方式测试是否所给的目录真实的指向一个存在的存储库。通过调研setMustExist(true)方法,FileRepositoryBuilder 能被配置,只用来构建存在的存储库。一旦must-exist标记被打开,如果没有找到存储库,build()方法将抛出一个RepositoryNotFoundException 异常。值得一提的是,这种行为没有正式文档说明。这可能是JavaDoc中的一个失误,我怀疑这种行为会改变,但仍不能保证是否是API的一部分。

或者,你可以测试返回的存储库的对象数据库是否真实的存在。

Repository repository = repositoryBuilder.build();
if( repository.getObjectDatabase().exists() ) {
  ...
}

顾名思义, 如果有一个对象数据库,ObjectDatabase.exists()返回true,否则返回false。

该指数

小技巧:findGitDir()

仓库生成器提供了一个findGitDir()方法用于从指定的路径开始搜索仓库并且回退到上级目录。

FileRepositoryBuilder repositoryBuilder = new FileRepositoryBuilder();
repositoryBuilder.addCeilingDirectory( new F‌ile( "/home/user" ) );
repositoryBuilder.findGitDir( new F‌ile( "/home/user/git/foo/bar" ) );

如果仓库路径被找到或者已到达根目录则搜索结束。getGitDir()可以用于获取搜索结果和返回找到的git路径,如果没找到则返回null。

通过添加一个或多个目录可以限制搜索。只要目录的其中一个被搜索到,则搜索结束。

Git索引是当前文件和当前分区域中预期对象哈希的所有文件的列表。许多Git操作在执行请求的操作之前将这个索引加载到内存中。我们发现了几种加速索引交互的方法。

另一种选择:Git.open()

如果你觉得FileRepositoryBuilder不方便使用,可以用等效的简写形式:Git.open()。

Git git = Git.open( new F‌ile( "/path/to/repo/.git" ) );

这个方法要求一个位于仓库中的表示路径的文件作为参数。路径可以是工作路径或者git路径。我建议在这里使用git路径。

如果给定的路径不存在或者不包含git仓库,将会抛出RepositoryNotFoundException异常。成功会返回Git类的实例,然后可以用它访问仓库(git.getRepository())和创建git命令。

索引是一个有序的路径列表。在每个索引负载上,Git检查以确保列表仍然处于有序状态。跳过这个检查,我们可以将索引负载加快18%。重建索引时,路径是按照正确的顺序编写的。Git检查插入的重复,但是任何重复都会连续出现。通过在执行二进制搜索之前检查最后一个条目,我们加快了索引写入速度达20%。我们还减少了Git丢弃和重新加载索引的频率。

JGit访问Git仓库的多种方式

Git.open()函数很简短,而FileRepositoryBuilder给了你更多的控制和可靠的方式来判断仓库是否存在。你喜欢前者还是后者完全取决于你的使用情况。记住,不要直接使用FileRepositoryBuilder构造函数或者在没有提前通知的情况下改变其行为。

我希望这篇文章有助于澄清怎样使用JGit访问仓库。如果你有进一步的问题,请在评论中回复。

英文原文:How to Access a Git Repository with JGit

Linux git命令参数及用法详解 http://www.linuxidc.com/Linux/2012-01/51205.htm

Fedora通过Http Proxy下载Git http://www.linuxidc.com/Linux/2009-12/23170.htm

在Ubuntu Server上安装Git http://www.linuxidc.com/Linux/2009-06/20421.htm

服务器端Git仓库的创建(Ubuntu) http://www.linuxidc.com/Linux/2011-02/32542.htm

Linux下Git简单使用教程(以Android为例) http://www.linuxidc.com/Linux/2010-11/29883.htm

Git权威指南 PDF高清中文版 http://www.linuxidc.com/Linux/2013-10/91053.htm

Git 的详细介绍:请点这里
Git 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-10/107655.htm

韦德体育 1

我们也贡献了微优化,加快了各指标的读或写,包括使用一个HashMap代替一个列表计算合并使用堆栈上而不是堆分配。

状态检测

两个常用的Git命令是状态和校验。状态检查工作目录的状态,以查看与当前头不同的是什么,而校验则更新工作目录以匹配新的头。这些操作经常被调用,但在处理大型存储库时也非常昂贵。

许多工具,如VisualStudio团队资源管理器,使用状态来提交可提交的更改列表。许多项目都大目录填充建立文物由地位由于被忽视gitignore文件。团队资源管理器使用特殊标志来显示这些被忽略的文件,但是这个列表比重要文件要大得多。我们为状态添加了新的标志,使这个调用更快,现在其他工具也可以使用这些选项。当我们查看代码时,我们发现了提高Git状态性能的方法——忽略了50%。

即使这些加速,我们仍然需要走的文件找到的书面文件的当前状态。至少,我们确实需要。我们在Git中添加了一个文件系统监视器插件,它为Git提供了一个外部命令,该命令显示了文件系统更改的快照。当我们专注于提供集成的2,这可以用工具如守夜人的工作,太。

缩写

目前许多Git命令对象的哈希值的缩写形式更容易阅读的人。这些缩写需要足够长,以便唯一地标识存储库中的单个对象。For large repos, calculating abbreviations became a significant portion of the cost of common commands. 旧算法通过迭代以缩写哈希开始的所有对象迭代测试猜测的缩写长度,然后将长度增加一个,直到只剩下一个对象。新算法通过对最近的匹配进行有效的二进制搜索并计算公共前缀长度来找到正确的长度。这一变化加快命令git log -单线图5%的Linux库。

Git存储对象的方式有两种:packfiles和松散的对象。松散的对象作为一个对象存储在每个文件中?目录在哪里?表示对象散列的前两个十六进制数字。当2下载对象的需求,把它作为一个松散的对象。大多数的库没有很多松散的物体在Git自动包装成packfiles,但在GVFS的情况下,回购可以包含数以百万计的松散的对象。在计算缩写时,Git创建一个内存缓存,列出所有这些目录中的所有松散对象。在创建该列表时,通过调用一个通用字符串格式方法来添加字符串来创建字符串列表。这在某些情况下占用了CPU时间的12%。很容易用简单的追加方法替换它,以获得简单的性能获胜。

刚刚开始

这些并不是我们在2017所作的唯一改进。您可以阅读这些早期的帖子了解更多信息:Windows 2.11的Git有什么新功能?

优化Git超越2

微软对Git的大赌注,这使得微软项目的初级版本控制系统,主办单位简介。我们增加了我们的投资,使Git更好地为每个人,并将继续在未来几个月和几年的一些重大改进-感谢每个人在Git社区谁一直非常愿意与我们合作,并帮助我们得到这些补丁审查和贡献回上游。

上一篇:很多用户表现出对 Chrome 下一篇:没有了

更多阅读

获取Git库仓的引用有很多种方法,索引是

基础 2020-05-03
Git Extensions 3.2 发布了。Git Extensions 是一个 Git的图形化客户端,用来控制 Git 库,支持 Windows 资...
查看全文

很多用户表现出对 Chrome

基础 2020-05-03
我们曾报道过 谷歌正在移除 Chrome 的关闭其他选项卡的报道,引起很多用户的讨论,很多用户...
查看全文

在使用符合 C++ 11 的现代版本的,之前代

基础 2020-05-03
D 语言 2.088.0 发布了,此版本共修复了 58 个 bug,并对编译器引入了 27项主要更改。 在Windows下...
查看全文

友情链接: 网站地图

Copyright © 2015-2019 http://www.koi-bumi.com. 韦德体育有限公司 版权所有