.gitignore
ファイル全体を無視できますが、コーディング中に特定のコード行を無視する方法はありますか?
プロジェクトに同じデバッグ行を頻繁に繰り返し追加しますが、コミットする前にそれらを削除することを忘れないでください。コード内の行を保持し、git にそれらを無視させたいと思います。
これは、 gitフィルターを使用してそれを行う方法です:
<project root>/.gitattributes
(レポにコミットされます)<project root>/.git/info/attributes
(レポにはコミットされません)*.rb filter=gitignore
gitignore
、つまり、すべての*.rb
ファイルに対して指定されたフィルターを実行します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コードを書く際にも同様の問題がありました。私の解決策は、コミットしたくないコードをマークアップしてから、マークアップを探す pre-commit フックを追加することでした。
#!/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