挂钩或不挂钩 - git

Syn*_*sso 6 git hook tr gitattributes

我们的定制IDE输出XML文件,其编码使它们看起来像二进制文件.这些文件的差异和合并失败.

我们可以使用该tr命令创建这些文件的ASCII版本.我想进入一个状态,在这些文件提交之前总是自动转换为ascii.

用Git拿起了我的版本控制副本,它全心全意警告我不要使用钩子,除非我真的需要.

我应该为此目的使用钩子吗?或者我可以做其他事情以确保文件在提交之前始终被转换?

Windows XP与msysgit 1.7.4

- = update = -

感谢大家的帮助和耐心.期待这个问题我尝试了以下,但它不起作用:

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
Run Code Online (Sandbox Code Playgroud)

此配置更改后,文件保持不变.即使我删除并重新结账.

tr配置为clean任务的命令确实可以单独工作.证明:

$ 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 -->
Run Code Online (Sandbox Code Playgroud)

任何人都可以看到我的配置有什么问题吗?

Von*_*onC 6

钩子的一个问题是它们不是分布式的.

.gitattributes有一些指令来管理文件的差异和内容,但另一个选项是属性过滤器(仍在.gitattributes),并可以在提交时自动转换这些文件.
(即如果干净脚本能够根据其内容检测这些文件)


根据此聊天讨论,OP Synesso报告成功:

.gitattributes:
*.xrp filter=xrp

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

然后我不得不修改文件,添加,提交,删除,结帐......然后它被修复了.:)

请注意,对于任何不仅涉及一个用户但可能任何用户克隆该repo的修改,我更喜欢添加(并提交).gitattributes声明过滤器的额外文件,而不是修改.git/info/attribute文件(不是克隆在周围).

gitattributes手册页:

  • 如果您希望仅影响单个存储库(即,将属性分配给特定于该存储库的一个用户工作流的$GIT_DIR/info/attributes文件),则应将属性放在文件中.
  • 应该由版本控制并分发到其他存储库的属性(即,所有用户感兴趣的属性)应该进入.gitattributes文件.
  • 应该影响单个用户的所有存储库的属性应放在core.attributesfile配置选项指定的文件中.
  • 系统上所有用户的属性应放在$(前缀)/ etc/gitattributes文件中.

http://git-scm.com/docs/gitattributes


phyatt 在评论中添加:

我为sqlite3做了一个类似的例子.
您可以使用两行将其添加到正确的文件中:

git config diff.sqlite3.textconv 'sqlite3 $1 .dump'
echo '*.db diff=sqlite3' >> $(git rev-parse --show-toplevel)/.gitattributes 
Run Code Online (Sandbox Code Playgroud)

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