MS-Windows中的Git命令行
Git command line for MS-Windows
Inhalt
- 1 Download and install, or copy the git command line suite for MS-Windows
- 2 sh.exe
- 2.1 pure run >sh.exe
- 2.2 run sh.exe in a batch file with some environment variables
- 2.3 run sh.exe in a batch file to execute one linux cmd, especially git with options
- 2.4 run sh.exe in a batch file to execute a shell script
- 2.5 The sh.exe executes MS-Windows executables
- 2.6 Run sh.exe from a Java application
- 3 git log
Topic:.git.cmd.
.
1 Download and install, or copy the git command line suite for MS-Windows
Topic:.git.cmd.install.
You can download a git suite for command line processing from https://git-scm.com/download/win and install it. The installed files run on an other computer without installing. That may be important if you have experience with several git installations.
I have installed Git-2.9.3.2-32.bit.exe on a computer running under Windows-XP. I have answered all questions during the install process with the minimal influence to the operation system:
Select components: Deselect all! No icons, no Windows Explorer Integration, no change of file extension-associations.
No change of the system's PATH variable: Use Git from Git Bash only
Use OpenSSH
Configure the line ending conversions: Checkout as-is, commit-as-is: See TODO
Use MinTTY (the default terminal of MSYS2), don't select Use Windows' default console window
Enable file system chaching
I have select
D:\Programs\Gitcmdas destination for installation. That is my tool folder.
This produces the following files (raw):
D:\Programs\Gitcmd>dir
Directory of D:\Programs\Gitcmd
29.08.2016 11:50 <DIR> .
29.08.2016 11:50 <DIR> ..
29.08.2016 11:38 <DIR> bin
29.08.2016 11:38 <DIR> cmd
29.08.2016 11:38 <DIR> dev
29.08.2016 11:38 <DIR> etc
25.08.2016 13:47 151.272 git-bash.exe
25.08.2016 13:47 150.760 git-cmd.exe
09.08.2016 19:02 18.765 LICENSE.txt
29.08.2016 11:38 <DIR> mingw32
25.08.2016 15:06 77.551 ReleaseNotes.html
29.08.2016 11:38 <DIR> tmp
29.08.2016 11:38 996.808 unins000.dat
29.08.2016 11:34 1.293.032 unins000.exe
29.08.2016 11:38 22.815 unins000.msg
29.08.2016 11:38 <DIR> usr
7 File(s) 2.711.003 bytes
9 Dir(s) 83.736.236.032 bytes free
I have copied that file tree to a Windows-7-Computer, it runs perfect, without installation.
An older version of GitCmd gives the following files:
D:\Programs\Gitcmd_1608>dir
Directory of D:\Programs\Gitcmd_1608
03.05.2015 13:29 <DIR> .
03.05.2015 13:29 <DIR> ..
25.08.2016 23:33 20 .bash_history
31.07.2014 19:55 <DIR> bin
31.07.2014 19:55 <DIR> cmd
31.07.2014 19:55 <DIR> doc
31.07.2014 19:55 <DIR> etc
04.02.2014 17:27 793 Git Bash.lnk
02.06.2013 12:30 708 Git Bash.vbs
31.07.2014 19:55 <DIR> lib
31.07.2014 19:55 <DIR> libexec
02.06.2013 12:30 38.203 ReleaseNotes.rtf
31.07.2014 19:56 <DIR> share
31.07.2014 19:56 <DIR> ssl
04.02.2014 17:26 566.105 unins000.dat
04.02.2014 17:25 1.243.915 unins000.exe
6 File(s) 1.849.744 bytes
10 Dir(s) 83.732.533.248 bytes free
There are some other directories, mingw3w is missing. Nevertheless it produces the adequate results. Both contains
D:\Programs\Gitcmd_1608\bin>dir sh.exe
04.02.2014 17:27 540.672 sh.exe D:\Programs\Gitcmd\bin>dir sh.exe
25.08.2016 13:47 43.240 sh.exe
There are some changes in the tool suite, but the behaviour for the usage is the same.
2 sh.exe
Topic:.git.cmd.sh.
The D:\Programs\Gitcmd ... \bin\sh.exe is a windows program to run linux shell scripts or linux commands.
2.1 pure run >sh.exe
Topic:.git.cmd.sh.pure.
Without any other action, only invoked from a Windows command line (double click in explorer), it opens a linux-like command window. That shell window gets the environment variables from MS-Windows and sets the path variable (slightly) properly. One can type in some linux commands, here is an example content of the shell window after some commands:
Hartmut(at)lenovo-a6f13ea5 MINGW32 /bin $ pwd
/bin $ whoami
Hartmut $ ls / -all
total 4080
drwxr-xr-x 1 hartmut 197121 0 Aug 29 11:50 .
drwxr-xr-x 1 hartmut 197121 0 Aug 29 11:50 ..
-rw-r--r-- 1 hartmut 197121 18765 Aug 9 19:02 LICENSE.txt
-rw-r--r-- 1 hartmut 197121 77551 Aug 25 15:06 ReleaseNotes.html
drwxr-xr-x 1 hartmut 197121 0 Aug 29 11:38 bin
drwxr-xr-x 1 hartmut 197121 0 Aug 29 11:38 cmd
drwxr-xr-x 1 hartmut 197121 0 Aug 29 11:38 dev
drwxr-xr-x 1 hartmut 197121 0 Aug 29 11:38 etc
-rwxr-xr-x 1 hartmut 197121 151272 Aug 25 13:47 git-bash.exe
-rwxr-xr-x 1 hartmut 197121 150760 Aug 25 13:47 git-cmd.exe
drwxr-xr-x 1 hartmut 197121 0 Aug 29 11:38 mingw32
dr-xr-xr-x 9 hartmut 197121 0 Aug 29 14:49 proc
drwxr-xr-x 1 hartmut 197121 0 Aug 29 14:49 tmp
-rw-r--r-- 1 hartmut 197121 996808 Aug 29 11:38 unins000.dat
-rwxr-xr-x 1 hartmut 197121 1293032 Aug 29 11:34 unins000.exe
-rw-r--r-- 1 hartmut 197121 22815 Aug 29 11:38 unins000.msg
drwxr-xr-x 1 hartmut 197121 0 Aug 29 11:38 usr $ echo $PATH
/mingw32/bin:/usr/bin:/c/Dokumente und Einstellungen/Hartmut/bin:/d/Programs/Pyt
hon27:/d/Programs/Python27/Scripts:/d/Batch:/d/Progs/BAT_EXE:/d/Progs/JAVA/jre7/
bin:/c/WINDOWS/system32:/c/WINDOWS:/c/WINDOWS/System32/Wbem:/c/Programme/Microso
ft SQL Server/90/Tools/binn:/d/Progs/Bazaar:/c/Programme/Skype/Phone:/d/Programs
/Bazaar $ echo $HOMEDRIVE
C: $ echo $HOMEPATH
\Dokumente und Einstellungen\Hartmut $ echo $HOME
/c/Dokumente und Einstellungen/Hartmut $ git --version
git version 2.9.3.windows.2 $
The environment variables $HOMEDRIVE and $HOMEPATH are set in the windows environment. The $HOME is set newly for this shell with the input of $HOMEDRIVE and $HOMEPATH. The $PATHis set from the given path but enhanced with /mingw32/bin:/usr/bin and change ; to : (Windows separator ; versus Unix separator :).
The root of the linux directory is built internally. The root is the parent directory from the bin\sh.exe invocation. But the bin itself where sh.exe is stored is not member of. Instead usr\bin\ is mounted as bin/ which is in the path. Furthermore /c/ and /d/ are available which is the whole hard disk's content. /c/ and /d/ are not shown with the ls command, but they are available though.
2.2 run sh.exe in a batch file with some environment variables
Topic:.git.cmd.sh.bat.
The HOMEDRIVE and the HOMEPATH environment variable may be other than for windows usage. Therefore they are set before, and then sh.exe is called:
Content of unix_window.bat:
@echo off
set PATH=D:\Programs\Gitcmd\bin;%PATH%
set HOMEPATH=\vishia\HOME
set HOMEDRIVE=D:
::sh.exe --login -i
sh.exe
The PATH extension and the environment variables may be set in the Windows system environment in this kind already, but if they are set only in this batch, then its changed content is valid only for that session.
The variant with --login -i came from an older git cmd tool suite (from 2010 I think), it has no effect for the newer one.
That batch creates a Unix/Linux shell window to have some experiences with Linux command line invocations.
2.3 run sh.exe in a batch file to execute one linux cmd, especially git with options
Topic:.git.cmd.sh.batcmd.
Content of unix_cmd.bat:
@echo off
set PATH=D:\Programs\Gitcmd\bin;%PATH%
set HOMEPATH=\vishia\HOME
set HOMEDRIVE=D:
REM The only one argument of this batch should be given with "" usual,
REM because the argument of the batch is the command with arguments for sh.exe-execution.
REM -x to output the command as they are executed.
REM -c to run the following argument in "" as command, then exit.
REM Write unix_cmd.bat "cmd arg1 'arg2 with spaces' arg3" for arguments with spaces.
echo on
sh.exe -x -c %1
This executes the given command by argument.
If that batch is invoked from another batch for example with a complex git command, one should regard some special rules for batch processing in windows.
Example content of a test-gitlog.bat:
unix_cmd.bat "git log --date=iso -z -b --ignore-space-change --no-textconv '--format=tformat:Commit::%%H %%h %%an %%ad %%+s' org/vishia/util/CalculatorExpr.java" >test.txt
The linux cmd should be written as one argument in "...." for the batch. The same rule is valid if sh.exe -c "command" will be invoked.
Note that the character % should be written twice: %% because the batch processing in windows detect that % as expansion switch for environment variables. %% expands to a single %. The same rule is valid if sh.exe was invoked immediately in a batch.
2.4 run sh.exe in a batch file to execute a shell script
Topic:.git.cmd.sh.batscript.
Content of unix_script.bat:
@echo off
set PATH=D:\Programs\Gitcmd\bin;%PATH%
set HOMEPATH=\vishia\HOME
set HOMEDRIVE=D:
REM -x to output the command as they are executed.
echo on
sh.exe -x %1
The sh.exe runs the given path/to/file as a unix shell script and terminates then. The option -x is proper to see which commands are executed in the script. It is adequate echo on in windows. Adequate some echo ... lines should be written in the script.
2.5 The sh.exe executes MS-Windows executables
Topic:.git.cmd.sh.exeWin.
In a shell script all windows executables can be invoked. Only the internal shell commands are linux-typical. If executables are equal for unix and windows you can use the same linux shell scripts for both platforms, maybe it is lesser effort for maintenance. Nevertheless some options are slightly different.
2.6 Run sh.exe from a Java application
Topic:.git.cmd.sh.java.
Java provides with the system's class javadoc-java/lang/ProcessBuilder the capability to run a opertion system process with a given executable. That works for MS-Windows, for Linux and all other platforms.
The class srcJava_vishiaBase/org/vishia/cmd/CmdExecuter builds a wrapper surround the java/lang/ProcessBuilder to help deal with input, output, abort, and several additional possibilities. That class is used to run sh.exe respectively git from a Java application: srcJava_vishiaGui/org/vishia/gitGui/GitGui.
CmdExecuter cmd = new CmdExecuter();
.....
void initializeCmd() {
Map<String, String> env = cmd.environment();
env.put("HOMEPATH", "\\vishia\\HOME");
env.put("HOMEDRIVE", "D:");
String sPath = env.get("PATH");
sPath = "D:\\Programs\\Gitcmd\\bin;" + sPath;
env.put("PATH", sPath);
}
.....
public void revisionsCommit(String sGitDir, String sFile) {
cmd.setCurrentDir(new File(sGitDir));
out.buffer().setLength(0);
out.assign(out.buffer()); //to reset positions to the changed out.buffer()
String[] args ={"D:/Programs/Gitcmd/bin/sh.exe", "-x", "-c", "git log --date=iso '--pretty=raw' '" + sFile + "'"};
int error = cmd.execute(args, null, out, null);
out.firstlineMaxpart();
There are the adequate operations like in the MS-Windows-batches above. Only with Java syntax. The PATH enhancement is valid only for the running cmd, not for the start. Therefore the sh.exe should be invoked with the full path. The special arguments should be taken from a config file, it is TODO yet.
3 git log
Topic:.git.cmd.log.
It offers a history of all commits, maybe for the whole repository, for some branches or especially for one file.
--pretty=format:%H %an %ad %+s
It seems to be a format in one line-thinking, proper for simply parsing algorithm for example with pearl text processing. Therefore the format flag ,%s, writes the commit message in one line. All line-feed characters are replaces by spaces. That has the disadvantage that the originally commit message are garbled.
In conclusion the printf-like format is not able to use fortunately. I uses the --pretty=raw format and parse it with a well Java parser srcJava_vishiaBase/org/vishia/util/StringPartScan.
It is in progress .... TODO
MS-Windows中的Git命令行的更多相关文章
- 两张图让git新手在项目中运用git命令行
创建分支命令: git branch (branchname) 切换分支命令: git checkout (branchname) 当你切换分支的时候,Git 会用该分支的最后提交的快 ...
- Python - Git for windows 下使用 交互式命令行
1. 概述 尝试在 windows 环境的 git 命令行使用 python3 的交互模式 2. 环境 OS win10 1905 git 2.20.1 mintty 2.9.4 python 3.7 ...
- windows下使用TortoiseGit代替Git命令行操作
windows下使用TortoiseGit代替Git命令行操作 大家在使用svn的时候,都非常喜欢使用小乌龟,也就是TortoiseSVN:那么git也有小乌龟版本,即TortoiseGit. 1.安 ...
- Windows下的cmd命令行中设置环境编码
我们都知道,Windows下的cmd命令行默认编码是Windows系统的编码,就是ANSI编码或者说是GBK编码的,这样我们编写的很多应用比如php编写utf-8编码的应用在命令行下面运行时都会出现乱 ...
- Windows:将cmd命令行添加到右键中方法
win10中将命令行cmd添加到右键的方法 Windows cmd 右键 win10 命令行 最近在学python,所以会用到很多库文件,但是有的库文件需要下载whl文件再通过cmd进行安装,所以每次 ...
- Git命令行(转用于学习和记录)
Git命令行介绍和使用说明(持续更新) 参见:<Git 中文简体教程> 一. 命令“git”或者“git help”查询常用命令 [add]: “git add”——不但是用来添加不在版本 ...
- 实现Linux与Windows下一致的命令行
这其实是个非常简单的东西. 我们会写一些命令行的工具,一般跨平台的话,会用python或者perl写,比如叫foo.py,然后在Windows和Linux下调用这个脚本: Linux: foo.py ...
- Windows系统下用命令行编译C/C++程序过程总结
转自:http://www.cnblogs.com/caikehe/archive/2013/01/12/2858017.html (1)先用记事本编写如下所示的代码,并另存为hello.cpp,假设 ...
- QT中QProcess调用命令行的痛苦经历(调用Winrar,设置工作目录,获得输出,注意引号与括号,等等)
QT中QProcess调用命令行的痛苦经历 阅读目录 创建压缩包的方法 在QT中调用命令行 在QT中调用C++创建的dll 在QT程序中需要将某些目录和文件压缩为一个rar的压缩包,于是想到了在Q ...
随机推荐
- File §1
The Class of File, it can be seen as one document, also can be seen as list of documents. File f = ...
- maven编译不通过:软件包com.sun.org.apache.xml.internal.security.utils.Base64 不存在
问题:代码中使用了sun公司的第三方私有库,导致编译不通过 maven打包异常:软件包com.sun.org.apache.xml.internal.security.utils.Base64 不存 ...
- vc709时钟信号报单端信号错误的记录
话说,为什么我又要跑去搞fpga玩了,不是应该招个有经验的开发人员么?大概是练度不够吧…… Xilinx这个板子阿,真鸡儿贵,我这还没啥基础,慢慢试吧: 看了乱七八糟各种文档先不提,我还是决定先控制L ...
- CSS 选择器权重计算规则
其实,CSS有自己的优先级计算公式,而不仅仅是行间>内部>外部样式:ID>class>元素. 一.样式类型 1.行间 <h1 style="font-size: ...
- show processlist命令与kill 线程
show [full] processlist show processlist显示正在运行的线程.如果有process权限,则可以查看所有正在运行的线程.否则,只能看到自己的线程.如果不使用full ...
- Python调用大漠插件
Python版本要用32位的?我去官网下载,太慢了,就在腾讯软件里面下载了一个,结果实验成功 import win32com.client dm = win32com.client.Dispatch( ...
- PHP 变量类型的强制转换 & 创建空对象
PHP 在变量定义中不需要(或不支持)明示的类型定义:变量类型是根据使用该变量的上下文所决定的. 也就是说,如果把一个字符串值赋给变量 var,var 就成了一个字符串.如果又把一个整型值赋给 var ...
- Golang的数组初始化方式及for-range遍历
package main import ( "fmt" ) func main() { ]], , } //定义并初始化长度为3的数组 fmt.Println(arr1) //[1 ...
- TCP编程:系统出现 TIME_WAIT 原因及解决办法
解决办法 打开 sysctl.conf 文件,修改以下几个参数: net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_ti ...
- 02: pycharm远程linux开发和调试代码
1.1 配置远程linux主机信息 参考博客:https://www.cnblogs.com/lei0213/p/7898301.html 1) 选择Tools--Deployment--Config ...