#!/bin/sh # Git filter to ignore lines in your files. # # Copyright (c) 2017-2019 Aryel Mota Góis # # MIT License # # # SETUP: # # cp git-ignore-line.sh ~/bin/git-ignore-line # # # USAGE: # # Mark single lines you want to ignore with 'GITIGNORE'. It ignores # the whole line. It is recommended to be inside a comment in your code. # # Mark multiple lines surrounding them with 'GITIGNORE START' and # 'GITIGNORE END'. It can not be nested. # # NOTE: Ignored lines might be lost on checkout. # # # Add files to ignore: # # git ignore-line # # Remove patterns with: # # git ignore-line -r # # List configured patterns: # # git ignore-line -l # # PATTERN can be a file or a glob pattern: '*.html'. Remember to # escape the `*`. # # # TODO: # # - Stash the lines ignored by this filter before a git checkout. set -eu # Check if stdin is not tty and remove ignored lines from it. [ -t 0 ] || exec sed \ '/GITIGNORE START/,/GITIGNORE END/d; /GITIGNORE/d' \ /dev/stdin # Running from tty. program=$(basename "$0") # Find git repository. git_dir=$(git rev-parse --git-dir) # Path to attributes file. attr_file=$git_dir/info/attributes # Check arguments. if [ $# -eq 2 ] && [ "$1" = '-r' ]; then # Remove filter for pattern. sed "s|^$2 filter=$program||" "$attr_file" > "$attr_file.tmp" mv -- "$attr_file.tmp" "$attr_file" elif [ $# -eq 1 ]; then if [ "$1" = '-l' ]; then # List patterns. grep "filter=$program" "$attr_file" || true else # Add filter for pattern. echo "$1 filter=$program" >> "$attr_file" # Configure filter. git config --global "filter.$program.clean" "$program" git config --global "filter.$program.smudge" cat fi else # Show help. >&2 echo "Usage: $program [-r] " >&2 echo " or: $program -l" exit 1 fi