我们定制的ide输出的xml文件的编码使它们看起来像二进制文件。这些文件的差异和合并失败。
我们可以使用tr命令创建这些文件的ascii版本。我想进入这样一种状态:在提交这些文件之前,这些文件总是自动转换为ascii。
我拿起git版本控制的副本,它全心全意地警告我不要使用hook,除非我真的需要。
我应该用钩子吗?或者我可以做些别的事情来确保文件在提交之前总是被转换吗?
带有msysgit 1.7.4的Windows XP
--=更新=--
谢谢大家的帮助和耐心。我尝试了以下方法,但没有成功:

echo "*.xrp    filter=xrp" > .git/info/attributes
git config --global filter.xrp.clean 'tr -cd '\''\11\12\15\40-\176'\'''
git config --global filter.xrp.smudge cat
git checkout --force

此配置更改后,文件保持不变。即使我删除并重新签出。
配置为clean任务的tr命令确实是独立工作的。证明:
$ head -n 1 cashflow/repo/C_GMM_CashflowRepo.xrp
ÿþ< ! - -   X M L   R e p o s i t o r y   f i l e   1 . 0   - - >

$ tr -cd '\''\11\12\15\40-\176'\' < cashflow/repo/C_GMM_CashflowRepo.xrp | head -n 1
<!-- XML Repository file 1.0 -->

有人知道我的配置有什么问题吗?

最佳答案

钩子的一个问题是它们没有被分发。
.gitattributes有一些管理文件差异和内容的指令,但另一个选项是attribute filter(仍在.gitattributes中),可以在提交时自动转换这些文件。
(即如果clean脚本能够detect those files based on their content alone
根据这个聊天讨论,opSynesso报告成功:

.gitattributes:
*.xrp filter=xrp

~/.gitconfig:
[filter "xrp"]
clean = \"C:/Program Files/Git/bin/tr.exe\" -cd "\\''\\11\\12\\15\\40-\\176'\\'"
smudge = cat

然后我不得不修改文件,添加,提交,删除,签出…然后就修好了。:)
注意,对于任何不仅仅涉及一个用户,而且可能涉及克隆该repo的任何用户的修改,我更喜欢添加(并提交)一个声明过滤器的额外.gitattributes文件,而不是修改.git/info/attribute文件(它没有被克隆)。
gitattributes man page开始:
如果您只希望影响一个存储库(即,为特定于该存储库的一个用户工作流的文件分配属性),那么属性应该放在$GIT_DIR/info/attributes文件中。
应进行版本控制并分发到其他存储库的属性(即所有用户感兴趣的属性)应放入.gitattributes文件中。
应将影响单个用户的所有存储库的属性放置在由core.attributesfile配置选项指定的文件中。
系统上所有用户的属性都应该放在$(prefix)/etc/gittattributes文件中。
http://git-scm.com/docs/gitattributes
phyatt添加in the comments
我为sqlite3做了一个类似的例子。
可以用两行将其添加到正确的文件中:
git config diff.sqlite3.textconv 'sqlite3 $1 .dump'
echo '*.db diff=sqlite3' >> $(git rev-parse --show-toplevel)/.gitattributes

类似的行可用于编写其他git配置路径。

08-27 12:17