Wie schreibe ich eine Batchdatei, die die GitBash-Shell öffnet und einen Befehl in der Shell ausführt?

Lesezeit: 6 Minuten

Ich versuche unter Windows 7, eine Batchdatei zu verwenden, um die GitBash-Shell zu öffnen und einen Git-Aufruf zu tätigen. Dies ist der Inhalt meiner Batch-Datei:

REM Open GitBash 
C:\Windows\SysWOW64\cmd.exe /c ""C:\Program Files (x86)\Git\bin\sh.exe" --login -i"
REM retrieve archive
git archive master | tar -x -C %~1
REM quit GitBash
exit

Mir ist aufgefallen, dass sich die GitBash vor dem nächsten Befehl “git archive…” abmeldet. Weiß jemand, ob ich den Befehl an GitBash übergeben kann und wie?

Mike

Wie schreibe ich eine Batchdatei die die GitBash Shell offnet und
Erik

"C:\Program Files (x86)\Git\bin\sh.exe" --login -i -c "git archive master | tar -x -C $0" "%~1"

  • Eigentlich habe ich ein anderes Problem. Ich rufe diesen Befehl aus dem Ordner /build/ in meinem Repo auf, sodass nur das abgerufen wird, was sich im Verzeichnis /build/ im Master befindet. Gibt es eine Möglichkeit anzugeben, dass ich es aus dem übergeordneten Verzeichnis archivieren möchte?

    – Mariachimike

    5. März 2011 um 15:25 Uhr

  • Ich musste einen Alias ​​aus einer Batch-Datei aufrufen und habe diese Antwort verwendet, um Folgendes zu finden: “C:\Program Files (x86)\Git\bin\bash.exe” –login -i -c “myaliasname” Es hat funktioniert perfekt! Danke!

    – cmcculloh

    6. April 2011 um 20:16 Uhr

  • Ist es möglich, mehrere Befehle auf diese Weise aufzurufen? (Ich versuche, eine ausführbare Datei aus einem Git-Hook mit wsh zu erstellen, aber es erstellt einen neuen Thread für jeden Befehl …)

    – inf3rno

    14. Februar 2012 um 22:43 Uhr

  • Diese Variante (siehe Ende des Kommentars) enthält auch ein Änderungsverzeichnis nach dem Öffnen von GIT, da ich verschiedene Verzeichnisse habe, mit denen ich arbeiten kann. Ich würde einfach “cd myDir” in der Batch-Datei verwenden, aber ich verwende UNC-Pfade (z. B. \\server01\myfolder) und diese funktionieren nicht mit dem cd-Befehl in der normalen Windows-cmd.exe-Umgebung. “C:\Programme\Git\git-bash.exe” –cd=”\\Server01\projects\R_Code” -c “git commit -m’scheduled commit'”

    – jNorris

    14. Februar 2019 um 16:45 Uhr


Wie schreibe ich eine Batchdatei die die GitBash Shell offnet und
robust

Sie können auch ein Shell-Skript ausführen, um mehrere Befehle auszuführen

#! /bin/bash
cd /c/GitRepo/PythonScripts
git status
read -p "Press enter to continue"

dann rufen Sie das von Ihrer cmd-Zeile auf:

"c:\Program Files (x86)\Git\bin\sh.exe" --login -i -c "/c/GitRepo/PythonScripts/statusandwait.sh"

Wie schreibe ich eine Batchdatei die die GitBash Shell offnet und
inf3rnr

In Windows habe ich eine git.bat-Datei erstellt und sie der Erweiterung .hook zugeordnet.

if not exist %1 exit
set bash=C:\Program Files (x86)\Git\bin\bash.exe
"%bash%" --login -i -c "exec "%1""

Danach können Sie die .hook-Dateien wie jede .bat- oder .cmd-Datei ausführen, außer dass sie unter der Git-Shell ausgeführt werden …

  • Hallo @inf3rno, ein ziemlich später Kommentar, aber es wäre gut, wenn Sie mehr auf das “Verknüpfen mit der Erweiterung .hook” eingehen könnten. Danke.

    – springender_affe

    11. Dezember 2019 um 3:41 Uhr


  • @jumping_monkey Google einfach “Windows-Dateizuordnungen”.

    – inf3rno

    12. Dezember 2019 um 1:12 Uhr

  • Hi @inf3rno, mein Punkt war, dass deine Antwort mich nicht zum weiteren Googeln führen sollte ;-), trotzdem danke für deinen Hinweis.

    – springender_affe

    13. Dezember 2019 um 2:31 Uhr


1647271086 214 Wie schreibe ich eine Batchdatei die die GitBash Shell offnet und
RuntimeException

Nach vielen Versuchen habe ich dieses zum Laufen bekommen. Mit aktueller Version von Git For Windows Portable. Öffnen Sie ein Windows-Befehlsfenster und führen Sie dieses Skript aus. Wenn es eine Änderung in Ihrem Arbeitsverzeichnis gibt, wird ein Bash-Terminal in Ihrem Arbeitsverzeichnis geöffnet und der aktuelle Git-Status angezeigt. Es hält das Bash-Fenster offen, indem es aufruft exec bash.

Wenn Sie mehrere Projekte haben, können Sie Kopien dieses Skripts mit unterschiedlichen Projektordnern erstellen und es von einem Haupt-Batch-Skript aufrufen.

Aktualisieren – Überprüfen Sie neu hinzugefügte Dateien, dh nicht verfolgte Dateien.

=============

REM check git status of given folders. 

setlocal EnableDelayedExpansion

set GIT_HOME=D:\eclipse\devtools\PortableGit-2.6.2

set GIT_EXEC=%GIT_HOME%\mingw64\bin\git.exe
set GIT_BASH=%GIT_HOME%\bin\bash.exe

set GITREPO=D:\source\myproject

pushd %GITREPO%
%GIT_EXEC% status
%GIT_EXEC%  diff-index --quiet --cached HEAD
set VAR1=%errorlevel%
if not "%VAR1%"=="0" (
echo.
echo There are changes which are staged i.e. in index - but not committed.
echo.
)
%GIT_EXEC% diff-files --quiet
set VAR2=%errorlevel%
if not "%VAR2%"=="0" (
echo.
echo There are changes in working directory.
echo.
)

rem below for loop requires enabledDelayedExpansion
for /f "delims=" %%i in ('%GIT_EXEC% ls-files --others --exclude-standard') do (
    if "!VAR3!"=="" (set VAR3=%%i) else (set VAR3=!VAR3!#%%i)
)

if not "%VAR1%"=="0" set REQUIRECOMMIT=true
if not "%VAR2%"=="0" set REQUIRECOMMIT=true
if not "%VAR3%"=="" set REQUIRECOMMIT=true

if "%REQUIRECOMMIT%"=="true" (
    start "gitbash" %GIT_BASH% --login -i -c "git status; exec bash"
)

popd

endlocal

1647271087 194 Wie schreibe ich eine Batchdatei die die GitBash Shell offnet und
fitorec

Use Bash ist zum Beispiel freundlicher

# file: backup.sh

cd /c/myProyectPath/
PWD=$(pwd);

function welcome() {
   echo "current Dir   : $PWD";
}

function backup() {
   git pull

   #if you have install wamp <http://www.wampserver.com>, we making slqBackup
   MYSQLDUMP="/c/wamp/bin/mysql/mysql5.6.12/bin/mysqldump.exe";
   $MYSQLDUMP --user=login --password=pass --no-create-info bd > data/backup.sql
   git add data/backup.sql;

   #generating tar file
   git archive -o latest.tar HEAD
}

welcome;
backup;

echo "see you";
sleep 30;

Sie können das Skript ausführen:

"C:\Program Files (x86)\Git\bin\sh.exe" --login -i -c "/c/myProyectPath/run.sh"

1647271087 781 Wie schreibe ich eine Batchdatei die die GitBash Shell offnet und
Scott Izu

In meinem Fall würde eine bestimmte HTTP-Anforderung in Curl innerhalb von Git Bash unter Windows funktionieren. Ich würde jedoch einen Connection Reset-Fehler erhalten, wenn ich auf Java mit HttpClient und HttpGet (org.apache.http.client.methods.HttpGet) laufe.

Wenn ich versuchen würde, exec zu verwenden, um den Befehl direkt auszuführen, würde es aus irgendeinem Grund nicht funktionieren.

Als Problemumgehung schreibt dieser Code den Befehl in eine Batchdatei, führt dann die Batchdatei aus und platziert die Ausgabe in command.txt.

Hier ist der Befehl, der in der Datei command.bat enthalten sein muss (ich habe den Endpunkt und das Passwort geändert):

"C:\Users\scottizu\AppData\Local\Programs\Git\bin\sh.exe" --login -i -c "curl 'https://my.server.com/validate/user/scottizu' -H 'Password: MY_PASSWORD' > command.txt"

Hier ist der Code (beachten Sie, dass der Befehl Sonderzeichen maskiert hat):

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

public class CURL_Runner {
    public static void main (String[] args) throws Exception {
        String command = "\"C:\\Users\\scottizu\\AppData\\Local\\Programs\\Git\\bin\\sh.exe\" --login -i -c \"curl 'https://my.server.com/validate/user/scottizu' -H 'Password: MY_PASSWORD' > command.txt\"";
        createAndExecuteBatchFile(command);
    }

    public static void createAndExecuteBatchFile(String command) throws Exception {

        // Step 1: Write command in command.bat
        File fileToUpload = new File("C:\\command.bat");
        try {
            if(fileToUpload.getParentFile() != null && !fileToUpload.exists()) {
                fileToUpload.getParentFile().mkdirs();
            }
            FileWriter fw = new FileWriter(fileToUpload);
            BufferedWriter bw = new BufferedWriter(fw);
            bw.write(command);
            bw.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        // Step 2: Execute command.bat
        String[] cmdArray = new String[1];
        cmdArray[0] = "C:\\command.bat";

        Process process = Runtime.getRuntime().exec(cmdArray, null, new File("C:\\"));
        int processComplete = process.waitFor();
    }
}

1002090cookie-checkWie schreibe ich eine Batchdatei, die die GitBash-Shell öffnet und einen Befehl in der Shell ausführt?

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

Privacy policy