У меня есть проект, который я отслеживаю как в CVS, так и в GIT. CVS игнорирует папку .git, GIT игнорирует все подпапки CVS. Репозиторий GIT был создан с git cvsimport
, поэтому у них обоих одинаковая история.
Работает неплохо, за исключением:
В некоторых файлах есть ключевые слова в стиле CVS, которые cvs update
расширяются. Затем GIT показывает их как изменения.
Если я удалю расширение ключевых слов (cvsimport был выполнен с -k
, поэтому они не раскрываются в репозитории GIT), они больше не будут отображать изменения в git, а вместо этого будут отображаться как изменения при сравнении с CVS.
Есть ли способ сохранить их расширенными в CVS, но не расширенными в GIT, чтобы они не отображались как измененные?
Мое частичное решение:
Я использовал .gitattributes и .git / config, чтобы установить собственный фильтр.
.gitattributes
*.txt filter=ignId
.git / config
[filter "ignId"]
clean = ./ignId.sh %f
smudge = cat
ignId.sh
#!/bin/bash
sed -e "s@\\\$Id:[^\\\$]*@\\\$Id@g" $1
и он работает на git diff
и, вероятно, также на git commit
(еще не пробовал), но git status
по-прежнему показывает файлы как измененные.
Как заставить git status
игнорировать изменения?
Обновление: я прочитал здесь Почему 'git status' игнорирует чистый фильтр .gitattributes?, что невозможно git status
показать отфильтрованный вывод. Только после git add
будут показаны правильные поэтапные файлы. Но не стесняйтесь доказывать, что это не так.