How to write a batch file that opens a GitBash shell and runs a command in a shell?

I am on Windows 7 trying to use a batch file to open a GitBash shell and make a git call. This is the contents of my batch file:

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 

I noticed that GitBash is logging out before the next git archive ... command. Does anyone know if I can pass a command to GitBash and how?

Mike

+41
git msysgit shell windows-shell
Mar 05 '11 at 12:10
source share
6 answers
 "C:\Program Files (x86)\Git\bin\sh.exe" --login -i -c "git archive master | tar -x -C $0" "%~1" 
+51
Mar 05 '11 at 12:45
source share

You can also run a shell script to run multiple commands

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

then call this from your cmd line:

 "c:\Program Files (x86)\Git\bin\sh.exe" --login -i -c "/c/GitRepo/PythonScripts/statusandwait.sh" 
+11
Jan 18 '14 at 3:09
source share

On Windows, I created a git.bat file and linked it with the .hook extension.

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

After that, you can run .hook files like every .bat or .cmd file, except that they work under the git shell ...

+5
Feb 15 2018-12-12T00:
source share

Using Bash is friendlier, for example

 # 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; 

You can run the script:

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

': ÂŦ), happy scripts!

+1
Mar 07 '14 at 2:03
source share

After many trials, I got this job. With the current version of Git For Windows Portable. Open a windows command prompt and execute a script command. If there is a change in your working directory, it will open the bash terminal in your working directory and display the current Git status. It keeps the bash window open by calling exec bash .

If you have several projects, you can create copies of this script with another project folder and call it from the main script batch.

Update - check for newly added files, i.e. files without a trace.

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

 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 ie 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
Oct 27 '15 at 12:28
source share

In my case, a specific HTTP request will work in curl inside Git Bash on Windows. However, when starting in Java using HttpClient and HttpGet (org.apache.http.client.methods.HttpGet) I would get a Connection Reset error.

If I tried to use exec to run the command directly, for some reason this will not work.

As a workaround, this code will write the command in a batch file, then run the batch file and put the output in the command.txt file.

Here is the command that should be in the command.bat file (I changed the endpoint and password):

 "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" 

Here is the code (note that the command has special characters):

 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
Jul 07 '17 at 21:38
source share



All Articles