UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Git】最新の機能をキャッチアップする

GitHubの共同創設者であるスコット・シャコンが、Gitの使用方法と最新の機能について話している動画

www.youtube.com

主に以下を説明している

  • Gitの新機能や最近の更新
  • 大規模なリポジトリの管理方法
  • 新しいGitクライアント「GitButler」
  • GitHubでの最新の変更点

詳細は以下にメモとして記載しておく

昔からある機能の説明と更新

  • エイリアスを設定 alias gb='git branch'
  • グローバルエイリアスも活用して全てのリポジトリに適用する git alias -g gb='git branch'
  • !をつけるとシェルスクリプトが実行できる git config alias.bb !better-branch.sh
  • includeIfディレクティブを使用して、特定のディレクトリ内の設定を読み込む
  • git blame -L <start>,<end>:<file path>: ファイルの指定した行の範囲の更新情報を表示
  • git blame -w -C <file path>: -wでスペースを消して、同じコミットで変更された他のファイルから移動またはコピーされた行を検出する
    このオプションを 2 回指定すると、コマンドはファイルを作成するコミット内の他のファイルからのコピーをさらに検索する
    このオプションを 3 回指定すると、コマンドはさらに、コミット内の他のファイルからのコピーを検索する
  • git log -S <string> -p: 文字列を探して更新のあったファイルのログを表示し、-pでファイルの中まで表示する
  • git diff --word-diff: 単語ベースの差分を表示
  • git config --global rerere.enabled true: REuse REcorded REsolution(マージコンフリクトの自動解決機能)

新機能

  • git branch --column: ブランチを列で表示(llとlsの違いみたいな)
  • git push --force-with-lease: ローカルrefとリモートrefを比較しローカルが最新か判定し、最新でなければPUSHが失敗する(より安全に)
  • git maintenance start: リポジトリのメンテナンスを自動化(Git - git-maintenance Documentation

大規模リポジトリ向けのGitツール

  • prefetch: 定期的にgit maintenance startコマンドを実行することで、指定されたプロジェクトのデータをバックグラウンドで取得し、git fetchコマンドを実行した場合の取得データ量が大幅に削減され、操作が高速化する
  • commit-graph: get commit-graphコマンドを実行することで、リポジトリのコミットグラフを生成し、ログ操作が高速化するが、初回の実行には時間がかかる
  • filesystem monitor: git config fs.monitorを設定することで、ファイルシステムの変更を監視するデーモンが起動し、git statusコマンドの実行が高速化する
  • 部分クローン: git cloneコマンドに--filterオプションを使用することで、一部のオブジェクトをフィルタリングして取得でき、リポジトリのダウンロード時間が短縮できる

モノレポ

  • sparse-checkout: git sparse-checkoutコマンドを使用することで、特定のディレクトリのみをチェックアウトできる

GitHubの機能

  • 許可されたマージタイプの設定: GitHubの設定でマージコミットまたはリベースのみを許可できる
  • スカッシュマージ: マージコミットとリベースの折衷案として、スカッシュマージを使用できる
  • GitHubでの自動マージ: CIの通過後にマージを自動的に行える
  • Merge Queue: 複数のコミットをまとめてマージできる
  • 線形履歴の必須化 :マージコミットを含むプッシュを拒否できる
  • 署名付きコミットの必須化: SSHと連動して、署名付きコミットを必須化できる