2013-11-29 4 views
1

Я новичок в git hooks. Я не могу понять ниже крюк pre-commit. Может ли кто-нибудь сказать мне, как это работает, пожалуйста. Вот мое сомнение в том, как grep будет происходить в файлах с фиксацией, поскольку мы не берем эти файлы нигде. Извините, если задаю неправильный вопрос, но, пожалуйста, помогите мне в понимании GIT крючки ..Git pre-commit hook

#!/usr/bin/env ruby 
if `grep -rls "require 'ruby-debug'; raise" *` != "" 
    puts "You twit, you've left a debugger in!" 
    exit(1) 
end 
+0

Это забавное сообщение, но почему бы не написать его в оболочке? Мне кажется более естественным использовать grep в оболочке. – squiguy

+0

Mine - это рубиновый фон. Я не гибкий с командами оболочки. Есть ли способ изучить основы git-крюков ?. Если да, пожалуйста, помогите мне. – user2986573

+0

Гит-крючки могут быть написаны на любом языке, код выхода - это то, что важно. Если вам удобнее искать файлы для текста с помощью Ruby, продолжайте. Вы можете «man githook» прочитать информацию из этого руководства. Это отличный ресурс. Код довольно простой Ruby. Он гласит: «Если системный вызов grep-результата пуст, распечатайте сообщение и выйдите с кодом выхода 1». – vgoff

ответ

4

Вы должны достаточно Grep индексированных файлов (кэше), вместо вашего рабочего дерева.
В противном случае ваш grep мог бы найти отладочные инструкции в файлах (или части файлов), которые не являются частью следующего коммита.

См «Git pre-commit hook : changed/added files„:

git diff --cached --name-only --diff-filter=ACM 

Как объяснен в“Why You Need a Git Pre-Commit Hook and Why Most Are Wrong»:

Большинство теста на любые файлы в настоящее время на диске, а не то, что находится в промежуточной области (файлы на самом деле совершается).

approach if that hook немного отличается: он запускает каждую незавершенную работу перед поиском файлов.

def main(all_files): 
    # Stash any changes to the working tree that are not going to be committed 
    subprocess.call(['git', 'stash', '-u', '--keep-index'], stdout=subprocess.PIPE) 
Смежные вопросы