如何让git忽略个别行,即gitignore的特定行代码

.gitignore可以忽略整个文件,但有没有办法在编码时忽略特定的代码行?

我经常在一个项目中频繁地添加相同的debugging行,只有在提交之前必须记住删除它们。 我想只保留代码中的行,并让git无视它们。

这就是你可以用gitfilter来做的事情:

  1. 创build/打开gitattributes文件:
    • <project root> /。gitattributes(将会被提交回购)
      要么
    • <project root> /。git / info / attributes(不会被提交回购)
  2. 添加一行定义要过滤的文件:
    • *.rb filter=gitignore ,即在所有*.rb文件上运行名为gitignorefilter
  3. 在你的gitconfig定义gitignorefilter:
    • $ git config --global filter.gitignore.clean "sed '/#gitignore$/'d" ,即删除这些行
    • $ git config --global filter.gitignore.smudge cat ,即从回购库中拉取文件时什么也不做

笔记:
当然,这是针对ruby文件的,当一行以#gitignore时应用,在~/.gitconfig全局应用。 修改这个,但你需要你的目的。

警告!!
这使您的工作文件与回购(当然)不同。 任何退房或重新绑定将意味着这些线路将会丢失! 这个技巧可能看起来没有用处,因为这些行在检出,重定位或拉动时会反复丢失,但是我已经有了一个特定的用例来使用它。

只是git stash save "proj1-debug" 而filter是无效的 (只是暂时禁用它在gitconfig或东西)。 这样一来,我的debugging代码就可以随时将git stash apply到我的代码中,而不必担心这些行会被意外提交。

我有一个可能的想法来处理这些问题,但我会尝试在其他时间实施。

感谢Rudi和jw013提到gitfilter和gitattributes。

我有一个类似的问题,编写Java代码。 我的解决scheme是标记我不想提交的代码,然后添加一个预先提交的钩子来查找我的标记:

 #!/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