Tag Archives: git

git submoduleで特定のハッシュやタグでaddする

もともとsubmoduleは勝手に更新されたりしないので、普通にgit submodule addすると、そのときの最新状態に固定される。もっと古いものにしたいときは一旦addしてからsubmoduleのなかでgit checkout SOMETAG or HASHして、上のディレクトリでgit commitする。

実行イメージ

git cleanでいらないファイルを削除する

TLTR

git clean -Xi
または
git clean -Xid

便利コマンド -n

-nをつけるとドライランになって。実際には削除せず、何を削除するかを表示するだけなので確認するのに便利。

-X

.gitignoreで指定されているファイルを削除する。

警告がでる

clean.requireForceが設定されていなくてデフォルトでtrueになるので、もっとオプションが必要らしい。

  • -i: インタラクティブ、一個ずつ確認しながら削除する。
  • -f: clean.requireForceを無視して削除する。

-irmなどと違ってすごく高機能。

危険領域

-X.gitignoreで指定されているファイルを削除するので一番安全と思われる。-Xをつけないとgit statusで表示されるようなuntrackedなファイルも削除する。しかし前述のようにclean.requireForcefalseでない限りは追加オプションが必要になるので危険性は弱くなっている。-fだけで実行すると大事なファイルが削除されてしまう可能性が高い。しかし-dをつけないとディレクトリは削除されないようになっている。-iが高機能なので-fは一切使わないほうがいいだろう。

ファイルの特定の行を変更したコミットの差分を見る

git blame

これは、funcs.cというファイルの814行目から10行の部分を変更したのは誰なのかを表示する。

git log -L

git log -Lを使うには1.8.4以上が必要らしい。

コミットメッセージも表示してくれる。
変更が81f15c2b0d6e9eaf524ff7bab37426c21af75fb7によることは分かったので、これと一個前との差分を見る。

差分

これでコミット全体の差分が見れた。

この差分をgithubで見るにはhttps://github.com/file/file/commit/81f15みたいなURLになる。

参考

https://stackoverflow.com/a/19757493 made by Matt McClure CC BY-SA 3.0

VScodeのシェルをmsys2に変える

変更の範囲

プロジェクト(フォルダ)ごとに設定するか、ユーザ設定にするか選べる。プロジェクトごとに設定する場合は、プロジェクトフォルダの.vscode/settings.jsonを編集する。ユーザ設定の場合は、[Ctrl]+[Shift]+Pで「Open Settings (JSON)」を選ぶと編集できる。(ただしプロジェクトごとの設定でうまく動かなかったのでここでは非推奨)

以下の内容を記述。(追加する場合は外側のカッコを無視した中身だけを追加)

bash.exeのパスは自分の環境に合わせる。バックスラッシュはエスケープするので2つ書く。環境変数CHERE_INVOKINGはディレクトリをホームに移動しない指示。MSYSTEMはMINGのツールチェインらしい。mingを使わなければ関係ないはず。

これを記述したら、プロジェクトを2回開き直す(最初に確認が行われるため)。

msys2のgitはうまく動かなかった(パス関係?)ので、オフィシャルのgitなら動くのでそれを設定

しかもmsys2はもともとのWindowsのパスを無視してしまうのでnodeやnpmが使えないのでVSCodeで好きなシェルを起動できる拡張の「Shell launcher」をインストール。設定で以下を追加。

ここにあるパスは有効なものしか機能しない。cmdやPowerShell実際の値はVSCodeが設定する値(”terminal.integrated.shell.windows”)から確認できる。以下の動画を参照。

VSCodeでcmdやpowershellのパスを確認

ショートカットキーを登録

Files –> Preferences –> Keyboard Shortcutsから登録。

VSCodeでショートカットキーを登録

またはユーザ設定のフォルダにあるkeybindings.json(C:\Users\ユーザー\AppData\Roaming\Code\User\settings.json)を以下のようにする。

git がremote: aborting due to possible repository corruption on the remote side.

レポジトリに大きいファイルがあるか、レポジトリ自体が大きいとこうなるようだ。1つの解決法は少しずつfetchする。

これはレポジトリを全部持ってくる場合だが、その必要がなければ最初の–depth 1だけでもpushなどはできる。