背景:
我有两个Unity3d项目:
- Unity首选项设置为"混合资产"模式的第一个文件(有些文件是文本,有些是二进制)和
- 首选项设置为"强制文本"的第二个(大多数二进制文件都转换为
YAML
文本,因此几乎所有文件都可以是diff
ed)
为了将第一个项目的文件设置为文本/二进制,我们的~/.subversion/config
文件启用了svn auto-props
以及文件列表及其svn属性(*.cs文件设置为svn:eol-style=native
,*.unity文件设置为svn:mime-type=application/octet-stream
,依此类推)。
问题:
由于我们的第二个项目现在支持所有文件的文本模式,因此我们需要使用一组不同的auto-props
规则,以便*.union文件现在被处理为svn:eol-style=native
。
我看到git
可以在每个项目(或每个目录)的基础上使用.gitattributes
,所以我们可以拥有这个功能。SVN能用我们可以在回购中共享的某种文件来做到这一点吗?这样每个提交的人都会使用相同的默认设置?
您必须理解的一件事是,在git中,存储库和工作目录之间没有真正的区别。当您从父存储库中提取时,您将创建自己的存储库。
Gitattributes会影响您的本地存储库,并且只影响您的当地副本。其他人可以更改其存储库的.git属性。毕竟,这是他们的存储库。如果父存储库正在接收更改,它可以使用预接收挂钩来验证检索到的数据包,以确保它遵循父存储库的策略。您不应该使用.gitattributes来强制执行策略,而只是为了帮助您遵循策略。
Subversion的自动属性配置类似。它会影响该用户的所有工作副本。每个工作副本没有单独的配置。您可以在许多Subversion命令上使用--config-dir
参数来为该操作指定不同的Subversion配置文件,因此您可以有多个配置文件并使用--config-dir
来指定该文件。这不方便,但有可能。
如果你想确保你的属性设置正确,你需要一个预提交挂钩,它检查提交时的属性,并拒绝文件中具有无效属性或属性值的提交。我有一个预提交挂钩,可以做到这一点。