我正在尝试为我的实验室代码库编写一些端到端测试。我最初的想法是遍历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
命令可以将整个提交的内容干净地复制到目录中?
答案 0 :(得分:2)
Git不提供生成目录的导出命令,但它提供git archive
输出tar
存档。它的输出可以通过管道传输到tar -x
,以恢复文件和目录结构。
假设您已经将输出目录(在您的示例中为commit_0
,commit_1
等)计算到变量dir
中,则命令为:
git archive $commit --prefix="$dir/" | tar x -C all_versions