从Git存储库导出单个文件的每个修订版本?

时间:2013-07-11 15:17:01

标签: git shell repository export revision

我的项目中有一个版本文档.ai,现在我想导出Git存储库为该文件保存的每个“快照”

任何批次/半自动解决方案?

我有很多提交,没有太多意图逐个导出它们。

2 个答案:

答案 0 :(得分:10)

要将文件的所有修订版导出到给定文件夹,可以在Bash中使用此循环:

for sha in `git rev-list HEAD -- path/to/file`; do
    git show ${sha}:path/to/file > path/to/exportfolder/${sha}_doc.ai
done

当然,你可以自定义它。

将代码段复制到文本文件中,并将path/to/file替换为要导出的文件的实际路径(在repo内)。将path/to/exportfolder替换为要将文件导出到的实际路径(导出文件夹必须存在)。您也可以修改导出的文件名,在此版本中它使用格式“_doc.ai”;如果你想使用带空格的文件或路径名,请确保使用引号。

此版本将从当前签出的修订版本(HEAD)开始,并将历史记录转到可从祖先树中的HEAD到达的所有修订版本。这意味着您应该查看要开始导出的最新修订版。

答案 1 :(得分:4)

很快,但是因为没有其他人想出来的东西:

mkdir snapshots
FILE=YourFile.ai
i=1
for COMMIT in $(git log --oneline $FILE | cut -f 1 -d " "); do 
  git checkout $COMMIT $FILE; 
  cp $FILE snapshots/$i-$COMMIT.ai; 
  (( i = i + 1 ))
done

然后您的目录snapshots包含该文件的所有版本。这些名称由一个数字 1..n 组成,它随着每个版本的年龄和相应的提交以及文件扩展名.ai而增加。

P.S。:不要忘记在此之后更新FILEgit checkout HEAD $FILE)并且不要将文件夹快照添加到repository。 :)