it-swarm.com.de

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

Ich bin unter Windows 7 und versuche, eine Batch-Datei zu verwenden, um die GitBash-Shell zu öffnen und einen Git-Aufruf durchzuführen. 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 der GitBash vor dem nächsten Befehl "git archive ..." abmeldet. Weiß jemand, ob ich den Befehl in GitBash übergeben kann und wie?

Mike

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

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 aus Ihrer Cmd-Zeile auf:

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

In Windows erstellte ich eine git.bat-Datei und ordnete sie der Erweiterung .hook zu.

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 git Shell ausgeführt werden.

5
inf3rno

Use Bash ist beispielsweise 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"

': ¬), glückliches Scripting!

1
fitorec

Nach vielen Versuchen bekam ich dieses Problem. Mit aktueller Version von Git für Windows Portable. Öffnen Sie ein Windows-Befehlsfenster und führen Sie dieses Skript aus. Wenn sich in Ihrem Arbeitsverzeichnis Änderungen ergeben, wird ein Bash-Terminal in Ihrem Arbeitsverzeichnis geöffnet und der aktuelle Status der Git angezeigt. Das Bash-Fenster bleibt geöffnet, indem exec bash aufgerufen wird.

Wenn Sie über mehrere Projekte verfügen, können Sie Kopien dieses Skripts mit einem anderen Projektordner erstellen und von einem Hauptstapelskript aus aufrufen. 

Update - Prüfen Sie neue hinzugefügte Dateien, dh nicht erfasste 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
1

In meinem Fall würde eine bestimmte HTTP-Anfrage innerhalb von Git Bash unter Windows in curl funktionieren. Beim Ausführen von Java mit HttpClient und HttpGet (org.Apache.http.client.methods.HttpGet) würde ich jedoch einen Verbindungsrücksetzfehler erhalten.

Wenn ich versucht habe, mit exec direkt den Befehl auszuführen, funktioniert das aus irgendeinem Grund nicht.

Um dieses Problem zu umgehen, 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 Kennwort 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 enthält):

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();
    }
}
0
Scott Izu