GitLab

GitLab内のリポジトリをmirrorして引っ越しする

投稿日:2019年6月3日

はじめに

元々あるリポジトリのソース、コミット履歴、ブランチ、タグ情報を引き継いで新規にリポジトリを立ち上げます。

「ずっとハイブリッドアプリとして開発してきたけどPWA化するのでcordova関連のファイルは削除する。プロジェクト構成が大幅に変わるし、既存のハイブリッドアプリも暫く保守しなきゃいけないのでリポジトリを分けたい。でもコミット履歴やブランチは引き継ぎたい。」

こんなケースを想定しています。以下、旧awsome-appリポジトリを元に、新wonderful-appリポジトリを立ち上げる想定の内容です。

①以外は全て開発用PCで行います。

環境

  • GitLab 11.5.4-ee(CentOS7.3)
  • 開発用PC(Windows10)

引っ越し開始

①GitLabで引っ越し先リポジトリを作っておく

「New Project」で新リポジトリを作り、「http://gitlabのURL/グループ/新リポジトリ.git」でアクセス出来るようにしておきます。

②旧リポジトリのミラーリポジトリを開発用PCに作る

このケースのミラーリポジトリは一時的なものなので名前はなんでも構いません。

git clone –mirror http://gitlabのURL/グループ/旧リポジトリ.git tmp

C:\src
$ git clone --mirror http://gitlabのURL/グループ/awesome-app.git tmp
Cloning into bare repository 'tmp'...
remote: Enumerating objects: 104, done.
remote: Counting objects: 100% (104/104), done.
remote: Compressing objects: 100% (48/48), done.
Receiving objects:  78% (82/104)   d 79 (delta 41)
Receiving objects: 100% (104/104), 90.28 KiB | 0 bytes/s, done.
Resolving deltas: 100% (58/58), done.

③ミラーリポジトリに入って内容物を確認

cd tmp

C:\src
$ cd tmp

.gitの内容物が作られています。ソースは有りませんがawesome-appのブランチ、タグ、コミット履歴は全て含まれている状態です。

C:\src\tmp
$ dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 58F9-9911 です

C:\src\tmp のディレクトリ

2019/05/28  19:26    <DIR>          .
2019/05/28  19:26    <DIR>          ..
2019/05/28  19:26               221 config
2019/05/28  19:25                73 description
2019/05/28  19:25                23 HEAD
2019/05/28  19:25    <DIR>          hooks
2019/05/28  19:25    <DIR>          info
2019/05/28  19:25    <DIR>          objects
2019/05/28  19:25             1,304 packed-refs
2019/05/28  19:25    <DIR>          refs
               4 個のファイル               1,621 バイト
               6 個のディレクトリ   8,160,526,336 バイトの空き領域

④remote originのURLを新リポジトリに向ける

ミラー内容のpush先を新リポジトリに向けます。

git remote set-url origin http://gitlabのURL/グループ/新リポジトリ.git

C:\src\tmp
$ git remote set-url origin http://gitlab1のURL/グループ/wonderful-app.git

⑤新リポジトリにミラー内容をpush

gitの構成情報を新リポジトリにpushします。これだけで新規リポジトリには、.git以外のソースや他資源もpushされます。

git push –mirror origin

C:\src\tmp
$ git push --mirror origin
Counting objects: 104, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (31/31), done.
Writing objects: 100% (104/104), 90.28 KiB | 0 bytes/s, done.
Total 104 (delta 58), reused 104 (delta 58)
remote: Resolving deltas: 100% (58/58), done.
To http://gitlabのURL/グループ/wonderful-app.git
 * [new branch]      1-angular-ionic -> 1-angular-ionic
 * [new branch]      2-cameramodel-cameraoptions-correctorientation -> 2-cameramodel-cameraoptions-correctorientation
 * [new branch]      3-typedoc -> 3-typedoc
 * [new branch]      4-fileremovemodel -> 4-fileremovemodel
 * [new branch]      6-confirmdialogmodel -> 6-confirmdialogmodel
 * [new branch]      7-confirmdialogmodel -> 7-confirmdialogmodel
 * [new branch]      8-confirmdialogmodel -> 8-confirmdialogmodel
 * [new branch]      9-enablebackdropdismiss -> 9-enablebackdropdismiss
 * [new branch]      master -> master
 * [new branch]      refs/merge-requests/1/head -> refs/merge-requests/1/head
 * [new branch]      refs/merge-requests/2/head -> refs/merge-requests/2/head
 * [new branch]      refs/merge-requests/3/head -> refs/merge-requests/3/head
 * [new branch]      refs/merge-requests/4/head -> refs/merge-requests/4/head
 * [new branch]      refs/merge-requests/5/head -> refs/merge-requests/5/head
 * [new branch]      refs/merge-requests/6/head -> refs/merge-requests/6/head
 * [new branch]      refs/merge-requests/7/head -> refs/merge-requests/7/head
 * [new branch]      refs/merge-requests/8/head -> refs/merge-requests/8/head
 * [new branch]      refs/merge-requests/9/head -> refs/merge-requests/9/head

