У меня есть хранилище git со следующим содержимым в каталоге root хранилища:
.git
.gitattributes
.gitconfig
gitfilters.py
MyFile.txt
Я хочу добавить фильтр, который отменяет любые изменения, внесенные в определенные строки в MyFile.txt
, чей содержимое выглядит следующим образом:
parameter1 = value1
parameter2 = value2
parameter3 = value3
parameter4 = value4
parameter5 = value5
Я хочу, чтобы строки с parameter1
и parameter2
не отражались на git при изменении в рабочем каталоге.
Я добавил свой фильтр в файле .gitattributes
, чтобы добиться этого:
MyFile.txt filter=MyFilter
Я определил MyFilter
в моем файле .gitconfig
, как показано ниже:
[filter "MyFilter"]
clean = python ../gitfilters.py
smudge = cat
Сценарий gitfilters.py
для замените строки, которые я не хочу менять:
import sys
OVERRIDE_PARAMS = {'parameter1': 'value1','parameter2': 'value2'}
for line in sys.stdin:
for param, value in OVERRIDE_PARAMS.items():
if param in line:
line = f'{param} = {value}\n'
sys.stdout.write(line)
exit()
Затем я включил .gitconfig
в мой файл .git/CONFIG
:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[include]
path = ../.gitconfig
Со всеми этими изменениями я ожидаю, что если я изменю MyFile.txt
, как показано ниже, моя область подготовки git все равно будет чистой
parameter1 = value1NEW
parameter2 = value2NEW
parameter3 = value3
parameter4 = value4
parameter5 = value5
Однако это не так, и я все еще вижу изменения для 2 строк в моем git.
Я подозреваю, что некоторые пути не верны, и фильтры работают неправильно. Может кто-нибудь указать, что мне здесь не хватает? Спасибо!