【问题标题】:Is partial checkout supported by JGit 3.7?JGit 3.7 是否支持部分结帐?
【发布时间】:2015-06-12 21:29:55
【问题描述】:

我正在使用 Jgit 3.7 从 Git 存储库导入文件。但我想只导入一组文件夹而不是全部。 我知道 Git 支持这个,但我想知道 Jgit 3.7 也支持这个?如果是这样,有人可以指导我。

【问题讨论】:

  • 到目前为止你尝试过什么?您想模拟的原生 Git 命令是什么?
  • @Rudiger。感谢您的快速回复。我尝试了以下命令从 git 存储库获取文件。 'Git.cloneRepository().setURI(uri).setDirectory(new File(dir)).call()'。此命令下载所有源文件。但我不确定,如何导入特定目录及其子目录和文件?

标签: jgit


【解决方案1】:

按照设计,克隆的 git 存储库始终包含原始存储库的所有文件和文件夹。

使用原生 git,你可以创建一个shallow clone (git clone --depth 1 ...) 但这个功能是not yet implemented in JGit

与其一般设计相矛盾的是,本机 git(自 1.7 版起)允许您使用 sparse checkouts 创建部分克隆,但这在 JGit 中也无法开箱即用。

不过,您可以在 JGit 中执行的操作 - 一旦您克隆了一个存储库 - 就是 checkout 仅是分支或提交的一些文件。

git.checkout().setStartPoint( "some-branch" ).addPath( "path/to/file" ).call()

【讨论】:

  • 感谢您澄清 Jgit 尚未实现稀疏结帐的解决方案。我能做的更好的是,克隆整个存储库并删除不需要的目录及其文件。
  • 添加特定路径到签出提交历史是分离的,所以你不能把它推回原来的分支,如果你创建一个新的命名分支。仅包含少数指定文件的新分支无法合并回主分支,因为它们具有不同的提交历史
【解决方案2】:

基于@rüdiger-herrmann 的回答:

String url = "https://github.com/renaud/solr_noLenghNormSimilarity";
String hash = "802558f58add3a1f5b33f04254194bd7cd59b27f";
String subPath = "src/org";
String dest = "myclone";

File localPath = new File(dest);

Git gitRepo = Git.cloneRepository().setURI(url).setDirectory(localPath).setNoCheckout(true).call();
gitRepo.checkout().setStartPoint(hash).addPath(subPath).call();
gitRepo.getRepository().close();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-28
    • 2023-03-12
    • 2018-12-16
    • 2016-11-03
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多