207

.gitignoreファイル全体を無視できますが、コーディング中に特定のコード行を無視する方法はありますか?

プロジェクトに同じデバッグ行を頻繁に繰り返し追加しますが、コミットする前にそれらを削除することを忘れないでください。コード内の行を保持し、git にそれらを無視させたいと思います。

4

2 に答える 2

173

これは、 gitフィルターを使用してそれを行う方法です:

  1. gitattributes ファイルを作成/開く:
    • <project root>/.gitattributes(レポにコミットされます)
      または
    • <project root>/.git/info/attributes(レポにはコミットされません)
  2. フィルタリングするファイルを定義する行を追加します。
    • *.rb filter=gitignoregitignore、つまり、すべての*.rbファイルに対して指定されたフィルターを実行します
  3. 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 に感謝します。

于 2013-04-26T20:47:17.183 に答える
51

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
于 2013-12-13T19:31:10.083 に答える