我们定制的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配置路径。