HN🔥 275
💬 88

.gitignoreだけじゃない!Gitでファイルを無視する意外な裏ワザ

FergusArgyll
1日前

ディスカッション (11件)

1
bryancoxwell
1日前

.git/info/exclude はめちゃくちゃ愛用してる。ローカルでしか使わないスクリプトやMakefileとか、共同作業者には関係ないし使われることもないようなファイルには最適なんだよね。

2
hk1337
1日前

/.gitignore_global を作って設定をいじるより、/.config/git/ignore と /.config/git/config を使うのが、グローバルなgit設定やignoreの正しい置き場所だと思うよ。個人的な意見だけどね。おかげでルートディレクトリのdotfilesがすっきりしたし、/.config/ を活用するのはいろいろ捗る。あと、git excludeがあまり使われないのはリポジトリにコミットされないからで、使うたびに再作成しなきゃいけないからだね。別に悪い機能ってわけじゃないけど、そういう理由で使われてないんだと思う。

3
judofyr
1日前

どこで覚えたか忘れたけど、自分のグローバルGit ignoreにはこれを追加してるよ。

    attic

これのおかげで、どのプロジェクトでも適当に作った attic ディレクトリに、コミットすべきじゃない雑多なものを放り込んでおける。実際にリポジトリの中にこういうディレクトリチェッカーを入れてるのを見たことはないけどね。

4
kevincox
1日前

グローバル(ユーザー単位)の除外設定はもっと知られていい機能だと思う。プロジェクトごとの .gitignore に自分のIDEやOS、AI関連のファイルを勝手に追加するプルリクがよく来るんだけど、「標準設定に追加すれば、プロジェクト側に迷惑をかけずにどこでも無視できるし、まだ .gitignore を更新してないプロジェクトでうっかりコミットするリスクも防げるよ」って教えてあげると、みんなたいてい喜んでくれる。

自分の中のルールとして、リポジトリ内の .gitignore はそのプロジェクト固有のもの(ビルド成果物や依存関係のフォルダなど)だけに使うようにして、ユーザー側のツール類は自分の設定側に寄せるのがいいと思ってる。

5
dofm
1日前

ユーザーごとのignoreについて:

> 例えばmacOSなら、ここに .DS_Store を追加するのが理想だね。

プロジェクト内のMacユーザー全員がそれやってくれるならいいけどね。複数人いるなら、各自に任せるよりは一括管理したほうが安全かもよ。

6
lmf4lol
約22時間前

マジか!なんで今まで知らなかったんだろ。プロのソフトウェア開発者として20年やってきて、.gitignore しか使ったことなかったよ…。

自分に関連するだけの除外設定で .gitignore が汚れるのを避ける方法なんてないのか、一度も自分に問いかけたことがなかったことに気づかされた。ただ、目の前にある世界をそのまま受け入れてただけだったんだな…

今日、少しだけ世界が良くなったよ :-)

7
hungryhobbit
約22時間前

面白い記事だけど、Gitの個人的なお気に入り「ほぼ無視(almost ignore)」機能である .gitattributes が抜けてるよ。

これは特定のファイルのdiffを無視するように指定できる機能だね。例えばNodeプロジェクトの package-lock.json はGitの観点からすると完全にノイズなんだ(ライブラリのバージョンが大量に書かれていてdiffが膨大になるし、人間が読むべき情報は別の package.json にある)。

プロジェクトのルートに .gitattributes を置いて、こう書くだけでいい。

package-lock.json -diff

これでファイル自体はステージ/コミットされる(それはそれで必要だし)んだけど、git diff を打ったときにあの無意味な大量のdiffが表示されなくなるよ。

8
leleat
約20時間前

すでにトラッキングされているファイルに対しては、こんなのもあるよ。

  git update-index --[no]-skip-worktree

ローカルでの実験には便利なんだけど、Gitの表立って見える機能じゃないからちょっと扱いが面倒なんだよね。自分で設定したことを忘れると、checkoutなんかの操作がブロックされたりするから要注意。

9
elyobo
約19時間前

関連して、自分が使っているエイリアスを貼っておくね。

  assume = update-index --assume-unchanged
  unassume = update-index --no-assume-unchanged
  assumed = "!git ls-files -v | grep ^h | cut -c 3-"
  unassumeall = "!git assumed | xargs git update-index --no-assume-unchanged"
  assumeall = "!git st -s | awk {'print $2'} | xargs git assume"
10
andrelaszlo
約19時間前

複数のリポジトリを含むプロジェクトディレクトリに対して、個別にGit設定を適用するためにエクスクルードファイルを使っている方法がこれ。

https://laszlo.nu/blog/project-level-git-config.html