Gitで、リモートにあるbareリポジトリ(repo.gitのようなリポジトリ)の扱いについてメモ。
ここでは以下のようなリポジトリ構成になっているものとします。
- CENTER.git : チーム外で管理しているリポジトリ
- MAIN.git : チームの開発者が普段pushするリポジトリ
- LOCAL : 開発者が利用するリポジトリ
bareリポジトリでのマージ
bareリポジトリ(MAIN.git)上ではマージはできない。これは第一にbareリポジトリにはwork copyがないから。work copyがないと、マージで衝突したときに解決する手段がない。bareリポジトリ上のブランチのマージは、一度開発環境(LOCAL)など別のリポジトリ上にプル/チェックアウトし、そこでマージしたうえでリモートにpushする。
外部リポジトリからの取り込み
CENTER.gitで修正があり、それをMAIN.gitに取り込むにはgit fetchを使う。これだけで取り込みはOKのはずだが、fetchで取り込んだだけではHEADが更新された最新に移動しないので、reset --softする(work copyがないので、softでないとエラーとなる)。
# 以下、MAIN.git上での操作 $ git fetch <CENTER.git> $ git reset --soft HEADこの後でgit logすると、最新の変更がログに出力される。
ブランチを指定してpush
たとえばoriginに指定されているリモートリポジトリのdev-remoteブランチに、ローカルのdev-localブランチをpushする場合:
$ git push origin dev-local:dev-remote
リモートのブランチからクローンする
リモートリポジトリ(MAIN.git)のdev-remoteブランチを、ローカルにdev-localブランチとして取得する場合、まずgit cloneした後、リモートのブランチを指定してcheckoutする。
git clone <MAIN.git> git checkout -b dev-local remotes/origin/dev-remote
リモートにタグを反映する
ローカルで作成したタグをリモートに反映する
$ git push --tags
No comments:
Post a Comment