(*)この時、pushするPOSTデータサイズが大きいと以下のエラーが発生するかも知れません。

$ git push --mirror origin
Counting objects: 5479, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (1505/1505), done.
Writing objects: 100% (5479/5479), 18.26 MiB | 0 bytes/s, done.
Total 5479 (delta 3739), reused 5479 (delta 3739)
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
error: RPC failed; HTTP 501 curl 22 The requested URL returned error: 501 Not Implemented
Everything up-to-date

その場合はホームディレクトリ/.gitconfigファイルに以下のように追加して再度pushし直してください。

[http]
	postBuffer = 500M

⑥新リポジトリからcloneしてくる

cloneしたいディレクトリに移動して新リポジトリをcloneします。

git clone http://gitlabのURL/グループ/新リポジトリ.git

C:\src\tmp
cd ..

C:\src
$ git clone http://gitlabのURL/グループ/wonderful-app.git
Cloning into 'wonderful-app'...
remote: Enumerating objects: 104, done.
remote: Counting objects: 100% (104/104), done.
remote: Compressing objects: 100% (31/31), done.
Receiving objects:  73% (76/104)   d 104 (delta 58)Receiving objects:  69% (72/104)
Receiving objects: 100% (104/104), 90.28 KiB | 0 bytes/s, done.
Resolving deltas: 100% (58/58), done.

まとめ

ミラーリポジトリは元リポジトリの変更を任意で反映、追従してバックアップやCIに使うのが主な用途です。

変更を反映、追従しない。と割り切れば成果物、git履歴要素を引き継いだ新リポジトリへの引っ越し手段としても使えます。

リポジトリを引っ越しする時は履歴ごと引っ越ししないと、「この変更いつ入ったっけ?」とか「このコード入れたの誰?」とblameしたりすることが出来なくなってしまい、後で後悔するかも知れません。

–mirrorで引っ越せばそういったことも無くなります。

-GitLab

執筆者:

関連記事

社内プライベートMattermostを立ち上げてChatOpsする

社内開発チーム内のコミュニケーション、上手く行っていますか?メンバーが世界各地に散らばってないなくても、近くの席に座っていても、心は意外と離れているかも知れません。 以下でプライベートなGitLab1 …

Omnibus版のGitLab、Mattermostデータベースに外部ホストからJDBCで接続

Omnibusで入れたPostgreSQLは、 Unix Domainソケットで接続待機Peer認証で認証 していて外部からの接続は出来ないことが前回分かりました。One IT Thing  …

GitLab Omunibus版のPostgreSQLに普通のpsqlコマンドで接続

GitLab Omunibus版でインストールされるビルトインPostgreSQLは、 TCP:5432ではなくホスト内でしか接続出来ないUnix Domain Socketで待機ローカルホストからO …

GitLab12.1からMySQLを捨ててPostgreSQLに一本化するらしい

オンプレSCMの旗手、GitLabから掲題のニュースが有りました。 2017年から公式発表があったことですが、GitLab 12.1からMySQLのサポートを止めるとのことです。 GitLab&nbs …

GitLabのIPを変更したらMattermostにログイン出来なくなった話「the redirect uri included is not valid. 」

目次1 発端2 環境3 GitLabのIP変更設定を開始4 そしてハマる5 解決6 結局どこに設定が保存されていたか7 まとめ 発端 先日オフィスの引っ越しが有りネットワークセグメントが変わる為、Gi …

 

shingo.nakanishi
 

東京在勤、1977年生まれ、IT職歴2n年、生涯技術者として楽しく生きることを目指しています。デスマに負けず健康第一。