My file layout is like so
~/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
Of course, I want git to track the changes to all the text files (the programs, CSS, html templates, and the articles with extension .txt). With regards to the binary files, I want git to track only their latest version. So, if I change movie.mp4, git should include the latest version in its push and pull, but git should not save the previous version. In other words, I want git to do its thing on everything except the binary files, but for binary files git should pretend like it is rsync.
Logic
As is evident from the layout above, ~/foo/data is really my data store. Every article has its own, identically named folder with any relevant binary files. This ensures all related files are in close proximity. If I move the binary files outside this structure then not only do I have to concoct a separate deployment script (perhaps an rsync that synchronizes the binary files), more importantly, I destroy the logical structure of my data store.
Suggestions?
git. However, I have added more info to the question above under the section titled Logic to explain why I want this, which might help figure an efficient and effective solution.