大家好,今天給大家介紹一個隱藏的功能——搜尋。
我們在寫程式碼的時候經常遇到的一種情況就是,我們想要知道某一個函式是怎麼定義的,這樣我們才能知道該如何呼叫它。如果程式碼少的話我們當然可以自己人肉查詢,但是如果程式碼量很大的話,人肉查詢顯然就不行了。如果使用IDE的話,現在的IDE當中當然一般都繼承了這個功能,如果你像我一樣喜歡編輯器而不喜歡IDE的話,可能就會麻煩一點。
這個時候我們可以使用git grep命令幫助我們找到程式碼所在的位置。
程式碼搜尋比如現在我們在一個Python倉庫當中,想要知道get_yaml_config這個函式究竟在哪裡出現過,這樣我們就可以找到它的定義和引數了。
這個時候我們可以在命令列執行:
git grep get_yaml_config
之後我們會進入一個vim介面,當中會展示出這個函式所有出現過的位置。
很明顯我們可以知道,其中有def出現的是函式定義的地方,那麼我們只需要到這個檔案當中去尋找這一行程式碼就可以了。
這個就是git grep的基礎用法,你可能還是會說這依然很不方便啊,雖然幫助我們找到了具體的檔案,但是如果這個檔案非常大呢,我們不還是要一行一行程式碼地翻找嗎?有沒有辦法把具體的位置也展示出來呢?
當然是有的,也很簡單,我們只需要加上-n這個引數就行了。
git grep -n get_yaml_config
這下我們就發現把行號也帶上了。
當然它的功能不止這些,有時候我們只是找到了具體的位置不頂用,我們還會想知道這個發生呼叫的函式是什麼。這我們一樣可以做到,也只需要加上一個-p引數就可以了。
看起來結果好像差不多,但是它把每一個呼叫位置所處的函式都展示出來了。
不僅如此,git grep還可以查詢之前某一個版本的程式碼。如果我們使用IDE的查詢工具的話,我們會需要先checkout到之前的版本,然後進行查詢,而使用git grep則可以省略這個步驟。
使用的方法也非常簡單,我們只需要在最後加上git commitid或者是tag號就可以了。
git grep -n -p get_yaml_config 9caf1ecda6
日誌搜尋
有時候我們不希望知道這個函式在哪裡,而是希望知道它是什麼時候加上去的,或者是什麼時候產生了變更。這時候我們依然可以使用git,它不僅可以搜尋程式碼還可以搜尋日誌。
使用的方法也很簡單,我們使用git log命令,透過加上引數-L以及:get_yaml_config:generate_create_sql.py。它表示的是搜尋generate_create_sql.py這個檔案下get_yaml_config這個函式的變更。
git log -L :get_yaml_config:generate_create_sql.py
這樣我們得到的結果會是:
它展示出了程式碼變更的時間,以及對應的commit,甚至還展示出了對應的具體程式碼以及修改人。可以說是非常非常清晰了,這非常方便我們劃定清楚責任,是誰的鍋git log看一下就知道了。
剛開始使用估計會不太適應,覺得要敲命令很麻煩,但是用多了之後會發現git查詢的速度非常快,而且消耗的記憶體也少。像是IDE打開了的檔案數量多了之後,想要進行查詢非常慢,需要等很久,這個時候就可以試試使用git進行代替,體驗真的不太一樣,強烈推薦一下。