git abstraction