Git Pre-Commit-Hook-Formatcode – Intellij/Android Studio

Lesezeit: 3 Minuten

Benutzer-Avatar
Benjamin Button

Dieser Kern zeigt, wie Java-Code mit dem Eclipse-Formatierer beim Pre-Commit automatisch formatiert wird.

Quelle: https://gist.github.com/ktoso/708972

Code:

#!/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---------------------------------------------------------------"

Ich möchte dies mit IntelliJ und Android Studio erreichen. Wie würde das Drehbuch dann aussehen?

Ich denke auch, dass es am besten wäre, den Formatierer nur für geänderte Dateien auszuführen. Vielleicht ist das nützlich:

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

ACM steht für hinzugefügt, kopiert, modifiziert. Quelle: http://git-scm.com/docs/git-diff

Bitte kommentieren Sie, wenn etwas unklar ist.

Aktualisieren

Mein Setup ist Windows 10 und ich möchte das Befehlszeilentool MINGW32 (Git Bash) verwenden. Die Git-Version ist 1.9.5 msysgit.1

  • hast du dazu zufällig eine lösung gefunden?

    – Bhargav

    16. Dezember 2016 um 5:21 Uhr

  • Nein, habe ich nicht, aber ich interessiere mich immer noch für dieses Thema!

    – Benjamin Button

    16. Dezember 2016 um 8:48 Uhr

Benutzer-Avatar
Herr

Du kannst den … benutzen IntelliJ-Befehlszeilen-Quellcode-Formatierer verfügbar in IntelliJ seit Version 2016.3. Zum Beispiel (für Git Bash):

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

Obwohl Android Studio auf IntelliJ basiert, scheint es dies nicht zu unterstützen, wenn die IDE geöffnet ist, siehe Kommentar unten.

Ein fortgeschritteneres Pre-Commit-Hook-Beispiel ist in verfügbar git-hooks-code-autoformat-Projekt in GitHub.

Beachten Sie, dass a Snap-Paket ist für Ubuntu verfügbar, sodass es einfach ist, dies auch zu einem Ubuntu Git- oder CI-Server hinzuzufügen.

  • Es wird zwar unterstützt, aber aus irgendeinem Grund funktioniert es nicht, wenn die IDE bereits geöffnet ist

    – Scanna

    13. Oktober 2017 um 11:53 Uhr

IDEA hat dies in den normalen Commit-Dialog eingebaut. Aktivieren Sie einfach “Code neu formatieren” und alles wird automatisch passieren.

Wenn Sie den Neuformatierungsteil von IDEA über die Befehlszeile ausführen möchten, ist dies meiner Meinung nach nicht möglich. Der einzige Gedanke, den ich gefunden habe, der außerhalb ausgeführt werden kann, sind Codeinspektionen.

  • Vielen Dank für Ihre Antwort. Ich habe meine Frage aktualisiert. Ich arbeite unter Windows und alles, was mit Git zu tun hat, passiert in Git Bash. Ich habe nie die GUI von Android Studio zum Festschreiben verwendet und wusste daher nicht, dass die Option aktualisiert wurde, um alles zu formatieren. Da diese Option existiert, bin ich sicher, dass es eine Möglichkeit gibt, dies über die Befehlszeile auszuführen. Ich lade den Quellcode von Android Studio herunter und wühle herum. Wenn ich etwas Nützliches finde, hinterlasse ich einen weiteren Kommentar. Quelle für Android Studio finden Sie hier: source.android.com/source/downloading.html

    – Benjamin Button

    30. August 2015 um 6:30 Uhr

Wenn jemand anderes eine Lösung für Windows benötigt – ich habe den halben Tag gebraucht, um zu arbeiten, also ist es vielleicht für jemanden nützlich:

Ich erstelle auto_reformat.bat, Inhalt:

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

und Problem mit mehreren hier gemeldeten Instanzen:

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

Lösung:

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

aber es funktioniert bei mir nicht 🙁 – wir haben sowieso keine freien Lizenzen auf dem Lizenzserver, hoffentlich wird jemandem helfen

1033350cookie-checkGit Pre-Commit-Hook-Formatcode – Intellij/Android Studio

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy