2017-01-18 8 views
1

У меня есть проект, который я отслеживаю как в CVS, так и в GIT. CVS игнорирует папку .git, GIT игнорирует все подкаталоги CVS. Репозиторий GIT был создан с помощью git cvsimport, поэтому они оба имеют одинаковую историю.Как обрабатывать расширение ключевых слов параллельно Проект GIT + CVS

работает довольно хорошо, за исключением:

Некоторые файлы имеют ключевые слова CVS-стиль, который на cvs update получить расширенные. GIT затем показывает их как изменения.

Если я удалю расширение ключевого слова (cvsimport было выполнено с помощью -k, поэтому они не были расширены в репозитории GIT), они больше не отображают изменения в git, а вместо этого отображаются как изменения по сравнению с CVS.

Есть ли способ удержать их в CVS, но не расширен в GIT без их появления в качестве измененных?

Мой частичное решение:

Я использовал .gitattributes и .git/конфигурации, чтобы установить пользовательский фильтр

.gitattributes

*.txt filter=ignId 

.git/конфигурации

[filter "ignId"] 
    clean = ./ignId.sh %f 
    smudge = cat 

ignId.sh

#!/bin/bash 

sed -e "[email protected]\\\$Id:[^\\\$]*@\\\[email protected]" $1 

и она работает на git diff и, вероятно, также на git commit (еще, что один еще не пробовал), но git status все еще показывает файлы в измененном виде.

Как сделать git status игнорировать изменения?

Update: Я прочитал здесь Why does 'git status' ignore the .gitattributes clean filter?, что это невозможно сделать git status показать отфильтрованный выходной сигнал. Он отобразит только правильные поэтапные файлы после git add. Но не стесняйтесь доказывать это неправильно.

+0

что делать, если вы поручите их расширять? AFAIR «Id» должен измениться только в том случае, если что-то изменилось в файле. Может вызвать небольшой шум, но не смертельно. – max630

+0

изменить файл -> зарегистрироваться с git -> зарегистрироваться с cvs -> расширение ключевого слова -> зарегистрироваться с git AGAIN. Поскольку git будет иметь более мелкозернистые фиксации, это называется первым и более часто. Почти каждое изменение файла приведет к 2 коммитам вместо одного. –

ответ

0

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

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

+0

Спасибо за предложение. Я просто прихожу из подхода с двумя папками и хочу изучить возможность использования только одного. О контрольных суммах: я могу предварительно обработать файлы до того, как контрольная сумма будет сгенерирована путем применения фильтров. Это работает для фиксации. Он не работает для статуса.Может быть, есть способ также подключиться к генерации статуса? –

 Смежные вопросы

  • Нет связанных вопросов^_^