メインコンテンツへスキップ

コアGit開発者が実践するGitの設定法とは

·3 分
2025/02 Git プログラミング 開発者 設定 ツール

コアGit開発者が実践するGitの設定法とは

引用元:https://news.ycombinator.com/item?id=43169435

jelder 2025-02-25T13:26:18

自分のお気に入りのエイリアスは、git outで、未プッシュのコミットをリストするだけなんだ。いつも使ってるよ。
自分の中では、いつも「The Terminator」の声で聞いてる。

schacon 2025-02-25T13:51:24

いいエイリアスがあったから、最適なエイリアスについての記事をまた書くべきだな。アーノルドの声で言いたいからやりたいんだ。今はgit to-da-choppaがやりたい。

theshrike79 2025-02-25T14:47:40

それは単にこうできるかもね。
git add . && git commit -a -m ”git to da choppa” && git push –force
急いで『ダ・チョッパ』に行く必要がある時はこれに限る。

sandreas 2025-02-25T21:37:54

自分はqpを使ってquick-pushにしてる。関数を使ってコメントを付けるんだ。
# git alias
qp = ”!f() { git add . && git commit -m \”$1\” && git push; }; f”
# 使用法
git qp ”好きなコメント”

JohnKemeny 2025-02-25T22:40:32

自分はほとんどgit add .はやらない。git add -uの方が良いと思う。知られているファイルだけをステージするから。

sedatk 2025-02-25T21:27:10

それはMercurialに標準で付いてくるやつだよ。(hg outhg outgoing)

_kb 2025-02-25T10:20:32

みんなが自分の選択を考えてる間に(少なくとも~/.gitconfigのことについて)、deltaをGit CLIの仲間として強くおすすめするよ。
[1]: https://dandavison.github.io/delta/

leonheld 2025-02-25T11:28:41

deltaを使ってたけど、普通の差分表示に戻ってきたよ。決して悪いわけじゃないんだけど、ずっと差分をコピーしてるから、そのビジュアルが自分のワークフローに合わないんだ。端末が小さいとちょっと見づらいし。でも、本当に良いソフトだから、読むみんなにも試してみてほしい。

JadedBlueEyes 2025-02-25T11:39:31

確か、出力をxclipにパイプしたり、ファイルにリダイレクトすると、元の差分フォーマットに戻るんだよね。便利ではないけど、そこに関してはまだ使える。

leonheld 2025-02-25T11:59:16

それは知らなかった!それさえあれば大丈夫そうだ。ありがとう、本当に!

mplanchard 2025-02-25T12:35:47

ちゃんとしたツールなら、出力がパイプかどうかを検出してフォーマットを無効にするべきだよね。’git’だけじゃなくて、’ripgrep’や’jq’もちゃんとやってると思う。

knome 2025-02-25T13:26:56

むしろ出力がターミナルかどうかを検出して、色を有効にすべきだよね。

pca006132 2025-02-25T12:26:56

これ知らなかった!いつも出力をパイプするときは’–no-ext-diff’ってタイプしてたんだ。サンキュー!

ramses0 2025-02-25T12:29:38

’… | cat’はたまに便利だし、どの環境でも使えるよね。

lucasoshiro 2025-02-25T13:44:02

’git -c core.pager=less’を使ってるけど、パイプの方が簡潔かも…ちょっと試してみる。

rusk 2025-02-25T13:16:54

catを通すのはうまくいくはずだよ。

PhilippGille 2025-02-25T11:40:33

フォーマットなしでコピーするのはただの’ | pbcopy’でできるんじゃない?

genewitch 2025-02-25T14:11:43

GeminiにHNコメントを解読してもらってるけど、’pbcopy’ってmacOSだけ?ちなみに、Geminiはウェブサイトの青い色についての質問はしたくないらしい。

chuckadams 2025-02-25T15:26:40

そうだよ、’pbcopy’はmacのやつ。Linuxでは環境によって色々なコマンドがある。’xsel’、’xclip’、’wl-clipboard’や’wlclip’とかね。WindowsではPowerShellの’Get-Clipboard’と’Set-Clipboard’、cmd.exeは’ws’で問題解決できるよ。

jeeva 2025-02-27T10:32:55

最近のWindowsにはclip(.exe)ってのがどれにもあるみたいだね。

もっとコメントを表示(1)
ramses0 2025-02-26T01:34:28

Linuxでは、~/bin/pbcopyという自作のコマンド作ったんだけど、Linuxのコマンドは覚えにくいから”pbcopy”って名前にしたよ。

mplanchard 2025-02-25T12:34:04

Emacs使いなら、同じ作者のmagit-deltaパッケージでdeltaをmagitと一緒に使えるよ。
さらに、vscodeとの使い方もドキュメントに載ってるみたい。

