I am a newbie to git and trying to understand the principles. As I understand in Git every file is stored completely as per Git Book and also as per this post. However, git book also indicates the git gc which compresses binary files and computes the diff for text files and this statement seems to contradict the first point that git stores complete files.
1) Can some one explain which one is correct? If git gc does compute partial diffs, and if it happens to run after a long time, is this going to make sure all the diffs are created from the base versions to all branches? Does this mean a lot of compute time if git gc is not run on regular basis?
2) Considering the projects like Android where there are huge number of source and resource files, it seems to indicate that git is going to blow up in size with every commit. When the developers pull Android source, isnt it going to take a lot of space if it pulls the entire history for all source and binary files? Am I missing something here? How is this sustainable in longterm?