馃棏 Deprecate Libgit2 in Gitaly
In Gitaly, we use the [libgit2](https://github.com/libgit2/libgit2) implementation of Git through the golang [git2go](https://github.com/libgit2/git2go) library to accomplish in memory merges.
Having a dependency on Libgit2 is problematic however, since in general features in mainline git move faster than on libgit2 (though not *always*). This creates a situation where we are prevented from utilizing new features in Git because libgit2 won't recognize certain newer repository features. https://gitlab.com/gitlab-org/gitaly/-/issues/3314 details some of these.
In the near future, reftables is a feature that we want to take advantage of but won't be able to due to our libgit2 dependency. We are stuck in a place to either add features to libgit2 as well, or just not use newer features. The long term goal is to get rid of the need for libgit2.
In order to get rid of this dependency however, we would need a way to accomplish in memory operations for the following:
- cherry-pick
- commit
- conflicts
- merge
- rebase
- revert
- resolve
- submodule
Once these are all moved over to in memory operations without libgit2, we can drop git2go from the Gitaly project.
epic