schacon 2025-02-25T10:41:14

これ追加したかったんだけど、バニラgitで使えるグローバルな推奨が欲しかったんだ。deltaはいいけどね。

chungy 2025-02-25T09:56:43

自分の~/.gitconfigはこんな感じだよ。
[alias]のエイリアスや設定が色々書いてあるんだ。

gosub100 2025-02-25T22:34:38

エイリアスでキーストローク減るの?多くのシェルには補完機能があるのに、結局”git”って打たなきゃいけないじゃん。
完全にシェルに埋め込むようなエイリアスが欲しいな。

cillian64 2025-02-27T13:34:42

gitに関しては多くのシェルエイリアス作ってるよ。
ggit statusdgit diffgadgit addみたいな感じ。

chungy 2025-02-25T09:58:39

短縮エイリアスはcvsやsvnから来たんだ。
常にローカルタイムゾーンでgit logを表示したり、非ffマージをしないように設定してるんだ。

schacon 2025-02-25T10:04:55

エイリアスは意図的に作ってないんだ。
でも、個々の設定としてエイリアスはいいよね。

feelamee 2025-02-25T13:33:24

俺はもっと楽な方法が欲しいな。
gitを何回も打たなくてよくなるようなgitシェルがあればいいのに。

desperatecuban 2025-02-25T14:25:12

GitのTUIクライアント(tigやlazygitなど)はそういう風にキー操作で動くんじゃないの?

feelamee 2025-02-25T21:17:10

うん、でも俺はstatusやstash、checkout、commitは手書きの方が好きかな。考えれば考えるほど、そういう機能に意味を感じなくなってきたな。

tome 2025-02-25T11:19:51

(z)diff3の使用を勧める意見には賛成。この記事ではその重要性が過小評価されている気がする。3-way diffがなきゃ解決できない衝突があるからさ。標準のスタイルでは、衝突を同じ場所に追加するのと削除するのが区別つかないから、基準が見えないと判断が難しいんだ。詳しくはこっちに書いたよ:
https://stackoverflow.com/a/63739655/997606
rebaseやmergeの衝突解決をメカニカルにするやり方も書いた:
https://h2.jaguarpaw.co.uk/posts/git-rebase-conflicts/

qbonnard 2025-02-25T10:32:23

関連情報: Julia Evansによる人気のGit設定オプション[0]
https://news.ycombinator.com/item?id=39400352

conaclos 2025-02-25T09:31:19

俺が好きな追加オプション:
[apply]
# 末尾の空白を削除
whitespace = fix
[color ”diff”]
whitespace = red reverse
[diff]
colorMovedWS = allow-indentation-change
[format]
pretty = fuller
[log]
date = iso
[pull]
ff = only

schacon 2025-02-25T09:38:15

俺もlog.date isoを入れようかと思ってた、これいいよね。

opello 2025-02-25T12:53:26

俺もcolor.diff.whitespace ”red reverse”を使ってる。diff.wsErrorHighlight allも必要に感じたことがあったけど、今はどうなのかよくわからん。

JulianWasTaken 2025-02-25T12:22:46

俺の設定はここにあるよ[1]。基本的にはすでにここに書かれてる設定は大体入ってるけど、column uiは俺は好みじゃないだけかな。お互いにエイリアスのコツをやり取りするのは良いかもと思ったから、リンクをシェアしてみるよ。
[1]:
https://github.com/Julian/dotfiles/blob/main/.config/git/con

sandreas 2025-02-25T22:04:01

なんでコミット署名がここに入ってないのか不思議だな。今のSSH鍵で簡単にできるのに。
[user]
name = xyz
email = xyz@domain.com
signingkey = ~/.ssh/id_algorithm.pub
[commit]
gpgsign = true
[tag]
gpgsign = true
[gpg]
format = ssh
# 許可される署名者を制限する
# echo ”$(git config –get user.email) namespaces=\”git\” $(cat ~/.ssh/id_*.pub)” » ~/.git_allowed_signers
[gpg ”ssh”]
allowedSignersFile = ~/git_allowed_signers
GitHubではSSH鍵を認証だけでなく署名にも使えるよ。残念ながら鍵を2回追加する必要があるけど、一度やっとくとコミット内の『unverified』ラベルが消える。

ajross 2025-02-25T14:48:29

個人的にはGitのデフォルトの動作はリモートのリファレンスをリモートにできるだけ近づけるべきだと思うんだ。消えていったものはプルーンするべき。ただ、それはダメだね。リモートの不要なデータは結構消えてることが多いし、いつ必要になるかわからないからね。特に古いGitHubのプルリクエストはすぐにバックエンドでガーベジコレクションされることが多いから、リフログを掘り返して昔の作業を見つけることがよくある。データを消すときは、必要ないかわからないものは消さない方が賢明だし、手動で行うべきだよ。

