他のGitサーバからリポジトリをインポートする方法
本記事では、Gitリポジトリを他のサーバにインポートする方法を解説します。
Windowsの場合、コマンドラインの操作はサーバ側・クライアント側共に全てGit Bashで行います。
既存のリポジトリからベアリポジトリを作成する
まず、既存のリポジトリからベアリポジトリを作成(クローン)します。
ローカルにあるリポジトリからベアリポジトリを作成する
この場合、リモートにプッシュしていないコミットもクローンに含まれます。
git clone --bare <リポジトリ名> <新しいリポジトリ名>.git
# 例
git clone --bare localrepo localrepo.git
<新しいリポジトリ名>.gitを省略した場合は<リポジトリ名>.gitとなります。
外部リポジトリからベアリポジトリを作成する
- Local プロトコルから作成
git clone --bare //repos/<リポジトリ名> <新しいリポジトリ名>.git # 例 git clone --bare //repos/repo.git repo.git
- HTTP プロトコルから作成
git clone --bare <リモートURL> <新しいリポジトリ名>.git # 例 git clone --bare http://git-server/repo.git repo.git
<新しいリポジトリ名>.gitを省略した場合は<リポジトリ名>がそのまま使われます。
作成したベアリポジトリをインポートする
直接サーバのディレクトリに配置する場合
- クローンしたベアリポジトリをGitサーバにコピーする
- コピーしたディレクトリ内で次のコマンドを実行する
git config http.receivepack true
ローカルからクローンしたリポジトリをプッシュする場合
- Gitサーバに新しいリポジトリ(ベアリポジトリ)を作成する
(ここではnew-repository.gitとする)
Local プロトコルの場合はクライアントから次のようなコマンドで作成できる$ mkdir new-repository.git $ cd new-repository.git $ git init --bare --shared
$ mkdir //repos/new-repository.git $ cd //repos/new-repository.git $ git init --bare --shared
- クローンしたベアリポジトリのディレクトリから、次のコマンドを実行する
- Local プロトコル
git push --mirror //repos/new-repository.git
- HTTP プロトコル
git push --mirror <リモートURL> # 例 git push --mirror http://git-server:8022/new-repository.git
ここで403エラーが発生した場合は、Gitサーバ上のディレクトリで次のコマンドを実行するとうまくいきました。
git config http.receivepack true
- Local プロトコル
- 最後にローカルに作成していたベアリポジトリを削除する
rm -rf <新しいリポジトリ名>.git