【问题标题】:git extract all file versions/revisionsgit 提取所有文件版本/修订
【发布时间】:2014-06-19 17:10:05
【问题描述】:

我有一个名为/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

【问题讨论】:

    标签: git command-line terminal


    【解决方案1】:

    您可以让git log 向您显示实际更改特定文件的提交,并且您可以使用其“漂亮”的输出格式来吐出命令来做任何您喜欢的事情。因此,添加了一些 shell-variable 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
    

    【讨论】:

      【解决方案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 对于二进制文件是安全的。

      【讨论】:

        猜你喜欢
        • 2011-11-01
        • 2021-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-27
        • 1970-01-01
        • 1970-01-01
        • 2014-09-26
        相关资源
        最近更新 更多