I prefer just pretending the APIs are the same. Write abstractions that only support the common features, unless there's some really really big performance boost from using them, with a few conditionals littered around.<p>The whole situation is a great example of why I don't like pseudo standards and optional features, they create a need for tons of different code paths if you actually want to use all the different features. The open source world is full of fragmentation, since everyone loves modular open standards with tons of different implementations with different subsets of features.<p>In a perfect world, GitHub and GitLab and Git itself could get together and work on some common API standards for this stuff.