utiles programacion programa por para lotes for ejemplos ejecutar crear comandos batch bat avanzados avanzada archivos archivo git shell msysgit windows-shell

programacion - ¿Cómo escribo un archivo por lotes que abre el shell GitBash y ejecuta un comando en el shell?



for en batch (6)

Después de muchas pruebas, conseguí que esta funcionara. Con la versión actual de Git para Windows Portable. Abra una ventana de comandos de Windows y ejecute esta secuencia de comandos. Si hay un cambio en su directorio de trabajo, se abrirá un terminal de bash en su directorio de trabajo, y se mostrará el estado de git actual. Mantiene la ventana de bash abierta, llamando a exec bash .

Si tiene varios proyectos, puede crear copias de este script con una carpeta de proyecto diferente y llamarlo desde un script de lote principal.

Actualizar: comprueba los nuevos archivos agregados, es decir, los archivos sin seguimiento.

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

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

Estoy en Windows 7 tratando de usar un archivo por lotes para abrir el shell GitBash y hacer una llamada git. Este es el contenido de mi archivo por lotes:

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

Noté que el GitBash se está desconectando antes del próximo comando "git archive ...". ¿Alguien sabe si puedo pasar el comando a GitBash y cómo?

Micro


En Windows creé un archivo git.bat y lo asocié a la extensión .hook.

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

Después de eso, puede ejecutar los archivos .hook como todos los archivos .bat o .cmd, excepto que se ejecutan bajo git shell ...


En mi caso, una determinada solicitud de HTTP funcionaría en curl dentro de Git Bash en Windows. Sin embargo, obtendría un error de restablecimiento de la conexión al ejecutar en Java utilizando HttpClient y HttpGet (org.apache.http.client.methods.HttpGet).

Si traté de usar exec para ejecutar directamente el comando, por alguna razón no funcionaría.

Como solución temporal, este código escribirá el comando en un archivo por lotes, luego ejecutará el archivo por lotes y colocará el resultado en command.txt.

Aquí está el comando que debe estar en el archivo command.bat (he cambiado el punto final y la contraseña):

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

Aquí está el código (observe que el comando tiene caracteres especiales escapados):

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


También puede ejecutar un script de shell para ejecutar múltiples comandos

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

luego llama eso desde tu línea de cmd:

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


Usar Bash es más amigable, por ejemplo

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

Puede ejecutar el script:

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

'': ¬), scripting feliz!


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