首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等效于直接到磁盘的git存档,不需要任何tar处理。

等效于直接到磁盘的git存档,不需要任何tar处理。
EN

Stack Overflow用户
提问于 2017-10-25 21:33:57
回答 2查看 352关注 0票数 1

我正在分析修订历史,使用git-archive获取特定修订版的文件(请参阅https://stackoverflow.com/a/40811494/1168342)。

这种方法是可行的,但我正在尝试对有许多修订的项目进行优化。许多处理都浪费了归档(通过tar)和返回到另一个目录中的文件(再次通过tar )。

我正在寻找一种在不涉及tar的情况下这样做的方法,比如git cp $revision $dest/。下面是我到目前为止探索的内容:

  • 我可以使用带有文件副本的git reset $revision --hard方法,但它会将分析的并行化呈现为无效,除非我创建多个repo副本(每个线程/进程一个副本)。
  • 有一个使用JGit称为Doris的Java项目可以通过低级别的操作来实现这一点,但是当有奇怪的文件(例如指向其他repos的链接)时,它就会中断。随着git的发展,有很多特殊情况,所以如果可能的话,我不想在低级别上这样做。
  • 我知道有一个用于Python的git,但是它的档案特征也使用tar。出于与上面相同的原因,我不想在太低的级别上编写这个代码。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-25 22:08:15

使用:

代码语言:javascript
复制
mkdir <path> &&
GIT_INDEX_FILE=<path>/.git git --work-tree=<path> checkout <revision> -- . &&
rm <path>/.git

git checkout步骤将覆盖索引,因此为了使此并行化良好,我们只需将索引文件指向目标。有一个非常安全的文件名:.git

(这就像一个更轻量级的git worktree add版本,它也避免将新提取的树记录为活动工作树。)

编辑以添加一个附带说明(我希望OP知道这一点,但供以后参考):注意,git archive应用了某些.gitattributes过滤器,而这种技术并不适用。特别是,git checkout将不服从export-ignoreexport-subst指令。

票数 3
EN

Stack Overflow用户

发布于 2017-10-26 05:18:52

在JGit中,ArchiveCommand实现了git archive的功能,并提供了几种文件格式。但是,ArchiveCommand可以使用自定义归档格式进行扩展。

自定义格式需要实现Format接口并将其注册到ArchiveCommand::registerFormat。尽管在设计相应的API时似乎只考虑了一个输出文件,但是应该可以将内容输出到目录中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46942411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档