git grep概要
6529 ワード
転載:http://blog.csdn.net/hudashi/article/details/7664488
Git Gepを使って検索します.
Gitライブラリの中にある文字をGIt grepコマンドで検索するのは便利です.もちろん、unixの下にある「grep」コマンドで検索することもできますが、「git grep」コマンドは履歴ファイルに署名しなくてもいいです.検索できます.
例えば、git.gitという倉庫の関数を使うところを見てください.次のコマンドを実行してもいいです.
行番号を表示するには、'-n'オプションを追加できます.
ファイル名だけを表示したいなら、'--name-onley'を使ってもいいです.
私達は'-c'のオプションを使って、各ファイルの中に何行の整合内容があるか確認できます.
今、もし私達がgit倉庫の中の特定のバージョンの内容を検索するなら、次のように命令行の末尾にサインを入れることができます.
私たちもいくつかの検索条件を組み合わせることができます.次のコマンドは私たちが倉庫のどこで「SORT_DIRENT」を定義したかを調べることです.
私は「条件検索操作」や「条件検索操作」を行うことができます.
一つの条件(term)に合致し、二つの条件(terms)の一つに該当するファイル行を検索することもできます.例えば、名前に「PATH」または「MAX」が含まれている定数の定義を見つけます.
Git Gepを使って検索します.
Gitライブラリの中にある文字をGIt grepコマンドで検索するのは便利です.もちろん、unixの下にある「grep」コマンドで検索することもできますが、「git grep」コマンドは履歴ファイルに署名しなくてもいいです.検索できます.
例えば、git.gitという倉庫の関数を使うところを見てください.次のコマンドを実行してもいいです.
$ git grep xmmap config.c: contents = xmmap(NULL, contents_sz, PROT_READ, diff.c: s->data = xmmap(NULL, s->size, PROT_READ, MAP_PRIVATE, fd, 0); git-compat-util.h:extern void *xmmap(void *start, size_t length, int prot, int fla read-cache.c: mmap = xmmap(NULL, mmap_size, PROT_READ | PROT_WRITE, MAP_PRIVATE, refs.c: log_mapped = xmmap(NULL, mapsz, PROT_READ, MAP_PRIVATE, logfd, 0); sha1_file.c: map = xmmap(NULL, mapsz, PROT_READ, MAP_PRIVATE, fd, 0); sha1_file.c: idx_map = xmmap(NULL, idx_size, PROT_READ, MAP_PRIVATE, fd, 0); sha1_file.c: win->base = xmmap(NULL, win->len, sha1_file.c: map = xmmap(NULL, *size, PROT_READ, MAP_PRIVATE, f sha1_file.c: buf = xmmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, 0); wrapper.c:void *xmmap(void *start, size_t length,
行番号を表示するには、'-n'オプションを追加できます.
$>git grep -n xmmap config.c:1016: contents = xmmap(NULL, contents_sz, PROT_READ, diff.c:1833: s->data = xmmap(NULL, s->size, PROT_READ, MAP_PRIVATE, fd, git-compat-util.h:291:extern void *xmmap(void *start, size_t length, int prot, int read-cache.c:1178: mmap = xmmap(NULL, mmap_size, PROT_READ | PROT_WRITE, MAP_ refs.c:1345: log_mapped = xmmap(NULL, mapsz, PROT_READ, MAP_PRIVATE, logfd, 0); sha1_file.c:377: map = xmmap(NULL, mapsz, PROT_READ, MAP_PRIVATE, fd, 0); sha1_file.c:479: idx_map = xmmap(NULL, idx_size, PROT_READ, MAP_PRIVATE, fd sha1_file.c:780: win->base = xmmap(NULL, win->len, sha1_file.c:1076: map = xmmap(NULL, *size, PROT_READ, MAP_PR sha1_file.c:2393: buf = xmmap(NULL, size, PROT_READ, MAP_PRIVATE, fd wrapper.c:89:void *xmmap(void *start, size_t length,
ファイル名だけを表示したいなら、'--name-onley'を使ってもいいです.
$>git grep --name-only xmmap config.c diff.c git-compat-util.h read-cache.c refs.c sha1_file.c wrapper.c
私達は'-c'のオプションを使って、各ファイルの中に何行の整合内容があるか確認できます.
$>git grep -c xmmap config.c:1
diff.c:1 git-compat-util.h:1 read-cache.c:1 refs.c:1 sha1_file.c:5 wrapper.c:1
今、もし私達がgit倉庫の中の特定のバージョンの内容を検索するなら、次のように命令行の末尾にサインを入れることができます.
$ git grep xmmap v1.5.0 v1.5.0:config.c: contents = xmmap(NULL, st.st_size, PROT_READ, v1.5.0:diff.c: s->data = xmmap(NULL, s->size, PROT_READ, MAP_PRIVATE, fd, v1.5.0:git-compat-util.h:static inline void *xmmap(void *start, size_t length, v1.5.0:read-cache.c: cache_mmap = xmmap(NULL, cache_mmap_size, v1.5.0:refs.c: log_mapped = xmmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, logfd v1.5.0:sha1_file.c: map = xmmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, v1.5.0:sha1_file.c: idx_map = xmmap(NULL, idx_size, PROT_READ, MAP_PRIVATE, fd v1.5.0:sha1_file.c: win->base = xmmap(NULL, win->len, v1.5.0:sha1_file.c: map = xmmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, v1.5.0:sha1_file.c: buf = xmmap(NULL, size, PROT_READ, MAP_PRIVATE, fd
「1.5.0版」と現在のバージョンの違いが見られます.私たちもいくつかの検索条件を組み合わせることができます.次のコマンドは私たちが倉庫のどこで「SORT_DIRENT」を定義したかを調べることです.
$ git grep -e '#define' --and -e SORT_DIRENT builtin-fsck.c:#define SORT_DIRENT 0 builtin-fsck.c:#define SORT_DIRENT 1
私は「条件検索操作」や「条件検索操作」を行うことができます.
$ git grep --all-match -e '#define' -e SORT_DIRENT builtin-fsck.c:#define REACHABLE 0x0001 builtin-fsck.c:#define SEEN 0x0002 builtin-fsck.c:#define ERROR_OBJECT 01 builtin-fsck.c:#define ERROR_REACHABLE 02 builtin-fsck.c:#define SORT_DIRENT 0 builtin-fsck.c:#define DIRENT_SORT_HINT(de) 0 builtin-fsck.c:#define SORT_DIRENT 1 builtin-fsck.c:#define DIRENT_SORT_HINT(de) ((de)->d_ino) builtin-fsck.c:#define MAX_SHA1_ENTRIES (1024) builtin-fsck.c: if (SORT_DIRENT)
一つの条件(term)に合致し、二つの条件(terms)の一つに該当するファイル行を検索することもできます.例えば、名前に「PATH」または「MAX」が含まれている定数の定義を見つけます.
$ git grep -e '#define' --and \( -e PATH -e MAX \) abspath.c:#define MAXDEPTH 5 builtin-blame.c:#define MORE_THAN_ONE_PATH (1u<<13) builtin-blame.c:#define MAXSG 16 builtin-describe.c:#define MAX_TAGS (FLAG_BITS - 1) builtin-fetch-pack.c:#define MAX_IN_VAIN 256 builtin-fsck.c:#define MAX_SHA1_ENTRIES (1024)