我正在分析修订历史,使用git-archive获取特定修订版的文件(请参阅https://stackoverflow.com/a/40811494/1168342)。
这种方法是可行的,但我正在尝试对有许多修订的项目进行优化。许多处理都浪费了归档(通过tar)和返回到另一个目录中的文件(再次通过tar )。
我正在寻找一种在不涉及tar的情况下这样做的方法,比如git cp $revision $dest/。下面是我到目前为止探索的内容:
git reset $revision --hard方法,但它会将分析的并行化呈现为无效,除非我创建多个repo副本(每个线程/进程一个副本)。发布于 2017-10-25 22:08:15
使用:
mkdir <path> &&
GIT_INDEX_FILE=<path>/.git git --work-tree=<path> checkout <revision> -- . &&
rm <path>/.gitgit checkout步骤将覆盖索引,因此为了使此并行化良好,我们只需将索引文件指向目标。有一个非常安全的文件名:.git!
(这就像一个更轻量级的git worktree add版本,它也避免将新提取的树记录为活动工作树。)
编辑以添加一个附带说明(我希望OP知道这一点,但供以后参考):注意,git archive应用了某些.gitattributes过滤器,而这种技术并不适用。特别是,git checkout将不服从export-ignore和export-subst指令。
发布于 2017-10-26 05:18:52
在JGit中,ArchiveCommand实现了git archive的功能,并提供了几种文件格式。但是,ArchiveCommand可以使用自定义归档格式进行扩展。
自定义格式需要实现Format接口并将其注册到ArchiveCommand::registerFormat。尽管在设计相应的API时似乎只考虑了一个输出文件,但是应该可以将内容输出到目录中。
https://stackoverflow.com/questions/46942411
复制相似问题