Repoの使い方とWindows Subsystem for Linux(Ubuntu20.04)のセットアップ方法
公開日: 2020年06月04日最終更新日: 2022年01月28日
Repoの使い方を整理します。試しにWindows Subsystem for Linux(WSL)でやってみます。
久しぶりにVirtualBox上のLinuxで実行しようと思ったのですが、AMD-VとHyper-Vが競合するようでVMの起動ができませんでした。
そこでHyper-Vを無効化するくらいならWindows Subsystem for Linux(WSL)を使ってみようと思いました。
なので、ここではRepoの使い方をWSL上で説明します。
Repo
Repoは、複数のGitリポジトリを管理するためのツールです。Android OSの開発で利用されています。
WSLの環境設定
まずWSLのセットアップします。
"Windows 機能の有効化または無効化"でWindows Subsystem for Linuxを有効化します。
続いてMicrosoft StoreでUbuntuを検索してインストールします。
Ubuntu20.04をインストールしました。
Ubuntuのインストールができるとターミナルが開くのでアップデートしておきます。
sudo apt-get update
sudo apt-get updgrade
Gitは予め入っているので設定だけします。
git config --global user.email "email@example.com"
git config --global user.name "username"
pythonもインストールしておきます。repoのためにシンボリックリンクも作成しておきます。
sudo apt install python3 python3-pip -y
sudo pip3 install pip -U
sudo ln -s /usr/bin/python3 python
Repoのインストール
Repoをインストールします。(Google)[https://source.android.com/setup/build/downloading]から入手します。
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
Repoの使い方
以下のリポジトリを使って説明します。中身はrepoに必要なmanifestのxmlファイルとmarkdownファイルが置いてあるだけです。
- https://github.com/Gan0803/repo-test-manifest
- https://github.com/Gan0803/repo-test-a.git
- https://github.com/Gan0803/repo-test-b.git
- https://github.com/Gan0803/repo-test-c.git
構成
以下のようなディレクトリ構成で考えます。 dir_a、dir_b、dir_cはそれぞれ別のgitリポジトリで管理されているとします。
.
├── dir_a/
│ └── dir_c/
└── dir_b/
上記ディレクトリと対応するgitリポジトリは以下です。
- repo-test-a dir_a配下のプロジェクトのリポジトリ
- repo-test-b dir_b配下のプロジェクトのリポジトリ
- repo-test-c dira/dir_c配下のプロジェクトのリポジトリ
Repoを使うことでこれらのgitリポジトリ / ディレクトリに対する操作を横断的に行う事ができます。
manifest
Repoはmanifestによってgitリポジトリとディレクトリの管理を行います。 そして、このmanifestもGitリポジトリで管理します。このリポジトリの名前は以下のようにします。
- repo-test-manifest Repoのmanifest管理用
manifestはxmlファイルで、今回の例では以下のように記載します。
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="origin"
fetch="https://git@github.com"/>
<default revision="master"
remote="origin" />
<project path="dir_a"
name="Gan0803/repo-test-a"/>
<project path="dir_b"
name="Gan0803/repo-test-b"/>
<project path="dir_b/dir_c"
name="Gan0803/repo-test-c"/>
</manifest>
- remoteのnameにリモートリポジトリの名前を記述し、fetchに取得先サーバの情報を記載します。
- defaultのrevisionにmasterブランチを指定して、remoteはoriginを指定します。(事前にgit remote set originしておきます。)
- projectのpathにリポジトリを配置するディレクトリを記載し、nameにリポジトリを記載します。ここでremoteなどを記述しない場合はdefaultが使用されます。
フォーマットの詳細はrepoのWEBページを確認してください。
動作確認
実際に複数のリポジトリからRepoでソースコードを取得し、ローカルのディレクトリに展開します。
まずはマニフェストを指定してrepo initします。このコマンドでRepoのmanifestをGitリポジトリから取得してディレクトリをrepo用に初期化しています。
mkdir ~/repo-test
cd ~/repo-test
repo init -u git@github.com:gan0803/repo-test-manifest.git
もし自分のリポジトリで確認する場合は、環境に応じてgitコマンドが通るよう事前に~/.ssh配下の設定を適切にしておきます。
次に取得したmanifestに基づいてリポジトリからソースコードを取得します。
repo sync
repo syncの途中で秘密鍵のパスワードを聞かれて止まってしまう場合は、ssh-addしておきます。
ssh-add ~/.ssh/id_rsa
repo syncが成功すると、manifestの記載通り、リポジトリの内容が指定されたディレクトリに展開されます。 確認すると以下のようになっているはずです。
~/repo-test
├── dir_a
│ ├── [files]
│ └── dir_c
│ └── [files]
└── dir_b
└── [files]
各ディレクトリはgit cloneされているだけですので、それぞれのディレクトリでgit commit, git pushなど普段どおりに作業することができます。
repoにはsync以外にも様々なコマンドがあります。複数リポジトリの差分を表示したり、複数リポジトリに対するシェルコマンドの実行ができたりします。 Repo コマンド リファレンスに簡単な説明があるので確認してみてください。
おっと……、Windowsでも動くみたいですね。 https://gerrit.googlesource.com/git-repo/+/refs/heads/master/docs/windows.md