使用git跟踪已更改的文件而不保存更改

时间:2013-07-04 14:26:07

标签: git

我的文件布局是这样的

~/foo/
foo.pl
Foo.pm
    ~/foo/data
        ~/foo/data/an_article.txt
        ~/foo/data/an_article/
            ~/foo/data/an_article/image.jpg
            ~/foo/data/an_article/movie.mp4
        ~/foo/data/another_article.txt
        ~/foo/data/another_article/
            ~/foo/data/another_article/audio.mp3
            ~/foo/data/another_article/raster.nc

当然,我希望git跟踪所有文本文件(程序,CSS,html模板和扩展名为 .txt 的文章)的更改。关于二进制文件,我希望git仅跟踪 最新版本。因此,如果我更改 movie.mp4 ,则git 应该在其pushpull中包含最新版本,但是{{ 1}}应该保存以前的版本。换句话说,我希望git在除二进制文件之外的所有内容上执行其操作,但对于二进制文件git应该假装它是git

逻辑

从上面的布局可以看出,rsync实际上是我的数据存储。每篇文章都有自己的,名称相同的文件夹,包含任何相关的二进制文件。这可确保所有相关文件都非常接近。如果我将二进制文件移到此结构之外,那么我不仅需要编写一个单独的部署脚本(可能是同步二进制文件的~/foo/data),更重要的是,我会破坏数据存储的逻辑结构。 / p>

建议?

3 个答案:

答案 0 :(得分:8)

Git不按您想要的方式工作。新提交取决于较旧的提交:在计算新提交的SHA-1时,父提交的SHA-1包含在计算中。这正是使Git 安全的原因:可以检测到对旧提交的任何修改,并且会破坏历史记录。

答案 1 :(得分:1)

将二进制文件作为部署脚本的一部分拉入。

答案 2 :(得分:1)

  

从上面的布局可以看出,〜/ foo / data确实是我的数据   存储。

对于基于git的数据存储,请参阅git annex:http://git-annex.branchable.com/

从git中删除历史记录:没有这样的东西,请参阅Bruno Reis上面的解释。