GitLabにコミットしたら自動でGithubへも反映させる方法

## はじめに
自宅内にGitlabをDockerで建てており、個人のソースコードはそこで管理しているのですが、Githubにアップしておいた方がポートフォリオ的な感覚で見てもらいやすいかなと感じ設定をしました。
(念のためのソースコードのバックアップも兼ねてます)

記事をいくつか探していたのですが、GitlabやGithubの仕様が異なっていて少し詰まったのでその備忘も兼ねています。

## 環境
Gitlabのバージョンはイメージプルをした時の最新であった17.2.1を使用しています。

### バージョン情報

```shell:コマンド
test01@k8s-master-node01:/work/gitlab$ docker exec -it gitlab-web-1 gitlab-rake gitlab:env:info

System information
System:
Current User:   git
Using RVM:      no
Ruby Version:   3.1.5p253
Gem Version:    3.5.11
Bundler Version:2.5.11
Rake Version:   13.0.6
Redis Version:  7.0.15
Sidekiq Version:7.1.6
Go Version:     unknown

GitLab information
Version:        17.2.1
Revision:       b30193cc04c
Directory:      /opt/gitlab/embedded/service/gitlab-rails
DB Adapter:     PostgreSQL
DB Version:     14.11
URL:            https://gitlab.motuneko253.work
HTTP Clone URL: https://gitlab.motuneko253.work/some-group/some-project.git
SSH Clone URL:  git@gitlab.motuneko253.work:some-group/some-project.git
Using LDAP:     no
Using Omniauth: yes
Omniauth Providers:

GitLab Shell
Version:        14.37.0
Repository storages:
- default:      unix:/var/opt/gitlab/gitaly/gitaly.socket
GitLab Shell path:              /opt/gitlab/embedded/service/gitlab-shell

Gitaly
- default Address:      unix:/var/opt/gitlab/gitaly/gitaly.socket
- default Version:      17.2.1
- default Git Version:  2.45.2
```
## 1.Gitlabでミラーリング準備
GitlabおよびGithubにそれぞれtestというリポジトリを作成し、それをミラーリングするようにします。
まずは、Gitlab上のリポジトリから、[設定] - [リポジトリ] - [ミラーしているリポジトリ] - [展開]をクリックします。
すると[新規追加]というボタンが現れますので、そこをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566232/1118df77-1c99-59b8-833f-8b47bc5f8f29.png)
<br>
以下のような画面が出ますので、必要な項目を入力して`ミラーリポジトリ`をクリックします。
- **GitリポジトリのURL**：`ssh://git@github.com/[ユーザ名]/[対象リポジトリ].git`というURLになります。今回の例だと、`ssh://git@github.com/motuneko253/test.git`です。
- **認証方法**：デフォルトでは`ユーザー名とパスワード`となっているのですが、`SSH 公開鍵`にします。少し前にGithub側がセキュリティ強化のため、パスワード方式は無効化したため、こちらを使用しても同期時にエラーとなります。
- **ユーザー名**：ここがハマったポイントなのですが、結論`git`としてください。私は自身のGithubのユーザ名を指定していたためか永遠に成功しなくて苦しみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566232/f9657fe3-0f91-be85-37e6-fb138dc7e139.png)


<br>
入力が完了すると以下の画面に遷移します。[SSH 公開キーをコピー]をクリックすると、鍵情報がクリップボードにコピーされます。一旦Gitlabの操作は終わりです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566232/7f7ceb00-1012-9d86-695e-004529803a7b.png)

## 2.Githubでの鍵登録
続いてGithubでは、[settings] - [SSH and GPG Keys] - [New SSH Key]をクリックします。
遷移した以下の画面で値を入力し、[Add SSH Key]をクリックします。
- **Title**：何でも良いですが、私はリポジトリ名に統一しています。
- **Key type**：デフォルトのままです。
- **Key**：先ほどGitlabからコピーしたキー情報をそのまま貼り付けます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566232/b2a8ff42-32c6-74bf-ddee-2062e4b3028b.png)

## 3.同期の実行
鍵の登録が終わったら再びGitlabに戻り同期を行います。
[今すぐ更新]をクリックし、少し待ちます。
「最後に成功した」という項目が「たった今」に変われば同期は成功しています。
Github側でも資材が反映されているかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566232/090adb6d-f63d-2dc1-585c-c73096e325bb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566232/4afc9bfc-9ef8-dc39-b8f6-b87bf6a0d351.png)
<br>

gitlab上の資材を試しに更新してGithubまで反映されるかテストをしてみます。
```shell:コマンド
motuneko253@k8s-master-node01:/work/gitlab/test$ echo "test!" > README.md
motuneko253@k8s-master-node01:/work/gitlab/test$ git status
ブランチ main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")
motuneko253@k8s-master-node01:/work/gitlab/test$
motuneko253@k8s-master-node01:/work/gitlab/test$ git add README.md
motuneko253@k8s-master-node01:/work/gitlab/test$ git status
ブランチ main
Your branch is up to date with 'origin/main'.

コミット予定の変更点:
  (use "git restore --staged <file>..." to unstage)
        modified:   README.md

motuneko253@k8s-master-node01:/work/gitlab/test$ git commit -m "testコミット反映"
[main 4ad5fc9] testコミット反映
 1 file changed, 1 insertion(+), 93 deletions(-)
motuneko253@k8s-master-node01:/work/gitlab/test$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 2 threads
Compressing objects: 100% (1/1), done.
Writing objects: 100% (3/3), 281 bytes | 281.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To gitlab.motuninja250.work:sample/test.git
   1c7daf8..4ad5fc9  main -> main
```

gitの資材が無事反映できていることが確認できました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566232/ee0f6186-d38e-2d4f-3d08-bf883a701058.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566232/233c466a-a1b6-011f-4e50-ea679cd40ee9.png)

## 最後に
今回も小粒な記事でしたが、意外とこういうのメモしておかないと忘れるんですよね…。
肝心のgitlabの構築記事が作れていないので、そちらも時間を見てまた書こうかと思います！

## 参考サイト
・【GitLab・GitHub】GitLabにpushされたらGitHubのリポジトリにも反映させる！（ミラーリング）
https://bftnagoya.hateblo.jp/entry/2022/10/25/091826