TortoiseGit hook scripts 实现代码格式化说明
我们有时候代码要放在开发服务器上,多人合作完成,这种情况下项目的代码需要结合 TortoiseGit
实现代码格式化。
1. 設置curl
環境變量
添加CURL
系统变量路径
将git
的bin
目录加入系统环境变量路径,例如C:\Program Files (x86)\Git\bin;
打开cmd
面板,执行curl
,若执行后输出curl: try 'curl --help' or 'curl --manual' for more information
,说明添加成功
2. 設置HOOK
2.1 设置 hook scripts
- 右键打开
TortoiseGit
->Hook Scripts
,点击add
按纽打开新增面板 - 勾选左上角的
Enable
(默认) - 右上角下拉框选择
Start Commit hook
- 在
Run when working tree path is under
中输入项目根目录地址,例如\\192.168.2.249\home\laravel5\toutiao
- 在
Commond line to execute
的输入框中输入bat
文件地址,例如:\\192.168.2.249\home\laravel5\toutiao\public\format.bat
- 选中
Wait for the script to finish
- 选中
Hide the script while running
2.2 添加 php
文件
- 在项目域名目录中添加
format.php
<?php
chdir(dirname(dirname(__FILE__)));
shell_exec('sh format.sh');
exit();
- 将
format.php
加入.gitignore
2.3 添加 bat
文件
- 在项目域名目录中添加
format.bat
curl http://yoursystemdomain/format.php
- 将
format.bat
加入.gitignore
2.4 添加格式化配置文件
在项目根目录下新建format.php_cs.dist
文件,输入以下内容,$finder
请根据实际项目目录设置需要格式化的目录和文件:
<?php
$finder = PhpCsFixer\Finder::create()
->files()
->in(__DIR__)
->exclude("vendor")
->exclude("ThinkPHP")
->exclude("SmartAdmin")
->exclude('google-api-php-client-master')
->exclude('Download')
->exclude('Deploy')
->exclude('Upload')
->exclude('Public')
->exclude('Runtime')
->exclude("PHPExcel")
->exclude("Facebook")
->notPath(__DIR__ . "/Application/Portal/ORG/PHPExcel.class.php")
->name('*.php')
;
return PhpCsFixer\Config::create()
->setRules([
'@PHP56Migration' => true,
'@Symfony' => true,
'array_syntax' => ['syntax' => 'short'],
'combine_consecutive_unsets' => true,
// one should use PHPUnit methods to set up expected exception instead of annotations
'general_phpdoc_annotation_remove' => ['expectedException', 'expectedExceptionMessage', 'expectedExceptionMessageRegExp'],
'heredoc_to_nowdoc' => true,
'no_extra_consecutive_blank_lines' => ['break', 'continue', 'extra', 'return', 'throw', 'use', 'parenthesis_brace_block', 'square_brace_block', 'curly_brace_block'],
'no_short_echo_tag' => true,
'no_unreachable_default_argument_value' => true,
'no_useless_else' => true,
'no_useless_return' => true,
'ordered_class_elements' => true,
'ordered_imports' => true,
'phpdoc_add_missing_param_annotation' => true,
'no_trailing_comma_in_list_call'=>true,
'phpdoc_order' => true,
'semicolon_after_instruction' => true,
'psr4'=>true,
'strict_comparison' => false,
'strict_param' => false,
'binary_operator_spaces'=>['align_double_arrow' => true, 'align_equals' => true],
'concat_space'=> ["spacing"=> "one"]
])
->setFinder($finder);
2.5 添加shell
文件
在项目根目录下新建format.sh
文件,内容如下:
#!/bin/bash
filepath=$(cd "$(dirname "$0")"; pwd)
cd $filepath
php-cs-fixer fix --config=format.php_cs.dist --allow-risky yes -vvv
2.6 测试
- 在项目根目录右键执行
Git Commit
,检测代码格式化是否有执行,若执行成功,会在项目根目录生成.php_cs.cache
文件,请将该文件加入.gitignore
- 检查代码是否格式化成功
2.7 说明
如果你的项目已经添加了上述格式化部署,你只需要执行#1
#2.1
两个步骤就可以实现代码自动格式化的功能。