Windows下从零搭建Git本地仓库并连接公司GitLab服务器:完整图形化操作指南
一、本文适用场景
本文适用于以下场景:
- 公司已经部署好GitLab服务器;
- 开发电脑使用Windows 10或Windows 11;
- 本地已有一份源码,希望建立完整版本记录;
- 使用Git for Windows和TortoiseGit进行图形化管理;
- 需要把本地提交、分支和标签上传到公司GitLab;
- 项目可能包含嵌入式源码、Linux内核源码、配置文件和正式发布文件。
本文以以下项目为例:
项目显示名称:MCH_Linux_Kernel
项目路径:mch_linux_kernel
本地主分支:master
远程仓库别名:origin
最终希望形成:
本地工作目录
D:\\1@ruige\\MCH源码\\MCH-kernel-git
│
│ Push / Pull
▼
公司GitLab服务器
http://172.16.10.189:8080/wwj/mch_linux_kernel.git
如果有三个连续版本,最终版本历史可以是:
master
● 以太网压力测试版本
│ Tag:test-ethernet-stress-v1
│
● 20260113正式出货版本
│ Tag:release-20260113
│
● 原始内核基线版本
Tag:baseline-imx-4.1.15-2.1.0-ga
二、先理解Git中的几个核心概念
1. 工作区
工作区就是资源管理器中看到的项目文件夹,例如:
D:\\1@ruige\\MCH源码\\MCH-kernel-git
你编辑的.c、.h、.dts、Makefile等文件都位于工作区。
2. 暂存区
执行Add以后,文件进入暂存区,表示:
这些文件准备进入下一次提交。
Add并不等于已经产生版本记录。
3. 本地仓库
执行Commit后,暂存区中的内容进入本地仓库。
本地仓库数据保存在隐藏目录:
.git
.git中包含:
- 全部提交记录;
- 分支;
- 标签;
- 暂存区;
- 远程仓库地址;
- 本地配置。
删除.git就等于删除整个Git版本历史。
4. 远程仓库
远程仓库是GitLab服务器上的项目,例如:
http://172.16.10.189:8080/wwj/mch_linux_kernel.git
本地执行Commit后,代码只保存在本机。
必须执行Push,代码和提交记录才会上传到GitLab。
5. origin
origin不是服务器,也不是固定关键字,而是远程仓库地址的常用别名。
例如:
origin
└─ http://172.16.10.189:8080/wwj/mch_linux_kernel.git
6. Commit、Tag和Branch的区别
Commit
记录某一次代码状态:
导入MCH Linux原始内核基线版本
Tag
给某个重要提交起固定版本名:
release-20260113
常用于:
- 基线版本;
- 正式发布版本;
- 出货版本;
- 测试里程碑。
Branch
用于隔离并行开发:
master
feature/i2c-stability
fix/communication-timeout
test/ethernet-stress
并不是每出现一个版本都必须创建分支。
三、下载安装所需软件
1. Git for Windows
官方地址:
https://git-scm.com/install/windows.html
建议下载:
64-bit Git for Windows Setup
安装时大部分选项保持默认即可。
建议注意以下选项:
默认编辑器
可选择:
Use Visual Studio Code as Git's default editor
如果电脑没有VS Code,也可保留默认编辑器。
命令行环境
建议选择:
Git from the command line and also from 3rd-party software
换行符设置
普通Windows项目可使用默认设置。
如果管理Linux内核源码,安装后再单独执行:
git config –global core.autocrlf false
安装完成后,在任意文件夹空白处右键,应看到:
Git Bash Here
Git GUI Here
打开Git Bash,输入:
git –version
看到版本号说明安装成功。
【配图1:Git Bash执行git –version】

2. TortoiseGit
官方下载地址:
https://tortoisegit.org/download/
根据电脑系统选择:
64-bit Windows installer
需要中文界面时,可在同一页面下载对应版本的中文语言包。
安装完成后重启资源管理器或重启电脑。
右键文件夹空白处,应看到:
Git Create repository here…
TortoiseGit
Git Clone…
如果TortoiseGit没有识别Git:
TortoiseGit
→ Settings
→ General
→ Git.exe Path
选择Git安装目录中的:
C:\\Program Files\\Git\\bin\\git.exe
【配图2:TortoiseGit右键菜单】

