首页 > 解决方案 > 将每个 git commit 转换为单独的文件夹

问题描述

我有一个项目,我分几个独立的步骤完成了,每个步骤都相互依赖。

我的提交历史如下所示:

p1 -> p2 -> ... -> pn

每个部分都可以单独运行,我想将项目的每个步骤导出为一个独立的单元。例如:

project/
  p1/
  p2/
  ...
  pn/

每个目录p在提交时包含分支中的所有文件和文件夹(存在p1并保持不变的文件pn应该冗余地包含在每个目录中)。如何将每个单独的提交转换到自己的文件夹中?

标签: git

解决方案


使用脚本,您可以获得所有提交哈希,并且对于每个提交,克隆存储库并签出到所需的提交:

#/bin/bash

commits=$(git log --pretty=format:"%h")
dest=/path/to/the/destination/folder
repo=git@github.com:username/repository.git

for commit in $commits; do
    echo $commit
    git clone -q $repo $dest/$commit
    cd $dest/$commit
    git checkout -q $commit
done

在您的存储库文件夹中运行此脚本。


推荐阅读