云计算百科
云计算领域专业知识百科平台

Windows下从零搭建Git本地仓库并连接公司GitLab服务器:完整图形化操作指南

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?
谁在什么时候提交了这次修改?
本地代码是否已经同步到服务器?

赞(0)
未经允许不得转载:网硕互联帮助中心 » Windows下从零搭建Git本地仓库并连接公司GitLab服务器:完整图形化操作指南
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!