ラベル git の投稿を表示しています。 すべての投稿を表示
ラベル git の投稿を表示しています。 すべての投稿を表示

2021-10-01

git grep で特定のファイルを除外する方法

gitでファイルを検索する際、特定のファイルだけ除外したい場合がある。 たとえば、
  • ソースコード中の文言を探したいが、翻訳ファイルは除外したい
といった用途がある。

このようなとき、以下のように:(exclude)をつけると、exclude_patternに該当するファイルを除外できる。

git grep regex path... ':(exclude)exclude_pattern'

2020-12-15

Git-grepで特定のファイル名のファイルを除いて検索する方法

Git-grepを使うとレポジトリに登録されているファイルの中でgrepを行うことができる。 このとき、特定のファイルを除いて検索することができる。

例えば、拡張子が.iniのファイルを除いてScreenshotを探す場合、

$ git grep Screenshot UI ':!*.ini'
と、:!に続いて除外するファイル名を書く。

2020-04-04

Git-clone ストレージ容量の削減

Git-cloneをつかうと、すべての履歴がコピーされるため、時間がかかるし、ストレージ容量をかなり消費する。 クローン元に応じて2種類の方法により消費するストレージを削減することができる。

ハードリンク - 同じファイルシステムからクローンする場合

同じファイルシステムからクローンする場合、.git/objects下のデータをハードリンクで作成することで、時間・容量を減らせる。
git clone --local repository [directory]
objectsのファイルは、一度作成されると中身が書き換えられることはないので、特に使用する上で制約はないはずだ。 Git-fetchで新しいコミットを取り込んだ場合は、新しいファイルが作成されるようだ。 また、元のrepositoryでgit-gcを使った場合など、ハードリンクが切れて、消費する容量は大きくなる可能性がある。

浅いクローンをつくる - 外部のURLからクローンする場合

他のファイルシステムや外部のURL (git://...など) からクローンする場合、--depthオプションで浅いクローンを作ることで時間・容量を節約できる。
git clone --depth 1 repository [directory]
もしローカルのレポジトリからクローンする場合、file://を前につけないと、--depthオプションが無視されてそのままクローンが開始されてしまう。

浅いクローンでは、変更履歴が取得されないので、履歴を遡るような用途には使用できない。 もし後で履歴が必要になった場合、git fetchで取得することができる。

もともと、何かのプロジェクトのソースを探していたらgit clone --depthで取得する方法が書かれていてこの方法を見つけたのだが、 git clone --depthについては以下のサイトにわかりやすく書かれている。

2016-05-12

ひとつのaliasからgit/svn statusをcwdに応じて使い分ける

こういう記事を見つけたのだけど, zshでしか使えない. bash版を考えてみた.

st () 
{ 
    if git rev-parse --is-inside-work-tree &> /dev/null; then
        git status "$@";
        return $!;
    else
        svn status "$@";
        return $!;
    fi
}

もとネタでは, cdの度にコンテキストを切り替えているが, それだと, 毎回上位ディレクトリに検索に行く. NFSとかを使っていたり, なにか動作が不安定な環境でcdするのが心配だ. 一方で, この方法だと, stのときしか検索しないので, 安全だと思う.