Windows下从零搭建Git本地仓库并连接公司GitLab服务器完整图形化操作指南一、本文适用场景本文适用于以下场景公司已经部署好GitLab服务器开发电脑使用Windows 10或Windows 11本地已有一份源码希望建立完整版本记录使用Git for Windows和TortoiseGit进行图形化管理需要把本地提交、分支和标签上传到公司GitLab项目可能包含嵌入式源码、Linux内核源码、配置文件和正式发布文件。本文以以下项目为例项目显示名称MCH_Linux_Kernel 项目路径mch_linux_kernel 本地主分支master 远程仓库别名origin最终希望形成本地工作目录 D:\1ruige\MCH源码\MCH-kernel-git │ │ Push / Pull ▼ 公司GitLab服务器 http://172.16.10.189:8080/wwj/mch_linux_kernel.git如果有三个连续版本最终版本历史可以是master ● 以太网压力测试版本 │ Tagtest-ethernet-stress-v1 │ ● 20260113正式出货版本 │ Tagrelease-20260113 │ ● 原始内核基线版本 Tagbaseline-imx-4.1.15-2.1.0-ga二、先理解Git中的几个核心概念1. 工作区工作区就是资源管理器中看到的项目文件夹例如D:\1ruige\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. originorigin不是服务器也不是固定关键字而是远程仓库地址的常用别名。例如origin └─ http://172.16.10.189:8080/wwj/mch_linux_kernel.git6. 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 Gits default editor如果电脑没有VS Code也可保留默认编辑器。命令行环境建议选择Git from the command line and also from 3rd-party software换行符设置普通Windows项目可使用默认设置。如果管理Linux内核源码安装后再单独执行gitconfig--globalcore.autocrlffalse安装完成后在任意文件夹空白处右键应看到Git Bash Here Git GUI Here打开Git Bash输入git--version看到版本号说明安装成功。【配图1Git Bash执行git --version】2. TortoiseGit官方下载地址https://tortoisegit.org/download/根据电脑系统选择64-bit Windows installer需要中文界面时可在同一页面下载对应版本的中文语言包。安装完成后重启资源管理器或重启电脑。右键文件夹空白处应看到Git Create repository here... TortoiseGit Git Clone...如果TortoiseGit没有识别GitTortoiseGit → Settings → General → Git.exe Path选择Git安装目录中的C:\Program Files\Git\bin\git.exe【配图2TortoiseGit右键菜单】3. 7-Zip官方下载地址https://www.7-zip.org/download.html主要用于解压.zip .7z .tar .tar.gz .tar.bz2Linux源码的.tar.bz2文件通常需要解压两次xxx.tar.bz2 ↓ xxx.tar ↓ 源码目录四、配置Git提交者信息安装完成后在任意文件夹中右键Git Bash Here执行gitconfig--globaluser.namewang wengitconfig--globaluser.email1510513818qq.com查看配置gitconfig--global--list应看到user.namewang wen user.email1510513818qq.com这些信息会记录在每次Commit中。也可以通过图形界面设置TortoiseGit → Settings → Git填写Namewang wen Email1510513818qq.com【配图3TortoiseGit设置Name和Email】五、Linux源码在Windows中的额外配置如果项目是Linux内核或Linux BSP源码建议执行gitconfig--globalcore.autocrlffalsegitconfig--globalcore.longpathstrue作用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执行gitconfig--localcore.protectNTFSfalsegitadd-A这里使用--local表示只影响当前仓库。六、准备本地项目目录1. 先备份原始资料在建立仓库前先保留原始压缩包和交付文件D:\1ruige\MCH源码 ├─ 原始压缩包 ├─ 临时解压目录 └─ MCH-kernel-git推荐D:\1ruige\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.bz2Git只能识别压缩包整体发生变化无法比较内部源码。推荐MCH-kernel-git ├─ arch ├─ block ├─ crypto ├─ Documentation ├─ drivers ├─ fs ├─ include ├─ init ├─ kernel ├─ net ├─ scripts ├─ Makefile └─ Kconfig3. 确认源码根目录打开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:\1ruige\MCH源码\MCH-kernel-git在空白位置右键Git Create repository here...弹出窗口后不要勾选 Make it Bare点击OK成功后会生成隐藏目录.git为什么不能勾选Make it BareBare仓库没有普通工作区一般用于服务器端中央仓库。本地开发仓库需要查看和修改源码因此不能创建为Bare仓库。【配图4Git Create repository here菜单】九、把源码加入暂存区在仓库根目录空白处右键TortoiseGit → Add...选择Select all点击OKLinux内核文件很多时图形界面可能比较慢可以使用Git Bashgitadd-Agit add -A会同时处理新增文件修改文件删除文件。十、提交前检查文件是否完整右键仓库根目录TortoiseGit → Check for modifications第一次添加后理想状态类似normal0 non-versioned0 modified0 added48333 deleted0 conflicted0重点确认non-versioned0 conflicted0含义non-versioned0 没有遗漏的未跟踪文件 added48333 48333个文件已经进入暂存区 conflicted0 不存在冲突如果仍显示non-versioned48333 added0说明文件尚未成功Add。【配图5Check 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原始内核基线版本点击OKHEAD表示当前分支最新提交。完成后日志关系为master baseline-imx-4.1.15-2.1.0-ga ● 导入MCH Linux原始内核基线版本十三、依次导入第二个和第三个完整版本假设版本关系为版本1原始基线 版本220260113出货版 版本3以太网压力测试版采用单一master线性管理时master ● 版本3 │ ● 版本2 │ ● 版本11. 导入下一版本前的前提必须确认当前工作区干净non-versioned0 modified0 added0 deleted0 conflicted02. 下一版本是完整源码包推荐先在仓库外解压。如果需要完整替换当前源码可在Git Bash中执行gitrm-r.该命令删除Git已跟踪的项目文件但不会删除.git仓库目录。然后将新版本源码根目录中的内容复制到仓库中再执行gitadd-A检查变化Added Modified Deleted三类文件都应被正确处理。3. 提交第二个版本提交信息导入MCH Linux内核20260113当前出货版本这次不要勾选Amend Last Commit提交成功后创建标签release-202601134. 提交第三个版本提交信息导入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服务器创建空项目打开公司GitLabhttp://172.16.10.189:8080点击New project → Blank project填写Project name MCH_Linux_KernelProject slug mch_linux_kernelProject 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地址为准。【配图19Clone with HTTP地址】十七、本地配置远程仓库origin图形化方式回到本地仓库根目录D:\1ruige\MCH源码\MCH-kernel-git空白处右键TortoiseGit → Settings → Git → Remote填写Remote originURL http://172.16.10.189:8080/wwj/mch_linux_kernel.git使用HTTP时Putty Key留空点击Add New或Save → Apply → OK命令行方式在仓库根目录打开Git Bashgitremoteaddoriginhttp://172.16.10.189:8080/wwj/mch_linux_kernel.git检查gitremote-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服务器才真正建立联系。【配图20TortoiseGit Remote配置页面】十八、第一次Push到GitLab在本地仓库根目录空白处右键TortoiseGit → Push...按照下面设置。RefLocal branch masterRemote branch masterDestinationRemote originOptions勾选Set upstream/track remote branch Include Tags不要勾选Force Force with lease完整配置本地master → 远程master Remoteorigin ☑ Set upstream/track remote branch ☑ Include Tags ☐ Force ☐ Force with lease点击OK第一次上传可能需要输入UsernameGitLab用户名 PasswordGitLab登录密码或访问令牌Linux内核仓库文件多、体积大首次Push可能需要几分钟。上传过程中会看到Counting objects Compressing objects Writing objects不要中断。【配图21TortoiseGit Push设置】【配图22Push上传进度】十九、命令行Push方法图形界面对应命令为gitpush-uorigin mastergitpush origin--tags其中-u用于建立跟踪关系本地master ↔ origin/master以后可以直接执行gitpush二十、检查是否上传成功1. GitLab项目首页刷新页面后应能看到源码目录Documentation arch drivers include kernel Makefile2. 检查Commits进入Repository → Commits或者点击项目首页的3 Commits应看到三条版本记录。3. 检查Tags进入Repository → Tags应看到baseline-imx-4.1.15-2.1.0-ga release-20260113 test-ethernet-stress-v14. 检查Branches进入Repository → Branches如果三个版本都在线性master分支上只看到master是正常的。5. 本地检查Git Bash执行gitremote-vgitbranch-vvgitstatus理想结果类似* master e59f2fd [origin/master] 导入MCH Linux内核以太网压力测试版本以及Your branch is up to date with origin/master. nothing to commit, working tree clean【配图23GitLab项目3 Commits、1 Branch、3 Tags】【配图24本地origin/master日志】二十一、后续日常开发流程以后不需要重新创建仓库也不需要重新配置origin。标准流程Pull → 修改源码 → 编译测试 → Check for modifications → Add → Commit → Push开始工作前TortoiseGit → Pull或者gitpull修改完成后检查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或者执行gitpush 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。执行gitpush origin--tags或Push时勾选Include Tags5. TortoiseGit Add显示There is nothing to add可能原因选中的是某个子目录待添加文件位于其他目录文件已经进入暂存区文件被.gitignore忽略。应从仓库根目录执行Check for modifications检查non-versioned added ignored6. Add后文件仍显示如果状态是Added说明已经成功进入暂存区只是尚未Commit。Add成功并不代表列表会立即消失。7. 提交大量文件时显示Auto packing提示Auto packing the repository in background for optimum performance.属于正常的Git仓库压缩整理过程。不要点击Abort等待完成即可。8. 项目名称写错GitLab显示名称可在Settings → General修改。项目路径改名后本地需要更新origingitremote set-url origin新的仓库地址本地文件夹可直接重命名不影响内部Git历史。二十七、从零建库完整检查清单软件环境□ 已安装Git for Windows □ 已安装TortoiseGit □ 已安装7-Zip □ git --version正常 □ TortoiseGit右键菜单正常本地仓库□ 原始源码已备份 □ 源码已正确解压 □ 仓库根目录结构正确 □ .gitignore已配置 □ 用户名和邮箱已配置 □ 已初始化Git仓库 □ 未勾选Make it Bare □ 已Add全部文件 □ non-versioned0 □ 已完成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二十八、完整命令汇总# 配置用户信息gitconfig--globaluser.namewang wengitconfig--globaluser.email1510513818qq.com# Linux源码建议配置gitconfig--globalcore.autocrlffalsegitconfig--globalcore.longpathstrue# 初始化本地仓库gitinit# Linux特殊路径兼容gitconfig--localcore.protectNTFSfalse# 加入全部变化gitadd-A# 创建提交gitcommit-m导入MCH Linux原始内核基线版本# 创建标签gittag-abaseline-imx-4.1.15-2.1.0-ga-mMCH Linux原始内核基线版本# 配置远程仓库gitremoteaddoriginhttp://172.16.10.189:8080/wwj/mch_linux_kernel.git# 查看远程地址gitremote-v# 首次推送并建立跟踪gitpush-uorigin master# 推送全部标签gitpush origin--tags# 查看分支跟踪gitbranch-vv# 查看状态gitstatus# 后续日常同步gitpullgitadd-Agitcommit-mfix: 修复具体问题gitpush二十九、核心原则Add只是准备提交 Commit只保存到本地 Push才会上传服务器 Pull用于获取服务器最新代码 Tag用于标记固定版本 Branch用于隔离并行开发 origin用于连接本地和远程仓库 .git保存全部本地版本历史只要能够回答以下问题版本管理就是有效的当前正式版本是什么 这个版本相对上一版修改了什么 出现问题时应该回退到哪个Tag 谁在什么时候提交了这次修改 本地代码是否已经同步到服务器
Windows下从零搭建Git本地仓库并连接公司GitLab服务器:完整图形化操作指南
发布时间:2026/7/1 18:21:15
Windows下从零搭建Git本地仓库并连接公司GitLab服务器完整图形化操作指南一、本文适用场景本文适用于以下场景公司已经部署好GitLab服务器开发电脑使用Windows 10或Windows 11本地已有一份源码希望建立完整版本记录使用Git for Windows和TortoiseGit进行图形化管理需要把本地提交、分支和标签上传到公司GitLab项目可能包含嵌入式源码、Linux内核源码、配置文件和正式发布文件。本文以以下项目为例项目显示名称MCH_Linux_Kernel 项目路径mch_linux_kernel 本地主分支master 远程仓库别名origin最终希望形成本地工作目录 D:\1ruige\MCH源码\MCH-kernel-git │ │ Push / Pull ▼ 公司GitLab服务器 http://172.16.10.189:8080/wwj/mch_linux_kernel.git如果有三个连续版本最终版本历史可以是master ● 以太网压力测试版本 │ Tagtest-ethernet-stress-v1 │ ● 20260113正式出货版本 │ Tagrelease-20260113 │ ● 原始内核基线版本 Tagbaseline-imx-4.1.15-2.1.0-ga二、先理解Git中的几个核心概念1. 工作区工作区就是资源管理器中看到的项目文件夹例如D:\1ruige\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. originorigin不是服务器也不是固定关键字而是远程仓库地址的常用别名。例如origin └─ http://172.16.10.189:8080/wwj/mch_linux_kernel.git6. 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 Gits default editor如果电脑没有VS Code也可保留默认编辑器。命令行环境建议选择Git from the command line and also from 3rd-party software换行符设置普通Windows项目可使用默认设置。如果管理Linux内核源码安装后再单独执行gitconfig--globalcore.autocrlffalse安装完成后在任意文件夹空白处右键应看到Git Bash Here Git GUI Here打开Git Bash输入git--version看到版本号说明安装成功。【配图1Git Bash执行git --version】2. TortoiseGit官方下载地址https://tortoisegit.org/download/根据电脑系统选择64-bit Windows installer需要中文界面时可在同一页面下载对应版本的中文语言包。安装完成后重启资源管理器或重启电脑。右键文件夹空白处应看到Git Create repository here... TortoiseGit Git Clone...如果TortoiseGit没有识别GitTortoiseGit → Settings → General → Git.exe Path选择Git安装目录中的C:\Program Files\Git\bin\git.exe【配图2TortoiseGit右键菜单】3. 7-Zip官方下载地址https://www.7-zip.org/download.html主要用于解压.zip .7z .tar .tar.gz .tar.bz2Linux源码的.tar.bz2文件通常需要解压两次xxx.tar.bz2 ↓ xxx.tar ↓ 源码目录四、配置Git提交者信息安装完成后在任意文件夹中右键Git Bash Here执行gitconfig--globaluser.namewang wengitconfig--globaluser.email1510513818qq.com查看配置gitconfig--global--list应看到user.namewang wen user.email1510513818qq.com这些信息会记录在每次Commit中。也可以通过图形界面设置TortoiseGit → Settings → Git填写Namewang wen Email1510513818qq.com【配图3TortoiseGit设置Name和Email】五、Linux源码在Windows中的额外配置如果项目是Linux内核或Linux BSP源码建议执行gitconfig--globalcore.autocrlffalsegitconfig--globalcore.longpathstrue作用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执行gitconfig--localcore.protectNTFSfalsegitadd-A这里使用--local表示只影响当前仓库。六、准备本地项目目录1. 先备份原始资料在建立仓库前先保留原始压缩包和交付文件D:\1ruige\MCH源码 ├─ 原始压缩包 ├─ 临时解压目录 └─ MCH-kernel-git推荐D:\1ruige\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.bz2Git只能识别压缩包整体发生变化无法比较内部源码。推荐MCH-kernel-git ├─ arch ├─ block ├─ crypto ├─ Documentation ├─ drivers ├─ fs ├─ include ├─ init ├─ kernel ├─ net ├─ scripts ├─ Makefile └─ Kconfig3. 确认源码根目录打开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:\1ruige\MCH源码\MCH-kernel-git在空白位置右键Git Create repository here...弹出窗口后不要勾选 Make it Bare点击OK成功后会生成隐藏目录.git为什么不能勾选Make it BareBare仓库没有普通工作区一般用于服务器端中央仓库。本地开发仓库需要查看和修改源码因此不能创建为Bare仓库。【配图4Git Create repository here菜单】九、把源码加入暂存区在仓库根目录空白处右键TortoiseGit → Add...选择Select all点击OKLinux内核文件很多时图形界面可能比较慢可以使用Git Bashgitadd-Agit add -A会同时处理新增文件修改文件删除文件。十、提交前检查文件是否完整右键仓库根目录TortoiseGit → Check for modifications第一次添加后理想状态类似normal0 non-versioned0 modified0 added48333 deleted0 conflicted0重点确认non-versioned0 conflicted0含义non-versioned0 没有遗漏的未跟踪文件 added48333 48333个文件已经进入暂存区 conflicted0 不存在冲突如果仍显示non-versioned48333 added0说明文件尚未成功Add。【配图5Check 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原始内核基线版本点击OKHEAD表示当前分支最新提交。完成后日志关系为master baseline-imx-4.1.15-2.1.0-ga ● 导入MCH Linux原始内核基线版本十三、依次导入第二个和第三个完整版本假设版本关系为版本1原始基线 版本220260113出货版 版本3以太网压力测试版采用单一master线性管理时master ● 版本3 │ ● 版本2 │ ● 版本11. 导入下一版本前的前提必须确认当前工作区干净non-versioned0 modified0 added0 deleted0 conflicted02. 下一版本是完整源码包推荐先在仓库外解压。如果需要完整替换当前源码可在Git Bash中执行gitrm-r.该命令删除Git已跟踪的项目文件但不会删除.git仓库目录。然后将新版本源码根目录中的内容复制到仓库中再执行gitadd-A检查变化Added Modified Deleted三类文件都应被正确处理。3. 提交第二个版本提交信息导入MCH Linux内核20260113当前出货版本这次不要勾选Amend Last Commit提交成功后创建标签release-202601134. 提交第三个版本提交信息导入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服务器创建空项目打开公司GitLabhttp://172.16.10.189:8080点击New project → Blank project填写Project name MCH_Linux_KernelProject slug mch_linux_kernelProject 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地址为准。【配图19Clone with HTTP地址】十七、本地配置远程仓库origin图形化方式回到本地仓库根目录D:\1ruige\MCH源码\MCH-kernel-git空白处右键TortoiseGit → Settings → Git → Remote填写Remote originURL http://172.16.10.189:8080/wwj/mch_linux_kernel.git使用HTTP时Putty Key留空点击Add New或Save → Apply → OK命令行方式在仓库根目录打开Git Bashgitremoteaddoriginhttp://172.16.10.189:8080/wwj/mch_linux_kernel.git检查gitremote-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服务器才真正建立联系。【配图20TortoiseGit Remote配置页面】十八、第一次Push到GitLab在本地仓库根目录空白处右键TortoiseGit → Push...按照下面设置。RefLocal branch masterRemote branch masterDestinationRemote originOptions勾选Set upstream/track remote branch Include Tags不要勾选Force Force with lease完整配置本地master → 远程master Remoteorigin ☑ Set upstream/track remote branch ☑ Include Tags ☐ Force ☐ Force with lease点击OK第一次上传可能需要输入UsernameGitLab用户名 PasswordGitLab登录密码或访问令牌Linux内核仓库文件多、体积大首次Push可能需要几分钟。上传过程中会看到Counting objects Compressing objects Writing objects不要中断。【配图21TortoiseGit Push设置】【配图22Push上传进度】十九、命令行Push方法图形界面对应命令为gitpush-uorigin mastergitpush origin--tags其中-u用于建立跟踪关系本地master ↔ origin/master以后可以直接执行gitpush二十、检查是否上传成功1. GitLab项目首页刷新页面后应能看到源码目录Documentation arch drivers include kernel Makefile2. 检查Commits进入Repository → Commits或者点击项目首页的3 Commits应看到三条版本记录。3. 检查Tags进入Repository → Tags应看到baseline-imx-4.1.15-2.1.0-ga release-20260113 test-ethernet-stress-v14. 检查Branches进入Repository → Branches如果三个版本都在线性master分支上只看到master是正常的。5. 本地检查Git Bash执行gitremote-vgitbranch-vvgitstatus理想结果类似* master e59f2fd [origin/master] 导入MCH Linux内核以太网压力测试版本以及Your branch is up to date with origin/master. nothing to commit, working tree clean【配图23GitLab项目3 Commits、1 Branch、3 Tags】【配图24本地origin/master日志】二十一、后续日常开发流程以后不需要重新创建仓库也不需要重新配置origin。标准流程Pull → 修改源码 → 编译测试 → Check for modifications → Add → Commit → Push开始工作前TortoiseGit → Pull或者gitpull修改完成后检查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或者执行gitpush 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。执行gitpush origin--tags或Push时勾选Include Tags5. TortoiseGit Add显示There is nothing to add可能原因选中的是某个子目录待添加文件位于其他目录文件已经进入暂存区文件被.gitignore忽略。应从仓库根目录执行Check for modifications检查non-versioned added ignored6. Add后文件仍显示如果状态是Added说明已经成功进入暂存区只是尚未Commit。Add成功并不代表列表会立即消失。7. 提交大量文件时显示Auto packing提示Auto packing the repository in background for optimum performance.属于正常的Git仓库压缩整理过程。不要点击Abort等待完成即可。8. 项目名称写错GitLab显示名称可在Settings → General修改。项目路径改名后本地需要更新origingitremote set-url origin新的仓库地址本地文件夹可直接重命名不影响内部Git历史。二十七、从零建库完整检查清单软件环境□ 已安装Git for Windows □ 已安装TortoiseGit □ 已安装7-Zip □ git --version正常 □ TortoiseGit右键菜单正常本地仓库□ 原始源码已备份 □ 源码已正确解压 □ 仓库根目录结构正确 □ .gitignore已配置 □ 用户名和邮箱已配置 □ 已初始化Git仓库 □ 未勾选Make it Bare □ 已Add全部文件 □ non-versioned0 □ 已完成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二十八、完整命令汇总# 配置用户信息gitconfig--globaluser.namewang wengitconfig--globaluser.email1510513818qq.com# Linux源码建议配置gitconfig--globalcore.autocrlffalsegitconfig--globalcore.longpathstrue# 初始化本地仓库gitinit# Linux特殊路径兼容gitconfig--localcore.protectNTFSfalse# 加入全部变化gitadd-A# 创建提交gitcommit-m导入MCH Linux原始内核基线版本# 创建标签gittag-abaseline-imx-4.1.15-2.1.0-ga-mMCH Linux原始内核基线版本# 配置远程仓库gitremoteaddoriginhttp://172.16.10.189:8080/wwj/mch_linux_kernel.git# 查看远程地址gitremote-v# 首次推送并建立跟踪gitpush-uorigin master# 推送全部标签gitpush origin--tags# 查看分支跟踪gitbranch-vv# 查看状态gitstatus# 后续日常同步gitpullgitadd-Agitcommit-mfix: 修复具体问题gitpush二十九、核心原则Add只是准备提交 Commit只保存到本地 Push才会上传服务器 Pull用于获取服务器最新代码 Tag用于标记固定版本 Branch用于隔离并行开发 origin用于连接本地和远程仓库 .git保存全部本地版本历史只要能够回答以下问题版本管理就是有效的当前正式版本是什么 这个版本相对上一版修改了什么 出现问题时应该回退到哪个Tag 谁在什么时候提交了这次修改 本地代码是否已经同步到服务器