I wonder what is the best practice for protocol buffer regarding source repository (e.g. git) :
Do I have to put ONLY the .proto file in the repository and let anyone else who uses the source code to regenerate classes code with protoc compiler ? or is it a best pratice to put both .proto files AND source code generated by protoc compiler ?
You should never check in generated code if you can avoid it.
If you check in generated code, you take on multiple risks, such as:
.protofile but forget to update the generated code. Their changes won't actually "take effect" until someone else later on regenerates the generated code for some other reason -- and then all of the sudden they see side effects they weren't expecting.If for some reason you absolutely have to check in generated code, I highly recommend creating an automated test that checks if the checked-in code matches what
protocwould generate if run fresh. (For example, the protobuf repository itself contains checked-in copies of generated code fordescriptor.protobecause this code is needed to compileprotoc, creating a circular dependency. But there is a unit test that checks that the checked-in code matches whatprotocwould generate.)