Git
作成日時:2024-08-01以前
更新日時:2024-10-22
認証
認証は基本もたない。
sshかWebサーバーまたはサービス(GitHub)で行う。
Bareリポジトリ
- 作業ディレクトリを持たないリポジトリ
- 基本はサーバー側でpush対象
- 直接中身を見ようと思えば見られる
Git hooks
- .git/hooksにある
- 末尾のsampleを消せば動く
- 一覧は下記
- 新しく作成した場合、権限の付与を忘れずに
VS Codeで未ステージングコミットの確認ダイアログを再表示する
何もステージングしない状態でコミット操作を行うと、確認のダイアログが表示される。
「常時」を押下した場合、
それ以降何もステージングしない状態でコミット操作を行っても、このダイアログが表示されなくなる。
誤コミットを防ぐため、確認ダイアログが再度表示されるようにするには、
設定画面の検索バーに「smart commit」と入力し、「Git: Smart Commit」のチェックボックスをオフにする。
GitHub
リポジトリに関するドキュメント - GitHub Docs
これ読めばいい。
cloneの方法
git clone https://github.com/xxx/xxx.git
リポジトリへの権限付与
リポジトリへのアクセス権を持つTeamと人を管理する - GitHub Docs
setting > collaboratorsで表示。
git config
# 一覧
git config -l
git config --local -l
git config --local user.name name
git config --local user.email email
git merge -s ours branch_xxx
マージ元の内容を無視してマージできる。
マージ元の内容に価値は無いが、ブランチを消すと歴史も消えてしまうので
歴史だけを残したい場合に使う。
git checkout branchA
git merge -s ours branchB
マージ先を無視する場合はtheir戦略を使う。
git stash
作業の一時退避に。
作業中に別ブランチの作業をしなければならなくなった時とか。
# 変更内容の保存
git stash -u -m コメント
# 一覧表示
git stash list
# 退避した内容の適用
git stash apply stash@{0}
# 削除
git stash drop stash@{0}
# 全削除
git stash clear
git tag
# タグの作成
git tag -a name -m comment
# タグのチェックアウト
git checkout name
# タグの削除
git tag -d name
# グラフ参照
git log -all
hotfixブランチに加えた、mainにマージしないコミットとか。
タグを作ってブランチを削除したり。
ブランチは消えてもタグには残る。
git reset
# コミット取り消し
# HEADの位置を直前のコミットに戻す
git reset --soft HEAD^
# 念のため、状態を確認しとけ
git status
トランクベース
早いフィードバック。
featureブランチは結局ウォーターフォールと変わらない。
TODO:フローに関して
gitk
グラフィカルなリポジトリブラウザ。
リポジトリサイズが大きすぎるとクローンで死ぬ
GitでCloneしようとするとearly EOFエラーが発生した #Git - Qiita
sshだとうまくいくとか。
rebaseとmerge
- どっちもブランチの統合
- mergeは元ブランチの履歴が残り、マージコミットが作成される。
- mergeは複雑な競合時に
- rebaseは履歴を線形にする。そのブランチの履歴を片方のブランチの先頭に移動とか。
- rebaseは共有ブランチに使うな。
- rebaseは履歴を簡略化したい時に
一括でrebase/mergeするのが怖ければ、cherry-pickで順次適用。
テストしてmergeでいいかもしれない。
cherry-pickはxオプションで元のコミットハッシュをつけてくれる。
early EOFエラー
リポジトリが大きいと上記のエラーが出る。
対策としてはHTTPの通信制限を増やすか、cloneの量を減らす。
それでも駄目ならSSHでクローンする。