如何在并行GIT + CVS项目中处理关键字扩展

时间:2017-01-18 10:10:16

标签: git version-control 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 /配置

[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忽略这些更改?

更新 我在这里阅读Why does 'git status' ignore the .gitattributes clean filter?,无法让git status显示过滤后的输出。它只会在git add之后显示正确的暂存文件。但随意证明这是错误的。

1 个答案:

答案 0 :(得分:0)

因为CVS和GIT之间的机制不同。如果通过cvs update扩展文件,则意味着这些文件确实发生了变化。所以在git中有一个新的校验和。当您使用git status时,git将通过与上一次阶段区域中的校验和进行比较来显示具有不同校验和的文件。

为了使两个版本控制工具彼此无效,您可以将它们放在不同的目录中。