我的文件布局是这样的
~/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
应该在其push
和pull
中包含最新版本,但是{{ 1}}应该不保存以前的版本。换句话说,我希望git
在除二进制文件之外的所有内容上执行其操作,但对于二进制文件git
应该假装它是git
。
从上面的布局可以看出,rsync
实际上是我的数据存储。每篇文章都有自己的,名称相同的文件夹,包含任何相关的二进制文件。这可确保所有相关文件都非常接近。如果我将二进制文件移到此结构之外,那么我不仅需要编写一个单独的部署脚本(可能是同步二进制文件的~/foo/data
),更重要的是,我会破坏数据存储的逻辑结构。 / p>
建议?
答案 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上面的解释。