在git上运行外部程序添加一个特定文件,并将特定文件作为参数

时间:2016-08-04 02:26:40

标签: git batch-file github

所以这就是问题,我有一个二进制文件,我可以git diff使用iconv使用git bash使用这种类型的转换方法。{/ p>

textconv = "iconv -f ISO-8859-1 -t UTF-8//IGNORE"

我不确定二进制文件编码是否为ISO-8859-1,因为每当我使用git diff时都会留下很多特殊字符。

主要问题:我无法在github上查看差异。所以我所做的是将二进制文件转换为一个可读的文件,以摆脱所有这些特殊字符。我的一小段代码生成一个.xml文件。我希望将此文件包含在source code基础中,以便每当发出合并请求时,都会消除git diff来自bash的需求。

我在追求什么:我希望在特定文件上使用git add时执行该程序。我已经阅读了aliases,但我不确定如何将该文件用作参数,并在添加特定文件类型时调用它。我应该修改程序来读取文件类型吗?

摘要:在特定文件类型上使用git add(或者可能是别名)时,我想要运行外部命令转换文件,然后调用 git add 以包含转换后的文件

TIA:)

更新:我正在尝试使用alias并将其指定为add-filetype = "!../convert.er my.file && git commit my.file -m 'Auto-generated file on filetype add'",以便我可以运行git add-filetype my.file

解决方案: 最后我在我的gitconfig上想出了这个:

[alias]
    add-filetype = "!f(){ \
                        ../convert.er $1; \
                        git add $1.xml; \
                        git commit $1.xml -m \"Auto Generate XML file\"; \
                    ); f"

和git-bash上的简单类型git add-filetype my.file

谢谢@VonC!

1 个答案:

答案 0 :(得分:1)

  afaik bash适用于基于linux的机器吗?我们的发布团队使用Windows,因此我现在正在研究使用批处理文件

这样可行:git使用git-bash bases on msys2,这意味着git别名中的任何Linux命令都将由该shell解释,即使在Windows上也是如此。

my_alias = "!f() { 〈your complex command〉 }; f"

请参阅" One weird trick for powerful Git aliases "

OP Eduard Daduya在别名中嵌入了脚本:

[alias]
    add-filetype = "!f(){ \
                        ../convert.er $1; \
                        git add $1.xml; \
                        git commit $1.xml -m \"Auto Generate XML file\"; \
                    ); f"

但是同样的脚本可以写成:

git-add-filetype

/full/path/to/convert.er $1
git add $1.xml; \
git commit $1.xml -m \"Auto Generate XML file\"

任何git-xxx脚本(%PATH%中没有扩展名)都可以称为git xxx:在这种情况下不需要git别名。