3. 7-Zip
官方下载地址:
https://www.7-zip.org/download.html
主要用于解压:
.zip
.7z
.tar
.tar.gz
.tar.bz2
Linux源码的.tar.bz2文件通常需要解压两次:
xxx.tar.bz2
↓
xxx.tar
↓
源码目录
四、配置Git提交者信息
安装完成后,在任意文件夹中右键:
Git Bash Here
执行:
git config –global user.name "wang wen"
git config –global user.email "1510513818@qq.com"
查看配置:
git config –global –list
应看到:
user.name=wang wen
user.email=1510513818@qq.com
这些信息会记录在每次Commit中。
也可以通过图形界面设置:
TortoiseGit
→ Settings
→ Git
填写:
Name:wang wen
Email:1510513818@qq.com
【配图3:TortoiseGit设置Name和Email】

五、Linux源码在Windows中的额外配置
如果项目是Linux内核或Linux BSP源码,建议执行:
git config –global core.autocrlf false
git config –global core.longpaths true
作用:
core.autocrlf false
不自动把Linux的LF换行转换为Windows的CRLF
core.longpaths true
允许Git处理较长的Windows路径
部分Linux源码中可能包含Windows敏感路径,例如:
drivers/gpu/drm/nouveau/nvkm/subdev/i2c/aux.c
如果出现:
libgit2 returned: invalid path
进入当前仓库根目录,打开Git Bash,执行:
git config –local core.protectNTFS false
git add -A
这里使用–local,表示只影响当前仓库。
六、准备本地项目目录
1. 先备份原始资料
在建立仓库前,先保留原始压缩包和交付文件:
D:\\1@ruige\\MCH源码
├─ 原始压缩包
├─ 临时解压目录
└─ MCH-kernel-git
推荐:
D:\\1@ruige\\MCH源码
├─ packages
│ ├─ 原始版本.tar.bz2
│ ├─ 20260113版本.tar.bz2
│ └─ 压力测试版本.tar.bz2
│
├─ temp
│ ├─ baseline
│ ├─ release_20260113
│ └─ ethernet_test
│
└─ MCH-kernel-git
原始压缩包放在Git仓库外部。
2. 不建议只提交压缩包
错误做法:
MCH-kernel-git
├─ kernel_1.tar.bz2
├─ kernel_2.tar.bz2
└─ kernel_3.tar.bz2
Git只能识别压缩包整体发生变化,无法比较内部源码。
推荐:
MCH-kernel-git
├─ arch
├─ block
├─ crypto
├─ Documentation
├─ drivers
├─ fs
├─ include
├─ init
├─ kernel
├─ net
├─ scripts
├─ Makefile
└─ Kconfig
3. 确认源码根目录
打开MCH-kernel-git后,应直接看到:
Makefile
arch
drivers
include
kernel
不能多套一层:
MCH-kernel-git
└─ linux-imx-source
├─ Makefile
├─ arch
└─ drivers
七、准备.gitignore
.gitignore用于排除不需要版本管理的文件。
Linux内核源码通常已经自带.gitignore,保留原文件即可。
普通嵌入式工程可以参考:
# 编译中间文件
*.o
*.obj
*.d
*.dep
*.lst
*.tmp
*.bak
# Keil等IDE用户配置
*.uvguix.*
*.user
# 临时编译目录
Objects/
Listings/
Debug/
# Windows临时文件
Thumbs.db
# macOS临时文件
.DS_Store
如果正式发布的.bin需要保存,建议放在:
release/
不要将正式发布目录误加入忽略规则。
八、创建本地Git仓库
操作前提
开始前确认:
源码已经解压
源码根目录正确
原始文件已经备份
当前目录中没有需要保留的旧.git
图形化操作
进入:
D:\\1@ruige\\MCH源码\\MCH-kernel-git
在空白位置右键:
Git Create repository here…
弹出窗口后:
不要勾选 Make it Bare
点击:
OK
成功后会生成隐藏目录:
.git
为什么不能勾选Make it Bare
Bare仓库没有普通工作区,一般用于服务器端中央仓库。
本地开发仓库需要查看和修改源码,因此不能创建为Bare仓库。
【配图4:Git Create repository here菜单】

九、把源码加入暂存区
在仓库根目录空白处右键:
TortoiseGit
→ Add…
选择:
Select all
点击:
OK
Linux内核文件很多时,图形界面可能比较慢,可以使用Git Bash:
git add -A
git add -A会同时处理:
- 新增文件;
- 修改文件;
- 删除文件。
十、提交前检查文件是否完整
右键仓库根目录:
TortoiseGit
→ Check for modifications
第一次添加后,理想状态类似:
normal=0
non-versioned=0
modified=0
added=48333
deleted=0
conflicted=0
重点确认:
non-versioned=0
conflicted=0
含义:
non-versioned=0
没有遗漏的未跟踪文件
added=48333
48333个文件已经进入暂存区
conflicted=0
不存在冲突
如果仍显示:
non-versioned=48333
added=0
说明文件尚未成功Add。
【配图5:Check for modifications完整状态】

