git管理ツールRepoを入れてみよう

More than 5 years have passed since last update.


Repo

repoはAndroidのプロジェクト管理用に作られたgitの管理ツールです。

複数のgitリポジトリを一括で管理することが出来ます。

普通に独自のプロジェクトに利用することが可能なため、規模が大きくなり、複数リポジトリを管理する

必要があるようなプロジェクトに使うと良いでしょう。


Repoのインストール

ここは公式にのっている通りに

curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

chmod a+x ~/bin/repo

あとはパスを通すなりしてください。


マニフェストファイルの作成

マニフェストファイルはrepoコマンドでどのリポジトリを取得してくるかを

書く為の設定ファイルのような物です。


マニフェスト用のgitリポジトリの作成

まずはマニフェスト用に別途gitのリポジトリを作成します。

例えば

mkdir HogehogeProject

cd HogehogeProject
mkdir manifest.git
cd manifest.git
git init --bare --shared

とか。

gitコマンドはこれで正しいか分かりません。ググってください。


default.xmlの作成

repoコマンドで取得する場合、default.xmlというxmlファイルに記述した設定で取りにいくようです。

ここに取得するリポジトリやリビジョンなどを指定していきます。

以下は最低限必要と思われるファイルの例です。

<?xml version="1.0" encoding="UTF-8"?>

<manifest>

<remote name="origin"
fetch="git://hogehoge.com/HogehogeProject"/>

<default revision="master"
remote="origin" />

<project path="project1"
name="project1"/>
<project path="project2"
name="project2"/>
</manifest>


remote

・name

リモートの名前です。

大抵何も考えないとoriginになるかと思うので、originにしておけばいいでしょう。

好きなようにしてもいいでしょう。

・fetch

repoで一気に取得する時のURIの接頭辞的なものです。

詳しくはprojectのところで説明します。


default

project要素の各属性値を省略した場合のデフォルト値を設定します。

・revision

取得するリビジョンを設定します。

上記の例ではmasterブランチを取るようにしています。

リビジョン番号を指定して特定のリビジョンを取得することも可能です。

<default revision="35ba1ca3d6fa1eca0605bf9a047bf9105a4fa5da"

remote="origin" />

・remote

使用するremote要素のname属性を指定します。


project

各リポジトリの取得設定をします。

defaultで設定したものを使いたくない場合は各project要素内で属性値を

オーバーライドしてください。

・path

repoで取得してきたときにローカルに自動生成されるディレクトリ名。

ローカルマシンのhogehoge_dirディレクトリでrepoコマンドを実行した場合

hogehoge_dir以下にpathに記述された名前でディレクトリが生成されます。

・name

リポジトリのパスを設定します。

ここに書く物には.gitはいりません。

remote要素のfetch属性と組み合わされ、最終的には以下のように展開されます。

${remote_fetch}/${project_name}.git

上記のproject1の場合、以下のようになります。

git://hogehoge.com/HogehogeProject/project1.git


Repoの初期化

まず、リポジトリ群を展開したいディレクトリを作成、移動します。

mkdir HogehogeProject_repos

cd HogehogeProject_repos

展開先に移動したらrepo initコマンドを実行します。

repo initは以下のようになります。

repo init -u gitのURI -b ブランチ名

サンプルのマニフェストでは以下のようになります。

repo init -u git://hogehoge.com/HogehogeProject/manifest.git


-uオプション

マニフェストのgitリポジトリを指定します。

先程の例ではHogehogeProjectディレクトリ以下にmanifest.gitというリポジトリで

作成したので

-u git://hogehoge.com/HogehogeProject/manifest.git

となります。


-bオプション

取得するブランチ名を設定します。

ここで設定するのは マニフェスト用のリポジトリのブランチ です。

取得したいリポジトリ群のブランチを指定しても駄目です。

default.xmlの設定を書き換えてブランチを切っている場合などに使います。

指定しない場合はmaterを取ってきます。


Repoによるリポジトリの一括取得、更新

repo initをかましたディレクトリ内で今度はrepo syncコマンドを実行します。

repo syncを実行するとマニフェストファイルに記載されているリポジトリを一括で取得してきます。

repo sync

repo syncが成功するとリポジトリが一括でダウンロードされています。

repo syncでコンフリクトが起きたりした場合の対処はそれぞれコンフリクトが起きた箇所をgitで

修正していくのが基本になると思います。

あまり試していないのでその辺は自分で調べてください。


ブランチを切る

repoコマンドを使って取得してきたリポジトリに新しく作業用のトピックブランチを

一括で作ることが出来ます。

repo branch ブランチ名

または普通にgitコマンド、またはsource treeなどを使って各リポジトリ毎にブランチを切って

作業することも出来ます。

全てのプロジェクトを編集するということはなかなかないと思うので、あまり使うことはないかもしれません。 

以上がrepoの基本的な使いかたです。

後はコマンダーな方はコンソールでgitを叩くもよし、GUIっこはSource Treeを使ってボタンポチポチ管理でもよし。

各々好きなように使ってください。

更にrepoを使いこなしたい方は

repo help

以上のコマンドでrepoのコマンド一覧が見れるので、そちらを参考にしてください。

以上!