Git for Windows

Git 客户端

除了自带的git GUI,还有GUI工具:TortoiseGit SourceTree

安装

安装时要注意:如果要在终端里使用,需要勾选:在wt里添加git bash配置

git bash 配置

MinGW-w64 是“Minimalist GNU for Windows 64-bit”的缩写,它把 Linux 下常见的 GCC、G++、GDB 等一整套 GNU 开发工具搬到 Windows,让你不用装虚拟机就能在 Win 上直接编译 C/C++ 源码并生成 exe。

MinGW-w64 只依赖微软自带的 C 运行库,编译出的程序体积小,拷到别的 Win 电脑就能跑,不用拖一堆额外 DLL,真正做到了绿色跨平台。

  • https://github.com/niXman/mingw-builds-binaries/releases
  • 下载版本选择:x86_64-15.2.0-release-posix-seh-ucrt-rt_v13-rev1.7z, 下载近100M,解压后近750M。
  • 文件名的具体含义看:https://chat.deepseek.com/share/hma0mnvcnkk0oho5m6

Git Bash 背后的技术支持来源于 minGW 和 msys2 等 WSL 项目,但它目标是有一个bash + git的环境

<git安装目录>\usr\bin 目录用于 Git Bash 扩展命令支持,另外,也会自动使用 Windows 的 PATH 定义,所以.exe命令也能直接使用。反过来,要使用 jq、wget 等需要下载Win版本。

Git GUI 配置为中文

如果 $GITROOT/mingw64/share/git-gui/lib/msgs/zh_cn.msg 文件存在,在中文系统中 Git-GUI 就会自动显示中文界面。

  • user安装 $GITROOT = %LocalAppData%\Programs\Git
  • 或者在在 git gui 关于里查看 git-gui lib 目录,将 zh_cn.msg 文件放到 msgs子目录里

来源:https://github.com/stayor/git-gui-zh

git bash 环境

vim ~/.vimrc内容:

set number

vim ~/.bashrc内容:

#!/bin/bash

ConsolePath=/D/CloudFiles/Sysinternals/Console
# 指定方式
Files=("7za" "curl" "jq" "wget")
for File in "${Files[@]}"; do
  alias "$File"="$ConsolePath/$File.exe"
done
# 加入PATH方式
export PATH="$ConsolePath:$PATH"

if [[ "$HOME" == "$(pwd)" ]]; then
  # 不能直接使用 cd,导致在文件目录中右键 open git bash here时,当前目录不对。
  cd /D/Downloads
fi

Git GUI 使用

完整流程(按钮顺序):签名是可选

  • 对提交进行 GPG/SSH 签名,验证提交者的身份。启用后,GitHub/GitLab 上会显示 Verified 标签。需要先配置 GPG 密钥或 SSH 签名密钥。
  • git commit -S 是带签名的提交
  修改代码 → [缓存改动] → [签名] + [提交] → [上传]
            git add     git commit -S     git push
  1. 缓存改动(Stage Changes):将工作区的改动,添加到暂存区(Index/Staging Area)。只有被缓存的文件,才会被包含在下一次提交中。
  2. 提交(Commit):将暂存区的改动打包成一个不可变的快照,写入本地仓库。每个提交有唯一的 SHA-1 哈希值。
  3. 上传(Push):将本地的提交推送到远程仓库(如 GitHub、GitLab),同步到远端。
更新 Git 缓存(Index)失败, 重新扫描将自动开始以重新同步 git-gui.

warning: in the working copy of '文件名', LF will be replaced by CRLF the next time Git touches it

是 Git 的行尾符自动转换core.autocrlf,设置为了 true 或 input,默认是true),而这些文件,当前行尾都是 LF(Unix/Linux 风格)。Git GUI打算把这些文件转换成 CRLF(Windows 风格)存入索引(Index),因此对每一个文件都发出了提醒。
解决办法:

  • 直接改用命令行暂存:git add .
  • 关闭 Git 的自动换行符转换:git config core.autocrlf false

.gitignore 文件

# .gitignore 仅对未跟踪文件生效。若文件已被 Git 管理,需先移出暂存区: git rm --cached <file>  && git commit -m "停止跟踪"

# .gitignore 文件在 Linux 系统上严格区分大小写,语言/框架专属的 https://github.com/github/gitignore 
# 默认递归匹配所有层级,除非使用了/开头;# 子目录中的 .gitignore 仅作用于当前目录及子目录,且优先级高于父目录规则。
# ! 表示否定规则(即加入到Git仓库),但父目录已被前面的规则排除,则!无效;注意:Git是从上到下逐行解析规则,后续规则可覆盖前面的冲突规则。

# *:匹配0个或多个任意字符(不包含路径分隔符 /)。# **:匹配任意层级的目录。# ?:匹配单个任意字符。# []:匹配括号内任一字符(支持范围如 [0-9])。
# 需转义特殊字符时,用 \ 前缀(如 \!important 表示字面意义的 !)
# 开头 /:仅匹配项目根目录下的内容。# 结尾 /:仅匹配目录(不匹配同名文件)。# 无 /:匹配文件和目录(可能匹配到路径中的同名部分)。

# 约定成俗 - 个人使用
*.log
logs/
build/
Axure_Html/
docs/history/
tempNotepad.md
tempNotepad.txt

# Python
.venv/
__pycache__/
.pytest_cache/
*.py[codz]
# Node.js
node_modules/
jspm_packages/
*.tsbuildinfo
# AI
.*/settings.local.json

发表回复