-
-
Save rogueai/8433710c7c572e9861c91d80fc51cb99 to your computer and use it in GitHub Desktop.
Git filter to ignore lines in your files
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# Git filter to ignore lines in your files. | |
# | |
# Copyright (c) 2017-2019 Aryel Mota Góis <aryel.gois@gmail.com> | |
# | |
# 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 <pattern> | |
# | |
# Remove patterns with: | |
# | |
# git ignore-line -r <pattern> | |
# | |
# 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] <pattern>" | |
>&2 echo " or: $program -l" | |
exit 1 | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment