如何让git忽略个别行,即gitignore的特定行代码
.gitignore
可以忽略整个文件,但有没有办法在编码时忽略特定的代码行?
我经常在一个项目中频繁地添加相同的debugging行,只有在提交之前必须记住删除它们。 我想只保留代码中的行,并让git无视它们。
这就是你可以用gitfilter来做的事情:
- 创build/打开gitattributes文件:
- <project root> /。gitattributes(将会被提交回购)
要么 - <project root> /。git / info / attributes(不会被提交回购)
- <project root> /。gitattributes(将会被提交回购)
- 添加一行定义要过滤的文件:
-
*.rb filter=gitignore
,即在所有*.rb
文件上运行名为gitignore
filter
-
- 在你的
gitconfig
定义gitignore
filter:-
$ 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