We store them as serialized text. We could store them as nodes in an AST; we could store them as OLE/CFBF structures like older versions of Microsoft Word, or do what Ted Nelson suggested decades ago: T. H. Nelson, “Complex information processing: a file structure for the complex, the changing and the indeterminate,” in Proceedings of the 1965 20th national conference, New York, NY, USA, Aug. 1965, pp. 84–100. doi: 10.1145/800197.806036.
In the context of this thread, where we are discussing Git as a medium for storing the form of the programs in a format that is meant to be read and maintained by humans, we do store the programs in text.
No, in the context of this thread we are storing programs as punch cards, which are not meant to be read or maintained by humans. They are the executable form of the software, that's all.
We still do that, storing executable programs as executable binary rather than text. What else could you do?