git提取所有文件版本/修订版

时间:2014-05-02 22:33:17

标签: git command-line terminal

我有一个名为/renders的本地文件夹/目录/ repo。当我ls -a时,我得到了

➜  renders git:(master) ls -a

.git
corner_desk.jpg
multi-person_desk.jpg

两个图像文件中的每一个都提交了许多修订版。需要将两个图像文件的所有版本/修订版发送给未经使用且不使用Git的人进行审阅。因此他们无法浏览提交历史记录。从Git repo文件夹创建一个新文件夹的最有效方法是什么,可以发送给他们(通过电子邮件发送,Dropboxed,whatevs)?当这个新生成的文件夹为ls -a时,它应返回类似

的内容
➜  renders ls -a

corner_desk_01.jpg
corner_desk_02.jpg
corner_desk_03.jpg
corner_desk_04.jpg
corner_desk_05.jpg
multi-person_desk_01.jpg
multi-person_desk_02.jpg
multi-person_desk_03.jpg

2 个答案:

答案 0 :(得分:3)

您可以git log向您显示实际更改特定文件的提交,并且您可以使用其"漂亮"输出格式以吐出命令以执行任何您喜欢的操作。所以添加了一些shell变量munging,

git ls-files render | while read f; do 
    git log --pretty="git show %H:$f >${f%.*}_%at.${f##*.}" -- $f
done | less # sh -x

以上编号的文件带有修改时间戳而不是序列号,如果这对您的客户来说太多了,那么您可以让shell为您序列化

git ls-files render | while read f; do 
    git log --reverse \
            --pretty="git show %H:$f >${f%.*}_\$((1000+++x)).${f##*.}" -- $f
done | less # sh -x

答案 1 :(得分:2)

您基本上可以提取包含特定图像的所有提交ID,然后使用git show一次提取一个。

在下面的示例脚本中,我假设您有一个线性提交历史记录,因此git log将显示每次提交。请注意,您必须为您的目的进行修改,但这应该为您提供一般性的想法。

#!/bin/bash

i=1
for c in `git log | grep commit | awk '{print $2}' ` ;
do
name=`printf "%2d" $i | tr -d ' '`
i=$(($i+1))
echo $name
git show $c:Foo > "/tmp/Foo$name"
done;

question告诉我们git show对二进制文件是安全的。