cassepipe 2025-02-25T13:21:18

gitが好きなpagerを使えるってのが分かったから、batに設定したぜ。 core.pagerをbatにしてる。

もっとコメントを表示(2)
lucasoshiro 2025-02-25T13:41:57

deltaっていうのでも同じことができるんだけど、.gitconfigに追加オプションを入れられるよ。

oneeyedpigeon 2025-02-25T13:53:43

>「これをGIT_PAGER環境変数で設定することに比べてメリットはあるの?」」環境変数のPAGERがgitで効かないのは変だね。

lucasoshiro 2025-02-25T13:58:40

>「その環境変数は使ったことないけど、gitの設定を一つのファイルにまとめて、他のマシンでも再利用できるのが利点だよ。」」ローカルに設定すれば、特定のリポジトリだけの設定もできて便利。

rowanseymour 2025-02-25T14:16:17

>「最適な設定が合意されてからデフォルトを更新してほしい。」」未来に変わっても気づかず古い設定のままだと不安になるね。

neals 2025-02-25T09:23:40

vscode使いの私にはどれくらい役立つのかな? コマンドライン見るのもあまりないし、あったとしてもトラブルだらけで…

juancroldan 2025-02-25T12:15:55

VSCodeのgitインターフェースは結構パワフルで、99.9%のアクションはカバーされてるよ。マージやスタッシングもできるし。ただ、diffアルゴリズムを変えるのは役立つこともあるかも。

lucasoshiro 2025-02-25T13:53:09

>「gitを使うなら、少しずつCLIに慣れるのがいい。」」初心者向けではないけど、GUIツールじゃ隠れた部分も見えるから、より複雑なことに対応できるようになるよ。

jbverschoor 2025-02-25T09:32:46

GUIに何の問題があるの?Gitでは特にいいと思うよ。プロセスは素早くやる必要はなくて、しっかり見直して選ぶことが大事。グラフィカルな差分ビューアはすごくいいしね。

pfg_ 2025-02-25T11:20:17

マージの時にconflictstyleをdiff3かzdiff3に設定すると、体験がすごく良くなるよ。

vlovich123 2025-02-25T14:07:03

kdiff3を使ってるよ。ほとんどのマージコンフリクトを自動で解決してくれるし、間違ったこともほぼないよ。解決できないときも行の整列がいいから、BeyondCompareとかのごちゃごちゃしたやつより好き。

jeffwass 2025-02-25T09:29:02

もちろん、あれに対してxkcdがあるってことだよね:
https://xkcd.com/1597/

eastbound 2025-02-25T09:58:13

XKCDを作るべきだね。“GitクライアントGUIは常にn+1ある”って。新しい社員が来ると毎回新しいGit UIを提案してくるんだよね。

tex0 2025-02-25T12:52:07

多分、Gitは普通のユーザーには難しすぎるんだと思う(自分も含めて)。

ajross 2025-02-25T14:54:31

>多分、Gitは普通のユーザーには難しすぎるんだと思う(自分も含めて)。
ならvscodeのラッパーを使うか、好きなやつを使えばいいさ。人は“Git”が難しいって言うけど、本当はそのプロジェクトの膨大な変更を分割・リファクタリングする問題とかが難しいんだよね。

schacon 2025-02-25T09:44:02

