One IT Thing

IT業界を楽しむ為の学習系雑記

GitLab

GitLabのリポジトリを複製して引っ越しする

投稿日: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に作る

(コンソールはCmderを使ってます)
このケースのミラーリポジトリは一時的なものなので名前はなんでも構いません。

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

執筆者:

関連記事

GitLab12.2.1をCentOS7.6にインストール

会社のコンプライアンス的にgithubが使えない個人開発しているプログラムを完全にプライベートで管理したい GitLabを家庭や社内でオンプレで使えばこれらのニーズを満たすことが出来ます。 留意点とし …

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

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

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

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

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

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

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

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


shingo nakanishi。東京で消耗中の職歴20年越え中年ITエンジニアです。「生涯現役プログラマを楽しむ」ことができる働き方探しをライフワークにしています。

19歳(1996年)から書き始めた個人日記が5,000日を超え、残りの人生は発信をして行きたいと思い、令和元日からこのサイトを開始しました。勉強と試行錯誤をしながら、自分が経験したIT関連情報を投稿しています。