十一、创建第一个版本提交
在仓库根目录空白处右键:
Git Commit → "master"…
提交信息填写:
导入MCH Linux原始内核基线版本
或者:
chore: import MCH Linux kernel baseline
第一次提交时不要勾选:
new branch
Amend Last Commit
Set author
Message only
Staging support
确认下方所有文件已勾选,然后点击:
Commit
提交完成后:
TortoiseGit
→ Show log
应看到第一条提交。
十二、创建第一个版本标签
在仓库根目录右键:
TortoiseGit
→ Create Tag…
填写:
Tag:
baseline-imx-4.1.15-2.1.0-ga
Target:
HEAD
Message:
MCH Linux原始内核基线版本
点击:
OK
HEAD表示当前分支最新提交。
完成后日志关系为:
master
baseline-imx-4.1.15-2.1.0-ga
● 导入MCH Linux原始内核基线版本
十三、依次导入第二个和第三个完整版本
假设版本关系为:
版本1:原始基线
版本2:20260113出货版
版本3:以太网压力测试版
采用单一master线性管理时:
master
● 版本3
│
● 版本2
│
● 版本1
1. 导入下一版本前的前提
必须确认当前工作区干净:
non-versioned=0
modified=0
added=0
deleted=0
conflicted=0
2. 下一版本是完整源码包
推荐先在仓库外解压。
如果需要完整替换当前源码,可在Git Bash中执行:
git rm -r .
该命令删除Git已跟踪的项目文件,但不会删除.git仓库目录。
然后将新版本源码根目录中的内容复制到仓库中,再执行:
git add -A
检查变化:
Added
Modified
Deleted
三类文件都应被正确处理。
3. 提交第二个版本
提交信息:
导入MCH Linux内核20260113当前出货版本
这次:
不要勾选Amend Last Commit
提交成功后创建标签:
release-20260113
4. 提交第三个版本
提交信息:
导入MCH Linux内核以太网压力测试配置版本
仍然:
不要勾选Amend Last Commit
提交后创建标签:
test-ethernet-stress-v1
最终日志应为:
master、test-ethernet-stress-v1
● 以太网压力测试版本
│
release-20260113
● 20260113出货版本
│
baseline-imx-4.1.15-2.1.0-ga
● 原始内核基线版本
【配图6:三条版本提交记录】

十四、Amend Last Commit什么时候使用
Amend Last Commit表示修改上一次提交,而不是创建新提交。
适合:
- 上一次提交漏掉了文件;
- 上一次提交信息写错;
- 上一次提交还没有推送给其他人。
例如:
20260113出货版漏了21个.dts文件
正确流程:
Add这21个文件
→ Commit
→ 勾选Amend Last Commit
→ Commit
完成后仍只有一条20260113提交。
已经推送后不要随意Amend
如果提交已经上传GitLab并被其他人使用,不建议Amend。
此时应新建修复提交:
fix: 补充20260113出货版本遗漏的设备树文件
因为Amend会改变提交SHA,并重写历史。
十五、在GitLab服务器创建空项目
打开公司GitLab:
http://172.16.10.189:8080
点击:
New project
→ Blank project
填写:
Project name:
MCH_Linux_Kernel
Project slug:
mch_linux_kernel
Project description:
MCH项目i.MX6平台Linux内核源码仓库,包含原始基线版本、20260113出货版本及以太网压力测试版本。
Visibility Level选择:
Private
最重要的是:
不要勾选 Initialize repository with a README
因为本地已经存在提交历史。
如果服务器先生成README,就会额外产生一套服务器提交历史,第一次Push可能出现非快进或历史不相关问题。
点击:
Create project
项目创建完成后应显示:
The repository for this project is empty
十六、复制GitLab远程地址
进入项目首页,点击:
Clone ▼
复制:
Clone with HTTP
例如:
http://172.16.10.189:8080/wwj/mch_linux_kernel.git
也可以使用SSH地址,但第一次配置时HTTP更直观。
不要手动猜仓库地址,应以GitLab页面显示的Clone地址为准。
【配图19:Clone with HTTP地址】
十七、本地配置远程仓库origin
图形化方式
回到本地仓库根目录:
D:\\1@ruige\\MCH源码\\MCH-kernel-git
空白处右键:
TortoiseGit
→ Settings
→ Git
→ Remote
填写:
Remote:
origin
URL:
http://172.16.10.189:8080/wwj/mch_linux_kernel.git
使用HTTP时:
Putty Key:留空
点击:
Add New或Save
→ Apply
→ OK
命令行方式
在仓库根目录打开Git Bash:
git remote add origin "http://172.16.10.189:8080/wwj/mch_linux_kernel.git"
检查:
git remote -v
正确结果:
origin http://172.16.10.189:8080/wwj/mch_linux_kernel.git (fetch)
origin http://172.16.10.189:8080/wwj/mch_linux_kernel.git (push)
这一步完成后,本地仓库和GitLab服务器才真正建立联系。
【配图20:TortoiseGit Remote配置页面】
十八、第一次Push到GitLab
在本地仓库根目录空白处右键:
TortoiseGit
→ Push…
按照下面设置。
Ref
Local branch:
master
Remote branch:
master
Destination
Remote:
origin
Options
勾选:
Set upstream/track remote branch
Include Tags
不要勾选:
Force
Force with lease
完整配置:
本地master → 远程master
Remote:origin
☑ Set upstream/track remote branch
☑ Include Tags
☐ Force
☐ Force with lease
点击:
OK
第一次上传可能需要输入:
Username:GitLab用户名
Password:GitLab登录密码或访问令牌
Linux内核仓库文件多、体积大,首次Push可能需要几分钟。
上传过程中会看到:
Counting objects
Compressing objects
Writing objects
不要中断。
【配图21:TortoiseGit Push设置】
【配图22:Push上传进度】
十九、命令行Push方法
图形界面对应命令为:
git push -u origin master
git push origin –tags
其中:
-u
用于建立跟踪关系:
本地master ↔ origin/master
以后可以直接执行:
git push
二十、检查是否上传成功
1. GitLab项目首页
刷新页面后,应能看到源码目录:
Documentation
arch
drivers
include
kernel
Makefile
2. 检查Commits
进入:
Repository
→ Commits
或者点击项目首页的:
3 Commits
应看到三条版本记录。
3. 检查Tags
进入:
Repository
→ Tags
应看到:
baseline-imx-4.1.15-2.1.0-ga
release-20260113
test-ethernet-stress-v1
4. 检查Branches
进入:
Repository
→ Branches
如果三个版本都在线性master分支上,只看到:
master
是正常的。
5. 本地检查
Git Bash执行:
git remote -v
git branch -vv
git status
理想结果类似:
* master e59f2fd [origin/master] 导入MCH Linux内核以太网压力测试版本
以及:
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
【配图23:GitLab项目3 Commits、1 Branch、3 Tags】
【配图24:本地origin/master日志】
二十一、后续日常开发流程
以后不需要重新创建仓库,也不需要重新配置origin。
标准流程:
Pull
→ 修改源码
→ 编译测试
→ Check for modifications
→ Add
→ Commit
→ Push
开始工作前
TortoiseGit
→ Pull
或者:
git pull
修改完成后
检查:
TortoiseGit
→ Check for modifications
加入暂存区:
TortoiseGit
→ Add
提交:
Git Commit → master
上传:
TortoiseGit
→ Push
二十二、推荐的提交说明规范
可以使用以下前缀:
feat:新增功能
fix:修复问题
docs:修改文档
refactor:重构代码
test:测试相关修改
chore:工程配置或仓库整理
release:正式发布
示例:
feat: 增加以太网压力测试功能
fix: 修复I2C通信超时问题
docs: 补充MCH内核编译说明
chore: 更新双核配置文件
release: 发布MCH内核20260113版本
一次Commit应尽量只解决一类问题。
二十三、正式发布流程
正式发布前:
源码已提交
工作区干净
编译成功
板卡启动正常
功能测试通过
回归测试通过
创建标签:
TortoiseGit
→ Create Tag
例如:
release-v1.0.0
标签说明:
MCH Linux内核V1.0.0正式出货版本
然后Push时勾选:
Include Tags
或者执行:
git push origin –tags
二十四、多人协作推荐流程
多人项目不建议所有人直接向master提交。
推荐:
master
├─ feature/i2c-stability
├─ fix/fan-timeout
└─ test/ethernet-stress
流程:
从master创建分支
→ 修改和测试
→ Commit
→ Push分支
→ GitLab创建Merge Request
→ 代码评审
→ 合并回master
→ 发布时创建Tag
常见分支名:
feature/功能名称
fix/问题名称
test/测试名称
release/版本号
二十五、GitLab项目建议配置
1. 关闭不需要的Auto DevOps
如果没有配置GitLab Runner,也没有CI编译需求:
Settings
→ CI/CD
→ Auto DevOps
关闭Auto DevOps,避免每次Push产生无意义的失败流水线。
2. 配置成员
进入:
Project information
→ Members
常见权限:
Developer:普通开发人员
Maintainer:项目负责人
3. 保护master
多人协作时进入:
Settings
→ Repository
→ Protected Branches
保护master,通过Merge Request合并代码。
单人归档项目可暂时允许Maintainer直接Push。
二十六、常见问题
1. repository not found
原因:
- URL错误;
- 项目路径错误;
- GitLab账号没有权限。
处理:
重新从GitLab Clone按钮复制地址
检查origin
检查项目成员权限
2. HTTP Basic: Access denied
原因:
- 用户名或密码错误;
- GitLab要求使用访问令牌;
- 当前账号没有Push权限。
处理:
确认GitLab用户名
确认密码或Token
联系管理员确认认证方式
3. rejected non-fast-forward
说明远程仓库已有本地不存在的提交。
常见原因:
创建GitLab项目时勾选了README
新项目最干净的处理方法:
删除远程项目
重新创建Blank project
不要勾选README
重新Push
不要直接使用Force Push。
4. 能看到Commit但看不到Tag
说明标签没有Push。
执行:
git push origin –tags
或Push时勾选:
Include Tags
5. TortoiseGit Add显示There is nothing to add
可能原因:
- 选中的是某个子目录;
- 待添加文件位于其他目录;
- 文件已经进入暂存区;
- 文件被.gitignore忽略。
应从仓库根目录执行:
Check for modifications
检查:
non-versioned
added
ignored
6. Add后文件仍显示
如果状态是:
Added
说明已经成功进入暂存区,只是尚未Commit。
Add成功并不代表列表会立即消失。
7. 提交大量文件时显示Auto packing
提示:
Auto packing the repository in background for optimum performance.
属于正常的Git仓库压缩整理过程。
不要点击Abort,等待完成即可。
8. 项目名称写错
GitLab显示名称可在:
Settings
→ General
修改。
项目路径改名后,本地需要更新origin:
git remote set-url origin "新的仓库地址"
本地文件夹可直接重命名,不影响内部Git历史。
二十七、从零建库完整检查清单
软件环境
□ 已安装Git for Windows
□ 已安装TortoiseGit
□ 已安装7-Zip
□ git –version正常
□ TortoiseGit右键菜单正常
本地仓库
□ 原始源码已备份
□ 源码已正确解压
□ 仓库根目录结构正确
□ .gitignore已配置
□ 用户名和邮箱已配置
□ 已初始化Git仓库
□ 未勾选Make it Bare
□ 已Add全部文件
□ non-versioned=0
□ 已完成Commit
□ 重要版本已创建Tag
□ 工作区干净
GitLab服务器
□ 创建Blank project
□ 项目名正确
□ 项目slug正确
□ Visibility选择Private
□ 未勾选Initialize repository with README
□ 成员权限正确
本地与远程关联
□ 已复制正确Clone URL
□ 已配置origin
□ git remote -v正确
□ 已Push master
□ 已建立origin/master跟踪关系
□ 已Push全部Tags
最终验证
□ GitLab可以看到源码
□ Commits数量正确
□ Tags数量正确
□ Branches数量正确
□ 本地工作区干净
□ 本地显示origin/master
二十八、完整命令汇总
# 配置用户信息
git config –global user.name "wang wen"
git config –global user.email "1510513818@qq.com"
# Linux源码建议配置
git config –global core.autocrlf false
git config –global core.longpaths true
# 初始化本地仓库
git init
# Linux特殊路径兼容
git config –local core.protectNTFS false
# 加入全部变化
git add -A
# 创建提交
git commit -m "导入MCH Linux原始内核基线版本"
# 创建标签
git tag -a baseline-imx-4.1.15-2.1.0-ga -m "MCH Linux原始内核基线版本"
# 配置远程仓库
git remote add origin "http://172.16.10.189:8080/wwj/mch_linux_kernel.git"
# 查看远程地址
git remote -v
# 首次推送并建立跟踪
git push -u origin master
# 推送全部标签
git push origin –tags
# 查看分支跟踪
git branch -vv
# 查看状态
git status
# 后续日常同步
git pull
git add -A
git commit -m "fix: 修复具体问题"
git push
二十九、核心原则
Add只是准备提交
Commit只保存到本地
Push才会上传服务器
Pull用于获取服务器最新代码
Tag用于标记固定版本
Branch用于隔离并行开发
origin用于连接本地和远程仓库
.git保存全部本地版本历史
只要能够回答以下问题,版本管理就是有效的:
当前正式版本是什么?
这个版本相对上一版修改了什么?
出现问题时应该回退到哪个Tag?
谁在什么时候提交了这次修改?
本地代码是否已经同步到服务器?
网硕互联帮助中心




评论前必须登录!
注册