今まで色々と検証して本記事を作成しましたが、@ooocamel さんのコメントの通り次のように--mirror
オプションを使用することで、これらの手順はより短い手順で実施できるようです。
# git clone --mirror taro@tarosserver.example.com:/path/to/PrivateProject.git
# git remote set-url --push origin git@github.com:Taro/PublicProject.git
# git push --mirror
これより下の記事については--mirror
オプションを使用しない手順になりますが、参考程度にご覧になるようお願いします。
自分の作業環境にあるgit リポジトリをGitHub のリポジトリへと移行する
自分の作業端末や作業場所内のGit リポジトリからGitHub のリポジトリへ移行する方法について、手順を描いていきたいと思います。
この手順は例えば、プログラム開発初期の頃はまだ他人に見せられないが開発に脂が乗ってきた頃にGitHub の公開リポジトリにプログラムをアップして開発の拠点リポジトリをそちらへ移行するといった方法を取ることができるようになります。
リポジトリ移行のイメージ
リポジトリを移行するイメージは、自分の作業端末内に作成したGit リポジトリもしくは作業場所に設置されているLinux サーバなどからリポジトリをclone し、すべてのbranch 及び履歴をGitHub へpush します。
GitHub へpush したあとは通常のGitHub と何らかわりなく使うことができるようになり、あなたのオープンソースプロジェクトとして運営していくことができるようになります。
移行先GitHub リポジトリ(仮名) | git@github.com:Taro/PublicProject.git |
---|---|
移行元Git リポジトリ | taro@tarosserver.example.com:/path/to/PrivateProject.git |
ローカル環境 | Ubuntu 15.10 |
GitHub に移行先となる空リポジトリの作成
GitHub に空のリポジトリを作成します。
名前は構成概要の通りPublicProject
としておきます。
手順については割愛します。
移行元リポジトリのclone
移行元となるリポジトリをclone します。
# git clone taro@tarosserver.example.com:/path/to/PrivateProject.git
すべてのリモートブランチをローカルにチェックアウトする
下記コマンドを実行してorigin のリポジトリ上にあるブランチをすべてローカルにチェックアウトします。
下記コマンドはリモートとしてorigin のみ存在することを想定しています。
既に複数のリモートが登録されている場合、うまく動作しないので注意してください。
# git branch -a | grep -v HEAD | perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | bash
remote の変更
push/fetch 先リポジトリをGitHub のものに変更します。
push/fetch 先を変更するにはgit remote rm
コマンドでリモートを削除してからgit remote add
で新しいリモートを追加します。
# git remote rm origin
# git remote add origin git@github.com:Taro/PublicProject.git
移行元と移行先GitHub リポジトリの両方にpush できる環境を作成したい場合
上記の手順でorigin を削除しましたが、移行元のリポジトリのほうがネットワーク帯域が良いなどの理由でGitHub と今までのリポジトリを両方使いたい場合は、GitHub のリポジトリ側を別名で登録しておくこともできます。
例えば以下はGitHub のリポジトリをgithub
をリモートのpush/fetch 先として追加する例です。
# git remote add github git@github.com:Taro/PublicProject.git
# git remote -v
github git@github.com:Taro/PublicProject.git (fetch)
github git@github.com:Taro/PublicProject.git (push)
origin taro@tarosserver.example.com:/path/to/PrivateProject.git (fetch)
origin taro@tarosserver.example.com:/path/to/PrivateProject.git (push)
このようにすることで、git push origin $branch_name
とすることで、今まで使用していたリポジトリにデータをpush することができるし、git push github $branch_name
とすることでGitHub 上のリポジトリにコミットすることができるようになります。
普段の細かい作業はwork ブランチを作成して自分の作業場にあるリポジトリへcommit/push し、キリの良い所までできたらGitHub 上のリポジトリへcommit/push するといった使い方もできるようになります。
GitHub 上のリポジトリへブランチとタグをpush する
ローカルにあるブランチとタグをすべてGitHub 上へpush します。
コマンドは以下のようになります。
# git push origin --all
# git push origin --tags
以上でGitHub へのリポジトリ移行は完了です。
参考
- gitで子ブランチ全部ひっくるめて別のサーバーに移動する方法(gitレポジトリー移転)
- http://lab.bizreach.co.jp/762/
- Clone all remote branches with Git?
- http://stackoverflow.com/questions/67699/clone-all-remote-branches-with-git