Git 实战:如何将本地 .NET 项目推送到 GitLab 私有仓库

本文详细介绍如何将一个包含多个子项目的 .NET 解决方案完整推送到 GitLab 私有仓库,涵盖远程仓库配置、凭据认证、受保护分支处理等实战技巧。

一、项目背景

最近接手了一个 .NET 游戏管理后台项目(WHQJAdmin),需要将本地所有工程代码推送到公司内部的 GitLab 私有仓库。项目结构如下:

```

WHQJAdmin/

├── Services/

│ ├── Game.Data/

│ ├── Game.Entity/

│ ├── Game.Facade/

│ └── Game.IData/

├── WebProjects/

│ └── Game.Web/

└── WHQJAdmin.sln

```

远程仓库地址:`http://192.168.1.19/dev_group/game_admin_vue_net10.git\`

二、添加远程仓库

首先检查当前的 Git 状态和远程仓库配置:

```bash

git status

git remote -v

```

添加新的远程仓库(命名为 `dev`):

```bash

git remote add dev http://192.168.1.19/dev_group/game_admin_vue_net10.git

```

验证远程仓库是否添加成功:

```bash

git remote -v

```

输出应显示:

```

dev http://192.168.1.19/dev_group/game_admin_vue_net10.git (fetch)

dev http://192.168.1.19/dev_group/game_admin_vue_net10.git (push)

origin https://github.com/tonyimax/whdlm.git (fetch)

origin https://github.com/tonyimax/whdlm.git (push)

```

三、配置认证凭据

3.1 使用 Access Token 认证

GitLab 私有仓库推送需要认证。推荐使用 **Personal Access Token** 而非密码:

  1. 登录 GitLab,进入 `Settings` → `Access Tokens`

  2. 创建具有 `write_repository` 权限的 Token

  3. 将 Token 嵌入远程仓库 URL:

```bash

git remote set-url dev http://tonyimax:glpat-xxxxxxxxxxx@192.168.1.19/dev_group/game_admin_vue_net10.git

```

> ⚠️ **安全提示**:Token 相当于密码,请勿泄露或提交到代码仓库!

3.2 可选:配置 Git 凭据缓存

```bash

git config credential.helper store

```

四、提交本地代码

4.1 添加所有文件

```bash

git add -A

```

4.2 提交变更

```bash

git commit -m "Add WHQJAdmin projects"

```

提交结果示例:

```

main c77986d\] Add WHQJAdmin projects 20333 files changed, 2095978 insertions(+), 145114 deletions(-) create mode 100644 Services/Game.Data/Game.Data.csproj create mode 100644 WebProjects/Game.Web/Program.cs ... \`\`\` ## 五、处理受保护分支 ### 5.1 常见问题 直接推送时可能遇到以下错误: \*\***错误 1:强制推送被拒绝**\*\* \`\`\` remote: GitLab: You are not allowed to force push code to a protected branch on this project. ! \[remote rejected\] main -\> main (pre-receive hook declined) \`\`\` \*\***错误 2:远程仓库已有内容**\*\* \`\`\` ! \[rejected\] main -\> main (fetch first) \`\`\` \*\***错误 3:受保护分支无法推送**\*\* \`\`\` remote: GitLab: You are not allowed to push code to protected branches on this project. ! \[remote rejected\] main -\> main (pre-receive hook declined) \`\`\` ### 5.2 解决方案 GitLab 的 \`main\` 分支通常设置为\*\***受保护分支**\*\*,防止意外推送。有两种解决方案: #### 方案一:先拉取再推送(需要推送权限) \`\`\`bash git pull dev main --allow-unrelated-histories --no-edit git push -u dev main \`\`\` #### 方案二:推送到新分支(推荐) \`\`\`bash git push -u dev main:dev_branch \`\`\` 推送成功后输出: \`\`\` 分支 'main' 设置为使用变基来跟踪 'dev/dev_branch'。 To http://192.168.1.19/dev_group/game_admin_vue_net10.git \* \[new branch\] main -\> dev_branch \`\`\` ## 六、创建合并请求(Merge Request) 推送到 \`dev_branch\` 分支后,在 GitLab 上创建 Merge Request: 1. 访问 GitLab 项目页面 2. 点击 \`Merge requests\` → \`New merge request\` 3. 源分支选择 \`dev_branch\`,目标分支选择 \`main\` 4. 填写合并请求说明,提交审核 或直接访问: \`\`\` http://gitlab.example.com/dev_group/game_admin_vue_net10/-/merge_requests/new?merge_request%5Bsource_branch%5D=dev_branch \`\`\` ## 七、完整命令汇总 \`\`\`bash # 1. 添加远程仓库 git remote add dev http://192.168.1.19/dev_group/game_admin_vue_net10.git # 2. 配置 Token 认证 git remote set-url dev http://tonyimax:glpat-xxxxxxxxxxx@192.168.1.19/dev_group/game_admin_vue_net10.git # 3. 提交所有代码 git add -A git commit -m "Add WHQJAdmin projects" # 4. 推送到新分支(避开受保护分支限制) git push -u dev main:dev_branch \`\`\` ## 八、常见问题排查 \| 问题 \| 原因 \| 解决方案 \| \|------\|------\|----------\| \| \`Access denied\` \| Token 错误或权限不足 \| 检查 Token 是否有效,确认有 \`write_repository\` 权限 \| \| \`protected branch\` \| 分支受保护 \| 推送到新分支,然后创建 Merge Request \| \| \`fetch first\` \| 远程有本地没有的提交 \| 先 \`git pull\` 合并再推送 \| \| \`could not read Username\` \| HTTP 认证失败 \| 将 Token 嵌入 URL 或配置凭据助手 \| ## 九、总结 本文介绍了将 .NET 项目推送到 GitLab 私有仓库的完整流程,重点解决了以下问题: 1. ✅ 多远程仓库配置 2. ✅ Access Token 认证配置 3. ✅ 受保护分支的正确处理方式 4. ✅ Merge Request 创建流程 对于企业级开发,建议使用受保护分支 + Merge Request 的工作流,确保代码质量和权限管控。 --- \*\***参考资料**\*\*: - \[GitLab Protected Branches\](https://docs.gitlab.com/ee/user/project/protected_branches.html) - \[GitLab Personal Access Tokens\](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html) - \[Git Remote 命令详解\](https://git-scm.com/docs/git-remote) \> 欢迎关注我,获取更多实战技术文章!

相关推荐
刘一说2 小时前
Git 工具知识全景图:从核心概念到高效协作实践
大数据·git·elasticsearch
贪嘴2 小时前
Visual Studio 2026 不支持 .net upgrade assistant 升级助手 安装失败怎么办
ide·.net·visual studio
时光追逐者2 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 68 期(2026年3.01-3.08)
c#·.net·.netcore
长沙红胖子Qt2 小时前
关于 提取git所有提交日志导出到txt文本的 解决方法
git·日志导出
专注VB编程开发20年2 小时前
深思数盾国产.NET 加密工具与 VMProtect、.NET Reactor、Zprotect、ILProtector 的优缺点
大数据·网络·.net·加密·加壳
刚入坑的新人编程2 小时前
Linux-git的使用
linux·服务器·git
步步为营DotNet2 小时前
深度解析.NET中ASP.NET Core中间件:构建高效Web应用的关键环节
中间件·asp.net·.net
jfqqqqq3 小时前
换新电脑后拷贝的git仓库因为所属用户不同导致不能操作
git·所属用户