Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编写git钩子以在本地提交期间自动修改代码_Git_Hook - Fatal编程技术网

编写git钩子以在本地提交期间自动修改代码

编写git钩子以在本地提交期间自动修改代码,git,hook,Git,Hook,我想编写一个git钩子,它自动执行一些代码清理,比如删除尾随的空格。编写一个脚本来拒绝某些提交很容易,但我宁愿尽可能透明地解决问题。虽然我意识到git对这类东西有一些内置的支持(自动转换换行符等),但我想要更灵活的东西。预提交钩子有可能做到这一点吗?你能直接修改索引吗(或者有更好的方法吗) 我还意识到,最终我需要一个服务器钩子来拒绝不使用本地钩子的开发人员的错误提交,但我想帮助那些选择使用本地钩子的开发人员。(如果可以在服务器上修改代码,那会更好,但我不相信你能做到。)下面是一个使用筛选器驱动程

我想编写一个git钩子,它自动执行一些代码清理,比如删除尾随的空格。编写一个脚本来拒绝某些提交很容易,但我宁愿尽可能透明地解决问题。虽然我意识到git对这类东西有一些内置的支持(自动转换换行符等),但我想要更灵活的东西。预提交钩子有可能做到这一点吗?你能直接修改索引吗(或者有更好的方法吗)


我还意识到,最终我需要一个服务器钩子来拒绝不使用本地钩子的开发人员的错误提交,但我想帮助那些选择使用本地钩子的开发人员。(如果可以在服务器上修改代码,那会更好,但我不相信你能做到。)

下面是一个使用筛选器驱动程序删除尾部空白的示例。请注意,在进行提交后,空白将保留在工作副本中,直到您签出为止。还要注意,下面sed命令中括号中的空格是一个制表符和一个空格

$ rm -rf .git $ git init Initialized empty Git repository in /private/tmp/foo/.git/ $ echo 'trailing white ' > file $ echo 'file filter=white' > .git/info/attributes $ cat << EOF >> .git/config > [filter "white"] > clean = sed 's/[ ]*$//' > EOF $ git add file $ git ci -m"Sample commit" [master (root-commit) 654fa8d] Sample commit 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 file $ git checkout -f master file $ cat -tve file trailing white$ $rm-rf.git $git init 已在/private/tmp/foo/.Git中初始化空Git存储库/ $echo'尾随白色文件 $echo'文件过滤器=白色'>.git/info/attributes $cat>.git/config >[过滤器“白色”] >clean=sed's/[]*$/' >EOF $git添加文件 $git ci-m“示例提交” [master(root提交)654fa8d]示例提交 1个文件已更改,1个插入(+),0个删除(-) 创建模式100644文件 $git checkout-f主文件 $cat-tve文件 拖尾白$
你不能用提交钩子来做这件事,但你可以用过滤器驱动程序来做。你可以做一个预提交钩子。我用它在一个特定的文件上加时间戳。其实很简单。