So I've been reading lately about how to setup a git server, and upon finding that there is no specific daemon needed at all (just an SSH server with a filesystem behind it), I started to look more on how git manages files under the hood.
The strategy of how each commit is represented inside the .objects folder and how everything fits together is quite clever, but it doesn't seem to be mentioned explicitly that this approach actually makes git achieve concurrency in a very simple way without the need of a signaling server.
Nonetheless, there are situations in which concurrency cannot be guaranteed, which is basically when history is re-written (forced pushes). In this case, is there any locking strategy used in the tree to avoid concurrency issues? Is there any more documentation on this topic out there?
(Something is said about this topic in this SO answer, but just very briefly.)