Ответ 1
"C:\Program Files (x86)\Git\bin\sh.exe" --login -i -c "git archive master | tar -x -C $0" "%~1"
Я нахожусь в Windows 7, пытаясь использовать командный файл, чтобы открыть оболочку GitBash и сделать вызов git. Это содержимое моего командного файла:
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
Я заметил, что GitBash выходит из системы перед следующей командой "git archive...". Кто-нибудь знает, могу ли я передать команду в GitBash и как?
Mike
"C:\Program Files (x86)\Git\bin\sh.exe" --login -i -c "git archive master | tar -x -C $0" "%~1"
Вы также можете запустить оболочку script для запуска нескольких команд
#! /bin/bash
cd /c/GitRepo/PythonScripts
git status
read -p "Press enter to continue"
затем вызовите это из вашей строки cmd:
"c:\Program Files (x86)\Git\bin\sh.exe" --login -i -c "/c/GitRepo/PythonScripts/statusandwait.sh"
В Windows я создал файл git.bat и связал его с расширением .hook.
if not exist %1 exit
set bash=C:\Program Files (x86)\Git\bin\bash.exe
"%bash%" --login -i -c "exec "%1""
После этого вы можете запускать файлы .hook, как каждый файл .bat или .cmd, за исключением того, что они работают под оболочкой git...
Использовать Bash удобнее, например
# 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;
Вы можете запустить скрипт:
"C:\Program Files (x86)\Git\bin\sh.exe" --login -i -c "/c/myProyectPath/run.sh"
После многих испытаний я получил эту работу. С текущей версией Git Для Windows Portable. Откройте окно командной строки Windows и выполните команду script. Если в вашем рабочем каталоге есть изменения, он откроет терминал bash в вашем рабочем каталоге и отобразит текущий статус Git. Он держит окно bash открытым, вызывая exec bash
.
Если у вас есть несколько проектов, вы можете создать копии этого script с другой папкой проекта и вызвать его из основной партии script.
Обновление - проверьте новые добавленные файлы, то есть файлы без следа.
=============
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
В моем случае определенный HTTP-запрос будет работать в curl внутри Git Bash в Windows. Однако при запуске на Java с использованием HttpClient и HttpGet (org.apache.http.client.methods.HttpGet) я получал бы ошибку Connection Reset.
Если я попытался использовать exec для непосредственного запуска команды, по какой-то причине это не сработает.
В качестве обходного пути этот код будет писать команду в пакетном файле, затем запустить командный файл и поместить вывод в файл command.txt.
Вот команда, которая должна быть в файле command.bat(я изменил конечную точку и пароль):
"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"
Вот код (обратите внимание, что команда имеет специальные символы):
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();
}
}