2012-07-18 39 views
5

Vì vậy, tôi đã thừa kế một cơ sở mã khá lớn từ một số nhà phát triển khác, với mã được lưu trữ trong nhiều kho lưu trữ git khác nhau.grep cho nội dung trong nhiều kho lưu trữ git

Đôi khi, thật khó để biết dự án nào là một đoạn mã cụ thể có thể nằm trong hoặc nếu đoạn mã đó tồn tại trong git.

Điều tôi muốn có thể làm là grep TẤT CẢ các dự án cho một số đoạn văn bản cụ thể.

Tôi đang sử dụng gitosis, vì vậy tất cả các kho git được lưu trữ trong/home/git/kho với một cấu trúc như:

/home/git/repositories 
    |- project1 
    |- HEAD 
    |- branches 
    |- config 
    |- description 
    |- hooks 
    |- info 
    |- objects 
    |- refs 
    |- project2 
    |- ... 

Tôi đã thử làm một grep đệ quy cho các công cụ trong các thư mục đối tượng như thế này:

grep -Hr "text" /home/git/repositories/*/objects 

Điều này không hoạt động như tôi dự định, vì các đối tượng được lưu trữ ở định dạng tùy chỉnh của git.

Làm gì?

Trả lời

5

Sử dụng git grep với một ref hoặc --no-index:

cd /home/git/repositories 
for i in *; do (cd $i; git grep text HEAD); done 
+0

Nếu bạn đang tìm kiếm một đoạn cụ thể của mã, như trái ngược với văn bản trong thư cam kết, bạn cũng có thể sử dụng 'git log -S' "'tại đây. Nó được gọi là [tìm kiếm cuốc.] (Http://gitfu.wordpress.com/2008/06/03/the-pickaxe-finding-changes-was-never-easier/) – Christopher

+0

vấn đề là các thư mục trong/home/git/kho không thực sự git cây làm việc để git grep không hoạt động trên chúng. – jdeuce

+0

@python_noob git grep làm việc trong một repo trần nếu bạn chỉ định một ref (ví dụ, HEAD) –

-1

Sử dụng multi. Nó được viết riêng cho git grep thông qua nhiều kho lưu trữ cùng một lúc.

$ ls 
vim spring-framework gradle phantomjs 
$ multi -i "fantastic" 
vim 
==================================================== 
runtime/doc/quotes.txt:VIM 4.5 is really a fantastic editor. It has sooooo many features and more 
runtime/doc/quotes.txt:fantastic it is! (Tony Nugent, Australia) 
spring-framework 
==================================================== 
gradle 
==================================================== 
subprojects/docs/src/docs/userguide/ant.xml:  simply by relying on Groovy, and the fantastic <literal>AntBuilder</literal>. 
subprojects/docs/src/docs/userguide/buildScriptsTutorial.xml:   relying on Groovy. Groovy is shipped with the fantastic <literal>AntBuilder</literal>. Using Ant tasks 
subprojects/docs/src/docs/userguide/ideSupport.xml:   if you do this you have a fantastic IDE support for developing Gradle scripts. Of course if you use 
phantomjs 
==================================================== 
test/ghostdriver-test/fixtures/common/macbeth.html:<A NAME=1.3.55>Are ye fantastical, or that indeed</A><br> 
test/ghostdriver-test/fixtures/common/macbeth.html:<A NAME=1.3.148>My thought, whose murder yet is but fantastical,</A><br> 
1

Tôi biết câu hỏi cũ nhưng nếu bạn sử dụng dòng lệnh, bạn có thể thêm video này vào bash_profile hoặc bashrc

ggrep() { 
    find . -type d -name .git | while read line; do 
     (
     cd $line/.. 
     cwd=$(pwd) 
     echo "$(tput setaf 2)$cwd$(tput sgr0)" 
     git grep -n "[email protected]" 
     ) 
    done 
} 

ý chính cơ bản của chức năng trên là để tìm kiếm tất cả các thư mục có chứa .git và đầu ra đầu tiên thư mục đó sau đó gửi cùng với số dòng nơi mã thông báo đó xuất hiện

sau đó truy cập /home/git/repositories và tìm kiếm bằng cách sử dụng

ggrep "InvalidToken"

nó sẽ ra như thế này

/home/git/org/repo1 
/home/git/org/repo2 
/home/git/org/repo3 
/home/git/org/repo3 
lib/v3/Utility.pm:59:   code    => 'InvalidToken', 
lib/v3/Utility.pm:142:  code    => "InvalidToken", 

bạn cũng có thể vượt qua những lá cờ như ggrep -i "search" (đối với trường hợp tìm kiếm không nhạy cảm)

Các vấn đề liên quan