问题
I will be moving Git repositories from an older SCM server to a new one. My main concern (other than fidelity, of course) is to minimize downtime. Here is my plan:
- On the new machine, clone each repository using
git clone --mirror
- Copy over repo hooks for each repository
- Disallow access to old server (we use gitosis, so remove access for all users except for the new server)
- Move the DNS entry so the DNS alias Git users use
- Perform
git pull
for each repository on the new server. - For each repository on the new server, edit the config file to remove the
remote "origin"
section. - Turn on access to new server
Questions:
- Does this look right? I am specifically concerned with step #6.
- Is there any way to do this that will reduce downtime?
Thanks.
回答1:
I would (if there are no communication possible between old server and new server):
- bundle each repo using git bundle
- copy the bundle on the new server
- create bare repos
git fetch
from those bundles in each of the empty bare repo (no origin to set)- copy hover the hooks
- Disallow access to old server
- make a last git bundle on each repo (incremental bundle, very quick)
- copy those small bundles
git fetch
the increment from the small incremental bundles
</ downtime: no origin to remove>- restore access
If there is communication possible (through SSL) between the new and the old server:
- I would create a special "migration" gitosis user, with all projects access
clone --bare
each projects on the new server- copy hover the hooks
- Disallow access to old server
- make a last
git fetch
on each cloned repo - remove origin </ downtime>
- restore access
来源:https://stackoverflow.com/questions/3601242/how-to-move-git-repositories-and-minimize-downtime