LucifeP(ルシフェP)の日記

Unityでゲームつくっている人です。

別のGitHubアカウントのリモートレポジトリへプレイベートレポジトリをプッシュする方法

Git初心者なので間違いあるかもですが、備忘録です。
自分用のメモを兼ねているので冗長ですが丁寧に手順を追っていきます。


はじめに

個人アカウントのプライベートレポジトリを訳あって、社内で共有したいということがありました。
レポジトリ内部には公開できない内容も含まれているためパブリックにするわけにはいかず、コミット履歴も含みたいため社内で新規レポジトリとして作成するのも候補から外れました。
社内全体で共有したかったため、Collaboratorsも選択肢から外れました。

ローカルレポジトリから新たにリモートレポジトリを作成して、別アカウントのリモートレポジトリへプッシュする方法を知り、この方法で解決しました。

以下では2つのGitHubアカウントを個人アカウント社内アカウントとして説明を続けます。


動作環境



1. SSHキーを個人アカウントに登録

社内PCから個人アカウントにアクセスできるようにSSHキーを登録します。

.sshフォルダへ移動

C:\Users\[ここはユーザー名]\.sshに移動します。
.sshフォルダが無ければ作成します。

SSHキーを作成

コマンドプロンプトを起動して、以下のコードでSSHキーを作成します。
file_nameには任意のファイル名を入力します。

ssh-keygen -t rsa -f file_name

パスワードの設定を促されるためEnterキーを2度押して、作成を完了させます。
例えば、file_nameをhome_keyとした場合は以下の2つのファイルが作成されます。

  • home_key
  • home_key.pub


公開鍵のhome_key.pubテキストエディタで開いて、Ctrl + Aで全選択してコピーしてGitHubに登録します。

GitHubページでのSSHキー登録先は以下の手順で辿り着けます。
1. GitHubページ右上のアイコンをクリック
2. Settings
3. 画面左メニューのSSH and GPG Keys
4. 画面右上のNew SSH key

Titleには識別しやすいよう任意の名前を入力し、keyの欄に先ほど作成して中身をコピーした公開鍵を貼り付けます。
Add SSH key をクリックして登録完了です。

configファイルを作成

以下のようにconfigファイルを作成します。
既に作成済みであれば、configファイルは.sshフォルダ内にあります。

SSHキーは以下で作成したものとします。

  • 社内アカウント: work_key
  • 個人アカウント: home_key

HostNameは以下で作成することにします。

  • 社内アカウント: github.com
  • 個人アカウント: github.com.home
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/work_key

Host github.com.home
  HostName github.com
  User git
  IdentityFile ~/.ssh/home_key
  TCPKeepAlive yes
  IdentitiesOnly yes



2. 対象レポジトリをクローン

対象レポジトリのSSHのURLはgit@github.com:[アカウント名/レポジトリ名].gitになっていますが、github.comのところをgithub.com.homeに置き換えます。

git clone git@github.com.home:[個人アカウント名/ローカルレポジトリ名].git


Note:
configのHostNameを置き換える点が重要です。
今回は、「個人→社内」 でしたが、「社内→個人」 の場合でも適切に置き換えれば逆のパターンも対応可能です。
その場合は後述の`remote add`コマンド実行時もHostNameを適切に置き換えます。



3. プッシュ先のレポジトリを作成

社内アカウントでプレイベートなレポジトリを任意の名前で作成しておきます。



4 ローカルレポジトリからリモートレポジトリを作成

クローンしたプロジェクト直下に移動して下記コマンドを実行します。
リモートレポジトリ名には「3. プッシュ先のレポジトリを作成」で作成したレポジトリ名を入力します。
remote_repoには任意の名前を入力します。

git remote add remote_repo git@github.com:[社内アカウント名/リモートレポジトリ名].git



5 リモートレポジトリをプッシュ

remote_repoは「#4 ローカルレポジトリからリモートレポジトリを作成」でremote_repoに指定した名前を使います。
--all をつけるとmasterブランチだけでなく、全ブランチをプッシュしてくれます。

git push remote_repo --all


これでコミット履歴も含めて、個人のレポジトリを社内で共有することが出来ました。