将整个提交复制到单独的目录中

时间:2018-05-09 14:04:05

标签: bash git

我正在尝试为我的实验室代码库编写一些端到端测试。我最初的想法是遍历master上的每个提交(即程序的每个版本)

for commit in $(git rev-list master | head)
do
  rm -rf build
  git checkout -b "${commit}" ${commit}
  #do tests, etc.
done

但是当我开始在不同分支之间移动文件时,这种方法变得相当混乱。我的新想法是将每个单独版本(commit)的内容复制到一个单独的目录中,这样目录结构就像

all_versions/                                                                                         │
├── commit_0                                                                                          │
├── commit_1                                                                                          │
└── commit_2

是否有git命令可以将整个提交的内容干净地复制到目录中?

1 个答案:

答案 0 :(得分:2)

Git不提供生成目录的导出命令,但它提供git archive输出tar存档。它的输出可以通过管道传输到tar -x,以恢复文件和目录结构。

假设您已经将输出目录(在您的示例中为commit_0commit_1等)计算到变量dir中,则命令为:

git archive $commit --prefix="$dir/" | tar x -C all_versions
相关问题