.gitignore
はファイル全体を無視できますが、コーディング中に特定のコード行を無視する方法はありますか?
プロジェクトに同じデバッグ行を頻繁に繰り返し追加しますが、コミットする前にそれらを削除することを忘れないでください。コードの行をそのままにしておき、gitに無視させたいと思います。
これは、 git filters を使用して行う方法です。
<project root>/.gitattributes
(リポジトリにコミットされます)<project root>/.git/info/attributes
(リポジトリにコミットされません)*.rb filter=gitignore
、つまりすべての*.rb
ファイルでgitignore
という名前のフィルターを実行しますgitignore
:でgitconfig
フィルターを定義します$ git config --global filter.gitignore.clean "sed '/#gitignore$/'d"
、つまりこれらの行を削除します$ git config --global filter.gitignore.smudge cat
、つまり、リポジトリからファイルをプルするときに何もしませんノート:
もちろん、これはRubyファイルに適用され、行が#gitignore
で終わる場合に適用され、~/.gitconfig
でグローバルに適用されます。ただし、目的に応じてこれを変更します。
警告!!
これにより、作業ファイルはレポとは異なります(もちろん)。チェックアウトまたはリベースすると、これらの行が失われます!これらの行はチェックアウト、リベース、またはプルで繰り返し失われるため、このトリックは役に立たないように見えるかもしれませんが、それを利用するための特定のユースケースがあります。
ただgit stash save "proj1-debug"
フィルターが非アクティブのとき(gitconfig
などで一時的に無効にします)。これにより、これらの行が誤ってコミットされることを恐れずに、デバッグコードをいつでもコードにgit stash apply
'できます。
これらの問題に対処するための考えはありますが、もう一度実装してみます。
Gitフィルターとgitattributesについて言及してくれたRudiとjw013に感謝します。
Javaコードの作成でも同様の問題が発生しました。私の解決策は、コミットしたくないコードをマークアップしてから、マークアップを探すプリコミットフックを追加することでした。
#!/bin/bash
#
# This hook will look for code comments marked '//no-commit'
# - case-insensitive
# - dash is optional
# - there may be a space after the //
#
noCommitCount=$(git diff --no-ext-diff --cached | egrep -i --count "(@No|\/\/\s?no[ -]?)commit")
if [ "$noCommitCount" -ne "0" ]; then
echo "WARNING: You are attempting to commit changes which include a 'no-commit'."
echo "Please check the following files:"
git diff --no-ext-diff --cached --name-only -i -G"(@no|\/\/s?no-?)commit" | sed 's/^/ - /'
echo
echo "You can ignore this warning by running the commit command with '--no-verify'"
exit 1
fi