簡體   English   中英

git解壓縮所有文件版本/修訂版

[英]git extract all file versions/revisions

我有一個名為/renders的本地文件夾/目錄/存儲庫。 當我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

您可以獲取git log來向您顯示實際上已更改特定文件的提交,並且可以使用其“漂亮”輸出格式來吐出命令以執行所需的任何操作。 因此,添加了一些外殼變量調整,

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

您基本上可以提取出包含特定圖像的所有提交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;

這個問題告訴我們git show對於二進制文件是安全的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM