我正在创建一个使用Git的Java应用程序.我发现有一些叫做JavaGit,EGit和JGit的东西 .
我知道JavaGit和EGit/JGit是不同的.我不明白的是EGit和JGit之间的区别.两者都托管在Eclipse项目上,但其中一个似乎与Eclipse相关,而另一个则不相关.
我不使用Eclipse而且我不打算这样做,所以我真的不太关心"Eclipse集成".
JGit是否以某种方式连接到Eclipse?(它托管在www.eclipse.org上,JGit 的文档里面也有很多"eclipse"关键字)
在这三个中,我需要连接我的Java程序(不是用Eclipse编写)来使用Git存储库?
我更喜欢一个独立的Git库(即,不依赖于本地Git安装)
编辑:还有一个问题:
编辑:我找到了答案 - 它确实(尚未尝试过).它transport在一个叫做的类中BundleWriter
前段时间我一直在寻找一个用Java编写的嵌入式分布式版本控制系统,我想我已经在JGit中找到了它,它是git的纯Java实现.但是,示例代码或教程的方式并不多.
如何使用JGit检索某个文件的HEAD版本(就像svn cat或者应该hg cat这样做)?
我想这涉及到一些转树走路,我正在寻找代码示例.
当将项目作为git共享并尝试将Eclipse项目文件夹作为git存储库时,Eclipse表示不建议这样做并且它应该在Eclipse工作区之外.
这是为什么?
我正试图通过JGit获取HEAD提交:
val builder = new FileRepositoryBuilder()
val repo = builder.setGitDir(new File("/www/test-repo"))
.readEnvironment()
.findGitDir()
.build()
val walk: RevWalk = new RevWalk(repo, 100)
val head: ObjectId = repo.resolve(Constants.HEAD)
val headCommit: RevCommit = walk.parseCommit(head)
Run Code Online (Sandbox Code Playgroud)
我发现它打开repo罚款,但head值设置为null.我想知道为什么它找不到HEAD?
我正在阅读这篇文档:http://wiki.eclipse.org/JGit/User_Guide
存储库的构造就像文档所说的RevWalk那样,以及它.我正在使用最新版本的JGit,它2.0.0.201206130900-r来自http://download.eclipse.org/jgit/maven.
我的问题:我需要在代码中更改什么才能让JGit返回实际的实例RevCommit而不是null现在的实例?
更新:此代码:
val git = new Git(repo)
val logs: Iterable[RevCommit] = git.log().call().asInstanceOf[Iterable[RevCommit]]
Run Code Online (Sandbox Code Playgroud)
给我这个例外: No HEAD exists and no explicit starting revision was specified
异常是奇怪的,因为一个简单的git rev-parse HEAD告诉我 …
我正在使用JGit来检查远程跟踪分支.
Git binrepository = cloneCmd.call()
CheckoutCommand checkoutCmd = binrepository.checkout();
checkoutCmd.setName( "origin/" + branchName);
checkoutCmd.setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.TRACK );
checkoutCmd.setStartPoint( "origin/" + branchName );
Ref ref = checkoutCmd.call();
Run Code Online (Sandbox Code Playgroud)
文件已签出,但HEAD未指向分支.以下是git status输出,
$ git status
# Not currently on any branch.
nothing to commit (working directory clean)
Run Code Online (Sandbox Code Playgroud)
可以在git命令行中轻松执行相同的操作,它可以正常工作,
git checkout -t origin/mybranch
Run Code Online (Sandbox Code Playgroud)
怎么做这个JGit?
在EGit,当我到达时,Team > Switch to > New branch我最终得到下面的对话框.此对话框中列出的各种拉动策略的含义是什么?

git由于二进制测试文件和java .jar文件的历史包含,我们有许多存储库已经增长到难以管理的大小.
我们正准备完成git filter-branch这些存储库的操作,在它们被使用的任何地方重新克隆它们(从每个数十个到数百个部署,取决于回购)并且考虑到重写历史的问题我想知道是否可能存在任何其他解决方案
理想情况下,我想在不重写每个存储库的历史记录的情况下将问题文件外部化.从理论上讲,这应该是可能的,因为你检查相同的文件,具有相同的大小和相同的哈希值,只是从不同的地方(远程而不是本地对象存储)获取它们.到目前为止,我找到的任何潜在解决方案似乎都不允许我这样做.
从git-annex开始,我能找到解决问题的最接近的方法是如何追溯性地附加一个已经存在于git仓库中的文件,但就像删除大文件一样,这需要重新编写历史记录以进行转换原来git add变成了git annex add.
从那里开始,我开始查看git-annex不是列出的其他项目,所以我检查了git-bigfiles,git-media和git-fat.不幸的是我们不能使用git-bigfiles fork,git因为我们是Eclipse 商店并使用git和EGit的混合.它看起来不像git-media或git-fat也可以做我想要的,因为虽然你可以用外部等价物替换现有的大文件,但你仍然需要重写历史记录以删除已经存在的大文件一直致力于.
那么,是否可以在不重写历史记录的情况下缩小.git存储库,或者我们是否应该回到使用计划git filter-branch和整个重新部署的负载?
顺便说一句,相信这应该是可能的,但可能与git当前浅层克隆实现的限制相同.
Git已经为同一个blob支持多个可能的位置,因为任何给定的blob都可以在松散的对象存储(.git/objects)或包文件(.git/objects)中,所以理论上你只需要git-annex在这个级别上挂钩的东西而不是更高(例如,如果你愿意,有一个按需下载远程blob的概念).不幸的是,我找不到任何人已经实施甚至建议这样的事情.
在同一台机器上使用github for Windows,使用相同的凭据可以正常工作.可以拉/克隆.
但是,在同一台计算机上作为Windows服务安装的teamcity会返回以下错误
List remote refs failed: org.eclipse.jgit.errors.TransportException: https://github.com/my-private-repo.git: not authorized
Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个允许用户使用基于Git的存储库的Java应用程序.我可以使用以下命令从命令行执行此操作:
git init
<create some files>
git add .
git commit
git remote add <remote repository name> <remote repository URI>
git push -u <remote repository name> master
Run Code Online (Sandbox Code Playgroud)
这允许我创建,添加和提交内容到我的本地存储库并将内容推送到远程存储库.我现在正试图在我的Java代码中使用JGit做同样的事情.我能够轻松地使用JGit API执行git init,添加和提交.
Repository localRepo = new FileRepository(localPath);
this.git = new Git(localRepo);
localRepo.create();
git.add().addFilePattern(".").call();
git.commit().setMessage("test message").call();
Run Code Online (Sandbox Code Playgroud)
同样,所有这一切都很好.我找不到任何例子或者等效代码git remote add和git push.我确实看过这个问题.
testPush()失败并显示错误消息TransportException: origin not found.在其他例子我见过https://gist.github.com/2487157做git clone 之前 git push,我不明白为什么这是必要的.
任何有关如何做到这一点的指示将不胜感激.
jgit ×10
git ×9
egit ×4
java ×4
eclipse ×3
github ×1
large-files ×1
scala ×1
shallow-copy ×1
teamcity ×1