Comment écrire un fichier batch qui ouvre le shell GitBash et exécute une commande dans le shell?
Je suis sur Windows 7 essayant d'utiliser un fichier batch pour ouvrir le shell GitBash et faire un appel Git. Voici le contenu de mon fichier batch:
REM Open GitBash
C:WindowsSysWOW64cmd.exe /c ""C:Program Files (x86)Gitbinsh.exe" --login -i"
REM retrieve archive
git archive master | tar -x -C %~1
REM quit GitBash
exit
j'ai remarqué que le GitBash se déconnecte avant la commande suivante "git archive...". Quelqu'un sait si je peux passer la commande en GitBash et comment?
Mike
6 réponses
"C:\Program Files (x86)\Git\bin\sh.exe" --login -i -c "git archive master | tar -x -C " "%~1"
vous pouvez aussi lancer un script shell pour exécuter plusieurs commandes
#! /bin/bash
cd /c/GitRepo/PythonScripts
git status
read -p "Press enter to continue"
puis appelez ça à partir de votre ligne cmd:
"c:\Program Files (x86)\Git\bin\sh.exe" --login -i -c "/c/GitRepo/PythonScripts/statusandwait.sh"
dans windows j'ai créé un git.le fichier bat, et associé à l' .extension de crochet.
if not exist %1 exit
set bash=C:\Program Files (x86)\Git\bin\bash.exe
"%bash%" --login -i -c "exec "%1""
Après cela, vous pouvez exécuter l' .crochet de fichiers comme chaque .bat ou .fichier cmd sauf qu'ils tournent sous git shell...
Utiliser Bash est plus convivial, par exemple,
# 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;
vous pouvez lancer le script:
"C:\Program Files (x86)\Git\bin\sh.exe" --login -i -c "/c/myProyectPath/run.sh"
':), heureux de script!
Après beaucoup d'essais , j'ai obtenu ce travail. Avec la version actuelle de Git pour Windows Portable. Ouvrez une fenêtre de commande Windows et exécutez ce script. S'il y a un changement dans votre répertoire de travail, il ouvrira un terminal bash dans votre répertoire de travail, et affichera l'état git actuel. Il maintient la fenêtre de bash ouverte, en appelant exec bash
.
si vous avez plusieurs projets, Vous pouvez créer des copies de ce script avec un dossier de projet différent, et l'appeler à partir d'un dossier principal script de traitement par lots.
mise à jour-vérifiez les nouveaux fichiers ajoutés , c'est-à-dire les fichiers non tracés.
=============
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
dans mon cas, une certaine requête HTTP fonctionnerait dans curl within Git Bash sous Windows. Cependant, j'obtiendrais une erreur de réinitialisation de la connexion lorsque J'exécute Java en utilisant HttpClient et HttpGet (org.Apache.http.client.méthode.HttpGet).
si j'essayais d'utiliser exec pour exécuter directement la commande, pour une raison quelconque, cela ne fonctionnerait pas.
comme solution de contournement, ce code écrira la commande dans un fichier batch, puis lancera le fichier batch et placera la sortie dans commande.txt.
Voici la commande qui doit être dans la commande.fichier bat (j'ai changé le point de terminaison et mot de passe):
"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"
voici le code (notez que la commande a des caractères spéciaux échappés):
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();
}
}