2014-05-02 63 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是二進制文件的安全。