【问题标题】:git pre-commit hook format code - Intellij/Android Studiogit 预提交钩子格式代码 - Intellij/Android Studio
【发布时间】:2015-08-29 15:29:31
【问题描述】:

这个要点展示了如何在预提交时使用 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---------------------------------------------------------------"

我想通过 IntelliJ 和 Android Studio 实现这一目标。那么脚本会是什么样子呢?

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

changedJavaFiles=$(git diff --cached --name-only --diff-filter=ACM | grep '.java$')

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

如果有不清楚的地方请评论。

更新

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

【问题讨论】:

  • 您是否碰巧找到了解决方案?
  • 不,我没有,但我仍然对这个话题感兴趣!

标签: git android-studio intellij-idea format hook


【解决方案1】:

您可以使用 IntelliJ 自 2016.3 版本以来提供的 IntelliJ command-line source code formatter。例如(对于 Git Bash):

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

虽然Android Studio是基于IntelliJ的,但是在IDE打开的情况下似乎不支持这个,见下方评论。

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

请注意,snap package 可用于 Ubuntu,因此也很容易将其添加到 Ubuntu Git 或 CI 服务器。

【讨论】:

  • 它确实支持它,但是由于某种原因它在IDE已经打开时不起作用
【解决方案2】:

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

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

【讨论】:

  • 感谢您的回答。我更新了我的问题。我在 Windows 上,所有与 git 相关的事情都发生在 Git Bash 中。我从未使用过 Android Studio 的 GUI 来提交,因此不知道更新选项以将其全部格式化。由于存在此选项,我确信有一种方法可以从命令行运行它。我将下载 Android Studio 源代码并进行挖掘。如果我发现任何有用的东西,我会留下另一条评论。 Android Studio 的源代码可以在这里找到:source.android.com/source/downloading.html
【解决方案3】:

如果其他人需要 Windows 上的解决方案 - 我花了半天的时间工作,所以也许它对某人有用:

我创建了 auto_reformat.bat,内容:

for /F "usebackq delims=" %%P in (`git diff --name-only --diff-filter=ACM ^| findstr -I "java kt"`) do %INTELLIJ_DIR%\bin\format %%P

这里报告了多个实例的问题:

https://youtrack.jetbrains.com/issue/IDEA-160462

解决方案:

https://confluence.jetbrains.com/display/IDEADEV/Command-Line+Source+Code+Formatter

但这对我不起作用 :( - 无论如何,我们在许可证服务器上没有备用许可证,希望能帮助某人

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 2014-05-16
    • 2018-07-23
    • 2019-07-12
    • 2015-01-13
    • 2018-05-21
    相关资源
    最近更新 更多