/ 最近 .rdf 追記 編集 設定 本棚

脳log[20181018] Git, GitHub 初期設定



2018年10月18日 (木)

最終更新: 2021-05-12T04:21+0900

[Git] Git, GitHub 初期設定

あまり書かれていないことだけ。

 ローカルリポジトリ

  • (クローンしたなら)リモート名 origin を削除する。git remote
    • 余計な自動化も自分が管理しない名前もない方がまし。
  • 自分の GitHub リポジトリをはじめ、外部リポジトリの URL に名前を付ける。git remote
    • ブランチ名とひと目で区別できるように、リモート名は @ を付けたり大文字にしたりしようかな。
  • 自分のではないリモートリポジトリへのプッシュをできなくする。git remote set-url --push <remote> ""
  • 新しく作成したブランチが自動的に設定する、分岐元との繋がりを断つ。git config --global --add branch.autoSetupMerge false
    • --no-track を既定値にするということ。git branch のみならず git checkout -b においても。
    • 最新版の取得がチェックアウト&プルでは済まなくなるはずだが、読み取り専用にするつもりのブランチなら --ff-only なマージで済むはず。でもマージする範囲が自動ではわからないかも。なら毎回新しくチェックアウトするとか。
      • プルできないのが面倒なら、<remote> へのプッシュ不可設定を徹底することにして、この設定はしなくていいかも。
    • 変更を加えたブランチは、最初に必ず自分の GitHub リポジトリにプッシュする。git push [-u] <myRemote> localBranch[:remoteBranch]
      • -u オプションを付けて一度プッシュすれば、以降は引数なしのプッシュ、プルが可能。
      • タイプ頻度が高いローカルブランチだけ短い名前にしようかな。
        • [Tips] localBranch の部分を HEAD にするとチェックアウト中のブランチ名を意味するみたい。※コミットオブジェクトへの参照(refs)ではなく、refs への参照ってこと?
        • [Tips] 単独のコロン(:)はローカルとリモートにおける全ての同名のブランチの組を指すらしい。ローカルにだけ短い名前を付けると対象から外れてしまうし、それがリモートに存在する無関係のブランチと同じ名前だったりしたら……(考えるだに恐ろしい)。
  • [Tips] チェックアウトしているブランチを削除したければ git checkout --detach してから。これでひとつのブランチも残しておかなくて済む。
  • [Tips] おそらく一番タイプするコマンドのエイリアス。

    [alias]
    	co = checkout
    	st = status --short --branch

 GitHub の自分のリポジトリ

  • フォークする。
    • GitHub はフォークツリーをメンテナンスしており、プルリクエストを出すためには GitHub 上でフォークしたという事実が大事。他に方法がないとは限らないが、Web での操作に苦労したくないなら、そう。
  • フォーク元とは別のリポジトリ名にする。
    • リポジトリを削除するときにはリポジトリ名の入力が要求されるのだが、アカウント名は省略できる。リポジトリの名前が同じならフールプルーフは機能しない。
  • フォークしたときに作られた master を巻き戻して、空のブランチを作る。git reset, git push
  • デフォルトブランチを空のブランチにする。
  • 空のブランチだけを残して、クローンしたときに作られたブランチをすべて削除する。git push <remote> --delete <remoteBranch> (--delete の代わりにコロンでも同じ。:<remoteBranch> 空のブランチを push = 削除)
    • 自分の GitHub リポジトリにコピーブランチはいらない。ローカルの作業リポジトリで git fetch --all して <remote>/master などと参照すればよい。

すべては自分のリポジトリを表示したときに、他人の作業の成果があたかも自分のものであるかのように表示されるのが嫌だから。あとは一見したページの印象がそっくりだと、自分のリポジトリを削除するつもりでフォーク元のリポジトリを削除してしまうことがあるから。

 根底にある考え

自分にとって3つのリポジトリの関係は「本家―ローカル―フォーク」として捉えられている。でもひょっとしたら「本家―フォーク―ローカル」の想定もあるのかもな、と考えてみた次第。でも自分で GitHub にフォークリポジトリを持たなくても「本家―ローカル(フォーク)」の2者間でもフォークは成り立つので、中心に GitHub 上のフォークリポジトリを置くのは、GitHub の中の人の立場としてならともかく、個人としては順序が違うと思う。メンタルモデルはひとつで十分だ。そのとき GitHub 上のフォークリポジトリは3番目に位置するオプショナルな存在となる。