git pre-commit钩子格式代码 - Intellij/Android Studio

Ben*_*ton 12 git format hook intellij-idea android-studio

本要点介绍了如何在预提交时使用Eclipse格式化程序自动格式化Java代码.

资料来源:https://gist.github.com/ktoso/708972

码:

#!/bin/sh
#
# This hook will run the eclipse code formatter before any commit
# to make the source look as it's supposed to look like in the repo.

ECLIPSE_HOME=$HOME/eclipse
STYLE_FILE=$HOME/org.eclipse.jdt.core.prefs
echo "Running pre-commit hook: run-eclipse-formatter---------------------"
echo "Will run eclipse formatter, using: $STYLE_FILE"
echo "Listing folders to run formatter on… "
code_dirs=`find . -maxdepth 3 | grep 'src/'`
for dir in $code_dirs; do
   echo $dir;
done;

echo "Launching eclipse code formatter…    "
exec $ECLIPSE_HOME/eclipse \
                    -nosplash \
                    -application org.eclipse.jdt.core.JavaCodeFormatter \
                    -verbose \
                    -config $STYLE_FILE \
                    $code_dirs

echo "done---------------------------------------------------------------"
Run Code Online (Sandbox Code Playgroud)

我想用IntelliJ和Android Studio实现这一目标.那么剧本怎么样呢?

另外我想最好只在更改的文件上运行格式化程序.也许这很有用:

changedJavaFiles=$(git diff --cached --name-only --diff-filter=ACM | grep '.java$')
Run Code Online (Sandbox Code Playgroud)

ACM代表添加,复制,修改.资料来源:http://git-scm.com/docs/git-diff

如果有任何不清楚的地方请评论.

更新

我的设置是Windows 10,我想使用命令行工具MINGW32(Git Bash).Git版本是1.9.5 msysgit.1

mrt*_*rts 6

自 2016.3 版起,您可以使用IntelliJ 中提供的 IntelliJ 命令行源代码格式化程序。例如(对于 Git Bash):

CHANGED_JAVA_SRC_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep '.java$')
$INTELLIJ_DIR/bin/format $CHANGED_JAVA_SRC_FILES
Run Code Online (Sandbox Code Playgroud)

虽然Android Studio是基于IntelliJ的,但是IDE打开的时候好像不支持这个,看下面的评论。

GitHub中的git-hooks-code-autoformat 项目中提供了更高级的预提交挂钩示例

请注意,Ubuntu有一个snap 包,因此也很容易将其添加到 Ubuntu Git 或 CI 服务器。

  • 它确实支持它,但由于某种原因,当 IDE 已经打开时它不起作用 (2认同)

And*_*and 4

IDEA 已将其内置到正常的提交对话框中。只需检查“重新格式化代码”,一切都会自动发生。

如果你想从命令行运行 IDEA 的重新格式化部分,我认为这是不可能的。我发现唯一可以在外部运行的是代码检查。