Skip to content

Commit 2419df8

Browse files
committed
Git: Add linguist-generated in .gitattributes
1 parent 2826704 commit 2419df8

File tree

2 files changed

+58
-20
lines changed

2 files changed

+58
-20
lines changed

documents/forGitBranch/git_branch_standards.md

Lines changed: 58 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -625,11 +625,7 @@ refactor: Lintエラーの修正 💄
625625

626626
:::
627627

628-
# 推奨設定
629-
630-
GitやGitHub/GitLabの推奨設定をまとめる。本規約にあるGitブランチ運用は、以下の設定が行われている前提で説明している箇所がある。
631-
632-
## git config推奨設定
628+
# git config推奨設定
633629

634630
`git config` の推奨設定を紹介する。特にGitワークフローの設定が重要である。
635631

@@ -664,15 +660,15 @@ git config --global alias.br branch
664660
- `fetch.prune`: リモートリポジトリで削除されたブランチを削除する
665661
:::
666662

667-
## git-secrets
663+
# git-secrets
668664

669665
[git-secrets](https://github.com/awslabs/git-secrets)を用いることで、ユーザーパスワードや AWS アクセスキーなどの機密情報が含まれる可能性のあるコードなどをGit リポジトリに追加されないようにできる。
670666

671667
本規約の推奨は以下。
672668

673669
- チームメンバー全員にgit-secretsを導入する
674670

675-
## コミットフックでテスト実行は行わない
671+
# コミットフックでテスト実行は行わない
676672

677673
[git hooks](https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA-Git-%E3%83%95%E3%83%83%E3%82%AF) を用いて、コミットやプッシュ時に単体テスト実行などのカスタム処理を追加することができる。これを用いると、ローカルでの動作検証などを未実施な状態でレビュー依頼をしてしまうといった状況を未然に防ぎ、開発フローを強制的に適用することができる。
678674

@@ -689,7 +685,9 @@ git config --global alias.br branch
689685
実行時間が短いフォーマットであれば、git hooksで実行させると便利なことが多く(CIで違反に気づいて対応する手戻りが減るためである)、必要に応じて導入しても良い。
690686
:::
691687

692-
## .gitattribute
688+
# .gitattributes
689+
690+
## eol
693691

694692
チーム開発において開発環境がWindows/Macなど複数存在することは少なくなく、また、Gitリポジトリ上の改行コードは統一した方が余計な差分が生じず扱いやすくなる。このときよく用いるのが、 `core.autocrlf` という設定である。
695693

@@ -738,13 +736,53 @@ testdata/eol/input1.cs: eol: crlf
738736

739737
:::
740738

741-
## .gitignore
739+
## linguist-generated
740+
741+
自動生成で変更が発生し、かつ大量の変更が頻繁に発生する場合には、レビュワーが毎回レビューをすることは効率的でない。
742+
743+
`.gitattributes``linguist-generated=true` の設定を行うことで、差分をデフォルトで表示させず、プルリクエストの可視性を向上させることができる。
744+
745+
```sh .gitattributes
746+
# 自動生成されたHTMLファイルの差分を無視する
747+
/path/to/generated/*.html linguist-generated=true
748+
```
749+
750+
上記の設定で `/path/to/generated/main.html` をコミットすると、差分が以下のように非表示となる(Load diffをクリックすることで差分表示は可能)。
751+
752+
![プルリクエストのFile changedでmain.htmlの差分がLoad diffと表示](no_diff.png)
753+
754+
本規約の推奨は以下の通り。
755+
756+
- ツールなどによる生成ファイルをレビュー対象外とする場合は、`linguist-generated=true` を設定し、レビュアーの負荷を下げる
757+
- レビュアーは差分が省略された場合は、レビュー対象外としてファイルの中身の確認は任意とする
758+
759+
::: tip 生成コードをレビュー対象としたい場合
760+
761+
GitHubでは、[言語毎に生成ファイルと判定する処理](https://github.com/github-linguist/linguist/blob/v9.0.0/lib/linguist/generated.rb)があり、例えツールで作成されたファイルであっても、レビュー確認を必須としたい場合には、クリックする手間が増える分、逆に非効率になる。
762+
763+
例えば、Javaなど複数の言語では3行目までに `Generated by the protocol buffer compiler. DO NOT EDIT!` が含まれていると[Protocol Bufferの生成コードとみなされる](https://github.com/github-linguist/linguist/blob/63cfd70d54ee8f76c41a73fe56689ed8229c9622/lib/linguist/generated.rb#L348-L359)
764+
765+
もし、明示的に差分を表示させたい場合、`linguist-generated=false` を設定する必要がある。
766+
767+
```sh .gitattributes
768+
# 以下はコード生成されたファイルだが、レビュー対象としたいためlinguist-generated=falseを設定し、差分を表示させる
769+
/path/to/generated/*.java linguist-generated=false
770+
```
771+
772+
:::
773+
774+
参考:
775+
776+
- [変更したファイルの GitHub での表示方法をカスタマイズする - GitHub Docs](https://docs.github.com/ja/repositories/working-with-files/managing-files/customizing-how-changed-files-appear-on-github)
777+
- [GitHubでファイル差分が表示されない!?レビューを快適にするための差分の非表示ロジックを解説](https://zenn.dev/hacobell_dev/articles/show-diff-in-github)
778+
779+
# .gitignore
742780

743781
Gitで管理したくないファイル名のルールを定義する`.gitignore`ファイルも入れる。ウェブフロントエンドであれば新規プロジェクトを作成すると大抵作成されるのでそれを登録すれば良いが、もしない場合、あるいは複数の言語を使っている場合などは[GitHubが提供するテンプレート](https://github.com/github/gitignore)を元に作成すると良い。GlobalフォルダにはWindows/macOSのOS固有設定や、エディタ設定などもある。
744782

745783
環境設定を`.env`で行うのが一般的になってきているが、`.env.local``.env.dev.local`といった`.local`がついたファイルはクレデンシャルなどの機微な情報を扱うファイルとして定着しているため、 `*.local`も追加すると良い。
746784

747-
## 個人用のファイルをGit管理対象外とする
785+
# 個人用のファイルをGit管理対象外とする
748786

749787
`.gitignore` を用いると、チームでGit対象外とするファイルを一律で設定できる。
750788

@@ -759,7 +797,7 @@ Gitで管理したくないファイル名のルールを定義する`.gitignore
759797

760798
- [個人的Gitおすすめtips 7選 #GitHub - Qiita](https://qiita.com/hichika/items/f3c980dd069df0f3a56e)
761799

762-
## Pull Request / Merge Request テンプレート
800+
# Pull Request / Merge Request テンプレート
763801

764802
GitHubやGitLabでは、プルリクエスト作成時のテンプレートを作ることができる。チームでプルリクエストで書いてほしいことを明示的にすることで、レビュー効率の向上や障害調査に役立てることができる。
765803

@@ -784,15 +822,15 @@ GitHubでは `.github/PULL_REQUEST_TEMPLATE.md` に記載する。(GitLabで
784822
- [ ] 今回のPRでは未対応の残課題があればIssueに起票した
785823
```
786824

787-
## GitHub推奨設定
825+
# GitHub推奨設定
788826

789827
業務利用でのチーム開発を想定しており、リポジトリは以下の条件を満たす前提とする。
790828

791829
- プライベートリポジトリ
792830
- Organization配下に作成
793831
- Teamsプラン以上の有料契約(※プロテクトブランチの機能などを利用するために必要)
794832

795-
### General
833+
## General
796834

797835
| Category | Item | Value | Memo |
798836
| ------------- | ---------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------ |
@@ -805,7 +843,7 @@ GitHubでは `.github/PULL_REQUEST_TEMPLATE.md` に記載する。(GitLabで
805843
| | Automatically delete head branches | ✅️ | マージ後にfeature branchを削除するため有効にする |
806844
| Pushes | Limit how many branches and tags can be updated in a single push | 5 | git push origin –mirrorで誤ってリモートブランチを破壊しないようにする。推奨値の5を設定する |
807845

808-
### Access
846+
## Access
809847

810848
| Category | Item | Value | Memo |
811849
| ----------------------- | ------------- | ---------- | ----- |
@@ -818,9 +856,9 @@ GitHubでは `.github/PULL_REQUEST_TEMPLATE.md` に記載する。(GitLabで
818856
- 「Admin」権限は、マネージャークラスに対して合計2~3名を付与し、属人化しないようにする
819857
- 1名でも、4名以上でもNGとする
820858

821-
### Code and automation
859+
## Code and automation
822860

823-
#### Branches
861+
### Branches
824862

825863
Branch protection rules にdevelop, mainなど永続的なブランチに保護設定を追加する。
826864

@@ -843,28 +881,28 @@ developブランチに対し「require linear history」を選択することを
843881

844882
[^1]: https://zenn.dev/daku10/articles/github-merge-guardian
845883

846-
#### Tags
884+
### Tags
847885

848886
| Category | Item | Value | Memo |
849887
| -------- | ------------ | -------------------- | -------------------------------------------------------- |
850888
| | Protect tags | v[0-9]+.[0-9]+.[0-9] | セマンティックバージョニングに則ったタグのみ、削除を防ぐ |
851889

852-
#### GitHub Actions
890+
### GitHub Actions
853891

854892
| Category | Item | Value | Memo |
855893
| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----- | ---- |
856894
| Actions permissions | Allow asset-taskforce, and select non-asset-taskforce, actions and reusable workflows > Allow actions created by GitHub | ✅️ | |
857895
| | Allow asset-taskforce, and select non-asset-taskforce, actions and reusable workflows > Allow actions Marketplace verified creators | ✅️ | |
858896

859-
#### Code security and analysis
897+
### Code security and analysis
860898

861899
| Category | Item | Value | Memo |
862900
| ---------- | --------------------------- | ----- | ------------------------------------------ |
863901
| Dependabot | Dependabot alerts | ✅️ | 依存パッケージのアップデートを検知するため |
864902
| | Dependabot security updates | ✅️ | |
865903
| | Dependabot version updates | ✅️ | |
866904

867-
## GitLab推奨設定
905+
# GitLab推奨設定
868906

869907
- GitHubの「Automatically delete head branches」
870908
- マージリクエストから「Delete source branch」オプションを有効にすることが該当

documents/forGitBranch/no_diff.png

23.4 KB
Loading

0 commit comments

Comments
 (0)