Как обрабатывать расширение ключевых слов в параллельном проекте GIT + CVS

У меня есть проект, который я отслеживаю как в 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 будут показаны правильные поэтапные файлы. Но не стесняйтесь доказывать, что это не так.


person Chaos_99    schedule 18.01.2017    source источник
comment
что, если вы передадите их расширенному git? AFAIR Id должен измениться, только если что-то еще изменилось в файле. Вызовет легкий шум, но не смертельно.   -  person max630    schedule 18.01.2017
comment
файл изменений - ›зарегистрируйтесь с помощью git -› зарегистрируйтесь с помощью cvs - ›расширение ключевых слов -› зарегистрируйтесь с помощью git СНОВА. Поскольку в git будет больше мелких коммитов, он будет вызываться первым и чаще. Почти каждое изменение файла приведет к 2 фиксации вместо одной.   -  person Chaos_99    schedule 19.01.2017


Ответы (1)


Потому что механизм между CVS и GIT различен. Если файлы были расширены с помощью cvs update, это означает, что это действительно изменения. Итак, в git появилась новая контрольная сумма. Когда вы используете git status, git будет отображать файлы с разными контрольными суммами, сравнивая их с контрольными суммами в рабочей области в последний раз.

Чтобы два инструмента контроля версий не влияли друг на друга, вы можете разместить их в разных каталогах.

person Marina Liu    schedule 19.01.2017
comment
Спасибо за предложение. Я просто перехожу к подходу с двумя папками и хочу изучить возможность использования только одной. О контрольных суммах: я могу предварительно обработать файлы до того, как будет сгенерирована контрольная сумма, применив фильтры. Это работает для коммитов. Это не работает для статуса. Может есть способ еще и подключиться к генерации статуса? - person Chaos_99; 31.01.2017