Whoa, hold on there. Let's back up some. You're "new to git" so you need some basics! :-)
For your purposes, there are two kinds of repositories:
- A "regular" repo, in which you work. You and everyone else make your own versions of these.
- A "bare" repo, which is used only for you and other people to coordinate work. There is only one of these.
A "bare" repository has no place in which anyone can do any work. That's what makes it "bare"—and what makes it a safe place to "push" to. The problem with pushing to some non-bare repo is this (git actually stops you, with error: refusing to update ...
, but it's what the problem would be if git let you do it):
- Alice is working in her repo. She checks out some branch and edits file
config
.
- Bob is working in his repo. He checks out the same branch and also edits
config
.
- Bob finishes editing
config
first, and pushes his changes to Alice.
- Alice's changes are wiped out, replaced with Bob's changes. Ouch!
By not letting anyone work "in" it, a bare repository sidesteps this problem.
There's still one other problem, which is: how do you get this thing—the bare repo—started in the first place? It has no place to work!
The answer is: you don't start there, you start with your own repo, that nobody else has a copy of. You write some initial version in there. Then you create a new bare repo, on the shared server, by copying the one you had:
sharedserver$ cd /place/where/bare/repos/go
sharedserver$ git clone --bare ssh://cosmins.machine.name/path/to/initial project.git
Now "sharedserver" has the bare repo in /place/where/bare/repos/go/project.git
, and you (and Alice and Bob and so on) can all git clone
that.
(The "shared server" can be something like github, which has a different method of creating the shared repo from your original initial non-shared one. I don't use github and can't really say anything about that.)
(It is possible to convert a regular, non-bare, repo into a bare one, or vice versa, but it's a bit of a pain. Just create the bare one by git clone --bare
.)
Another method of side-stepping the "work gets overwritten" problem is not to use push
at all. If everyone co-operates in a peer to peer sharing system, then Alice can pull
from Bob and Cosmin, and Bob can pull
from Alice and Cosmin, and so on. Note that this results in a very large number of people to pull
from, though, which is why shared-servers come about. You can all just meet there, instead of always having to go to each others' homes.