LoginSignup
2
0

More than 3 years have passed since last update.

Fork 元とローカルのレポジトリを同期するエイリアスを考える

Last updated at Posted at 2019-06-05

概要

題名の通り。 Fork 元との同期は忘れがちであり、かつコマンドもよく忘れてしまう。 git fetch upstream -> git rebase upstream/master みたいな形ではあるが、どうも忘れがち。

そこでエイリアスに登録してしまおう、というのが主目的となる。

私の環境

  • OS: MacOS 10.14
  • Git version: 2.21.0
  • Shell: zsh 5.7.1-dev-0

以降については、この環境で検証しているため、特に他の OS 、 Shell の場合は動作保証ができない。(特殊なコマンドを使っていないので、 grep コマンドの動作だけ怪しいが、少しいじれば動くものとは思われる)

生成物

前提条件

git remote add upstream で upstream に Fork 元のリポジトリを登録しておく。

不安なら Git リポジトリのルートで cat .git/config とかで見とくと安心。こんな感じのものがあるはず。( yumechi を自分のユーザー名、 kashikoma を Fork 元、 mirei をリポジトリ名として見てください)

# (前略)
[remote "origin"]
    url = git@github.com:yumechi/mirei.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[remote "upstream"]
    url = git@github.com:kashikoma/mirei.git
    fetch = +refs/heads/*:refs/remotes/upstream/*
# (後略)

また、 upstream の同期したいブランチ名と、ローカルのブランチ名が一致していることを確認する。一致してない場合は checkout する。( master に同期したい場合は git checkout --track origin/master とかで一旦ローカルを master にしておく)

alias

    upstream-pull = "!f () { if git remote | grep upstream -q; then b=$(git rev-parse --abbrev-ref HEAD); git fetch upstream; git rebase upstream/"$b"; unset b; else echo '** error: set upstream !! **'; fi }; f"

https://www.shellcheck.net/ で異常がないか確認しつつ、整形したので多分問題ないはず。

使用してる関数を整形したもの

見づらいので、整形版を張っておく。

    upstream-pull = !"f() { \
    if git remote | grep upstream -q; then \
        b=$(git rev-parse --abbrev-ref HEAD); \
        git fetch upstream; \
        git rebase upstream/"$b"; \
        unset b; \
    else \
        echo '** error: set upstream !! **'; \
    fi \
    }; \
    f"

現在のブランチを upstream に同期するようにしているが、 master ブランチだけでもよかったのでは? という考え方もある。しかし、デフォルトブランチが master でない場合も自分が関わっている範囲でたまにあるため、現在のブランチを同期するようにしている。そのため、同期したいブランチはこのコマンドを打つ前に checkout しておく必要がある。

あとから見た記事

基本的に自分でコマンドを書いていたので、 Qiita 上で探していなかったが、とりあえず良さそうだと思ったのを貼る。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0