2014-05-02 65 views
1

我有一个名为/renders的本地文件夹/目录/ repo。当我ls -a这我得到git提取所有文件版本/修订版

➜ 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 

回答

3

你可以得到git log来显示你实际上改变一个特定文件的提交,你可以使用它的“漂亮”输出格式来吐出命令来做你喜欢的任何事情。所以,带着几分壳可变改写(munging)的加入,

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

以上数字与他们的修改时间,而不是一个序列号的文件,如果这是太多为您的客户,那么你可以得到外壳它们序列化为你提供

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 
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是二进制文件的安全。