CITools >

目次

基本フロー

  • note.png主にマージリクエスト(GitHub?の場合はプルリクエスト、以下同様)の利用を前提としています。マージリクエスト自体は Git の機能ではありませんが、非常に普及しているソーシャルコーディングの手法です。

ユーザ情報の設定

  • lightbulb.pnggithub.comでメールアドレスをマスクしたい場合には、<username>@users.noreply.github.com を設定します。
  • gitlab.com ではメールアドレスのマスクはまだできないようです(#43521)。
  1. ユーザ情報を適切に設定しておきます。
    $ git config --global user.name 'Alice'
    $ git config --global user.email alice@mail.example.com
    $ git config -l
    • リポジトリ毎に変更したい場合には、その対象のリポジトリ以下で --local オプションを指定して設定します。
      $ git config --local user.name 'Alice'
      $ git config --local user.email alice@mail.example.com
      $ git config -l

リポジトリへの変更権限がある場合

  • 最もシンプルには master ブランチに変更をコミットし、それをそのままリモートに push します。
    $ git clone git@gitlab.io.example.com:sandbox/hello-world.git
    $ cd hello-world
    $ touch README.md
    $ git add README.md
    $ git commit -m 'add README'
    $ git push -u origin master
  • CIパイプライン等を経由させたい場合: マージリクエストを利用します。
  1. 開発ブランチ(この例では、dev-br)を作成し、そこにコミットした変更を push します。
    $ git checkout -b dev-br
    Switched to a new branch 'dev-br'
    $ git branch
    * dev-br
      master
    $ vim README.md
    ...
    $ git add README.md
    $ git commit -m 'modify README.'
    [dev-br 3823e82] modify README.
     1 file changed, 1 insertion(+)
    $ git push origin dev-br
    ...
  2. このブランチの変更を(一般的には master ブランチに)マージしてもらうため、WebUIからマージリクエストを出します。この時点でマージリクエストビルド(主にテスト目的)を実行するようにCIツールをセットアップするとよいでしょう。
  3. 変更内容に問題がある場合には、再度開発ブランチに修正をコミットし、push します。その変更内容は該当のマージリクエストに反映されます。
  4. マージ権限はあるため、変更内容に問題がなければマージを実行します。この時点でパブリッシュまたデプロイを実行するようにCIツールをセットアップするとよいでしょう。
  5. もうリモート開発ブランチが不要な場合には、それを削除します。WebUIから削除するのが簡単です。
  6. ローカルの開発ブランチは以下の要領で削除します。
    $ git checkout master
    $ git pull
    $ git branch --delete dev-br
    Deleted branch dev-br (was 3823e82).

他のリポジトリへのコントリビュート

  • 直接の変更権限がないリポジトリへのコントリビュートにも、もちろんマージリクエストを利用します。
  1. まず対象のリポジトリ(この例では git@gitlab.io.example.com:sandbox/hello-world.git とします)を任意のグループにフォークします。フォーク先グループはプライベート(この例では、alice)でも共同開発グループ(GitHub?では、Organization)でも構いません。lightbulb.png共同開発グループの場合、コントリビュートに際してメンバーの助けを受けることが容易になります。
  2. フォークしたリポジトリをクローンします。
    $ git clone git@gitlab.io.example.com:alice/hello-world.git
    $ cd hello-world/
  3. note.png2回目以降のコントリビュートの際には、ソースをフォーク元と同期させておきます(下記参照)。
  4. この後、開発ブランチを作成し、そこにコミットした変更を push するのは上記と同様です。
    $ git checkout -b dev-br
    $ vim README.md
    ...
    $ git add README.md
    $ git commit -m 'add message.'
    [dev-br c41d836] add message.
     1 file changed, 2 insertions(+)
    $ git push origin dev-br
    ...
  5. このブランチの変更をフォーク元にマージしてもらうため、WebUIからマージ先がフォーク元のそれ(この例の場合は、sandbox/hello-world:master)になっていることを確認してから、マージリクエストを出します。この時点でマージリクエストビルド(主にテスト目的)を実行するようにCIツールがセットアップされている場合がほとんどです。テストにパスするソースをコントリビュートするよう心がけましょう。
  6. 変更内容に問題がある場合には、再度開発ブランチに修正をコミットし、push します。その変更内容は該当のマージリクエストに反映されます。
  7. マージリクエスト上での遣り取りの後、変更内容に問題がないことが確認されればフォーク元の管理者がマージを実行してくれます(場合によっては変更が却下(クローズ)されます)。
  8. もうリモート開発ブランチが不要な場合には、それを削除します。WebUIから削除するのが簡単です。
  9. ローカルの開発ブランチは以下の要領で削除します。この場合、HEADへのマージはありませんので -D オプションで強制削除します。
    $ git checkout master
    $ git branch -D dev-br
    Deleted branch dev-br (was c41d836).

フォーク元との同期

  • フォークしたリポジトリは容易に陳腐化します。次回以降のコントリビュートの際には、事前にフォーク元との同期を行ってから開発作業を開始するようにしましょう。
  1. まずフォーク元のリポジトリを upstream という名前で追加しておきます。
    $ git branch
    * master
    $ git remote add upstream git@gitlab.io.example.com:sandbox/hello-world.git
  2. フォーク元の変更をフェッチしてマージします。
    $ git fetch upstream
    ...
    $ git merge upstream/master
    Updating e85d2b5..42eefa1
    Fast-forward
     README.md | 2 ++
     1 file changed, 2 insertions(+)
  3. さあ開発ブランチを作成し、開発をはじめましょう。

マージリクエストのコミット履歴をまとめる

  • フォーク元のポリシーによっては、(マージ後の履歴をシンプルにするため)一つのマージリクエストに含まれる複数のコミットをまとめるように求められるかもしれません。そのような場合には git rebase を実行します。
  1. まとめたい直近のコミットの数を指定して rebase します。
    $ git rebase -i HEAD~4
  2. エディタが開きますので、直前のコミットにまとめたいコミット(すべて)の先頭の picksquash(もしくは s)に変更して保存の上閉じます。
  3. 次にまとめのコミットメッセージを入力するためのエディタが開きますので、メッセージを修正の上保存してこれも閉じます。これで複数のコミットがまとまります。
  4. 最後にこの履歴の改変を push します。なお、このような rebase は関係者が合意の上、行うものですのでリモートに強制的に push しても問題ありません。
    git push -f origin dev-br

Tips

ブランチの確認

$ git branch
* dev-br
  master

$ git branch -a
* dev-br
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/upstream/master

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-03-17 (土) 18:46:23 (151d)