もちろん、GitButler(https://gitbutler.com)を試してみるのもいいよ。結構いいGUIだし。

musikele 2025-02-25T13:08:14

自分はこのエイリアスを設定してるよ。
[alias]
  lg = log –color –graph –pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ –abbrev-commit –branches
色付きのコンパクトなコミットとブランチのグラフが見れます。

alex_smart 2025-02-25T13:21:58

自分はほぼ同じだけど、’—-graph’だけ外したバージョン。そうすることで、リニアビューかグラフビューのどちらかをそのフラグひとつで得られるのがいいね。

rstuart4133 2025-02-26T05:10:25

デフォルトはこれにすべきだと思う:>”git push –force-with-lease”
forceを使うのは危険だし、なぜGitがそれを実行する前に状態を確認させないのか謎。デフォルト設定は無理だから代わりにエイリアスを使ってる。記事については、設定にはあまりこだわりがなくて、特に良いと言われてる設定も特に気にならない。

account42 2025-02-26T11:47:50

残念なことに、–force-with-leaseは名前が長すぎる。危険な–forceに比べて。–forceを–force-with-leaseのように設定できたらいいのに。元の–forceの動作は人間には望ましくないし。

idoubtit 2025-02-25T09:45:35

役立つ記事だった。merge.conflictstyle = diff3に困ってたからzdiff3を知れてよかった。他にもfetch.prunepull.autoSetupRemoteを学んで、作業が少し楽になる。差分のプレフィックスは、パスを一つだけ.で表示させたいから、コンテキストのプレフィックスは要らない。

もっとコメントを表示(3)
account42 2025-02-26T11:40:15

>”# clearly makes git better”
に強く反対。新しいブランチをリモートに公開するのは、明示的な操作であるべき。git pushは必要なコマンドを教えてくれるから、別のランダムなコマンドを覚える必要はない。

rmccue 2025-02-25T13:35:25

Nitpickだけど、schaconさんの「ブランチのリスト」セクションで、branch.sortとcolumn.uiを初期オプションとして紹介してるけど、コマンドの順番が逆だからちょっと分かりにくい。

trebligdivad 2025-02-25T14:46:35

「Clearly better」とか他のいくつかは活用したけど、pruneオプションは使用してない。勝手に削除されるのが嫌だから。

Galanwe 2025-02-25T14:26:54

defaultBranch = masterを使ってる。明らかに文脈を誤解している言葉を禁止する流行の方が、有害で役に立たないと思う。

dark-star 2025-02-25T08:53:15

これすごいね。今まで自分のgit設定を深く調べなかったけど、いくつかは本当にクール。diffの変更は素晴らしいし、グローバルな.gitignoreファイルがない理由もずっと不思議だった。

schacon 2025-02-25T09:10:23

投稿で言ったけど、Gitは.config/git/ignoreも見るから、新しいパスを設定するよりこっちを使った方がいいかも。ただし、自分には隠れてても他人には見えるかもしれないから、その点は考慮した方がいいよ。自分はそのファイルにはあまり入れてないけどね。

fragmede 2025-02-25T09:30:05

Mac使ってるから、.DS_storeは入れてるよ。他の人に広める必要はないし。

zelphirkalt 2025-02-25T10:01:11

“.vscode”フォルダーも要らないと思う。VSCodeすら使ってない人もいるかもしれないし、皆が必要なわけじゃないのに入れてると日々の作業がうんざりする。このファイルをチェックインする理由がわからん。

tomnipotent 2025-02-25T10:29:27

“.vscode”のプロジェクト特有の設定ファイルは、全開発者が使うからよくある話だよ。VSCodeの設定は階層的で、合成される感じのものだからね。

mvanbaak 2025-02-25T11:50:33

“.editorconfig”を使えば、複数のエディターやIDEで動作するよ。詳しくはeditorconfig.orgを見てね。

zelphirkalt 2025-02-25T15:13:51

他の人はあまりやってないよね。ツールを片っ端から変える予定だったら、特定のIDEやエディターのファイルを入れるのはどうなんだろう?Gitレポにどれだけのものを蓄積するつもりなのか、疑問に思うよ。

tomnipotent 2025-02-25T22:15:25

>全員が同じツールを使うなら、それらのファイルは絶対にチェックインすべきだよ。何が問題なの?チームが共有することで得られるメリットを知らないんじゃないかな。

zelphirkalt 2025-02-26T23:11:00

皆がVS Codeだけではないから、特定のツールのものを入れるのはどうかと思うよ。異なるIDEやエディターの余分なものを持ってたら、レポも煩雑になっちゃうし。

whirlwin 2025-02-25T09:31:24

クリエイターたちの間で、ホームディレクトリを汚さないようにしようという動きもあるよ。投稿で言われたように、.config/git/ignoreが長期的にはスケーラブルなアプローチだと思う。

marcyb5st 2025-02-25T09:17:01

俺はdifftasticが好きだね。「最も読みやすく、理解しやすい差分ツール」だと思う。

schacon 2025-02-25T09:42:59

記事の終わりでさりげなく紹介したんだけど、
>「https://github.com/so-fancy/diff-so-fancy」
>「https://github.com/dandavison/delta」
も素晴らしいTUIの差分ツールなんだよね。

wh33zle 2025-02-25T10:44:00

最近知った中で一番クールなのが.git/info/exclude。
ローカルリポにファイルを無視させるのに便利で、.gitignoreを改造する必要がないんだ。
自分の.envrcやshell.nixを追加したいときに役立つよ。

chuckadams 2025-02-25T16:58:47

俺は.envrcとshell.nixをグローバルのgitignoreに追加してるよ。
docker-compose.override.ymlも同様にね。
無視されてるファイルでも強制的に追加すれば、今後はトラッキングされるから便利。

n_plus_1_acc 2025-02-25T09:42:23

俺は$XDG_CONFIG_HOME/git/ignoreも使ってるよ。

leslielurker 2025-02-25T09:53:58

こんな便利な機能があったなんて知らなかった!
いくつかはデフォルト設定になってほしいな。

記事一覧へ

海外テックの反応まとめ
著者
海外テックの反応まとめ
暇つぶしがてらに読むだけで海外のテックニュースに詳しくなれるまとめサイトです。