🚀 1. 在 Ubuntu 服务器创建一个 gituser(如果已经有可跳过)

sudo adduser gituser

设置密码 → 完成。


🚀 2. 把本地 Windows 的 SSH Key 放到服务器上(强烈推荐)

▶️(1)本地 Windows 生成 SSH key

在 PowerShell 输入:

ssh-keygen -t ed25519 -C "yourname"

一路按回车,默认生成:

C:\Users\你的用户名\.ssh\id_ed25519
C:\Users\你的用户名\.ssh\id_ed25519.pub

▶️(2)把公钥上传到 Ubuntu 服务器(推荐 ssh-copy-id,如果没有可手动):

如果你能用 root 登录:

ssh-copy-id -i ~/.ssh/id_ed25519.pub gituser@服务器IP

如果没有 ssh-copy-id 就手动:

mkdir -p /home/gituser/.ssh
chmod 700 /home/gituser/.ssh

把 Windows 的 id_ed25519.pub 内容复制并写入:

nano /home/gituser/.ssh/authorized_keys

保存,设置权限:

chmod 600 /home/gituser/.ssh/authorized_keys
chown -R gituser:gituser /home/gituser/.ssh

🚀 3. SSH 登录服务器的 gituser 账户

从 Windows:

ssh gituser@服务器IP

如果成功代表 SSH key 配置成功。


🚀 4. 在服务器创建一个 Git 远程仓库(Bare Repo)

例如托管你的项目:

su - gituser

mkdir -p ~/repos/myproject.git
cd ~/repos/myproject.git
git init --bare

你现在得到了一个远程仓库:

gituser@服务器IP:~/repos/myproject.git

🚀 5. 本地 Windows 上初始化 Git 项目

进入你的代码目录:

cd D:\MatchCode\DataMining
git init
git add .
git commit -m "first commit"

🚀 6. 添加远程仓库

git remote add origin gituser@服务器IP:~/repos/myproject.git

🚀 7. 推送到服务器(第一次可能需要 master/main)

git push -u origin master

成功看到推送,表示整个链路畅通。


🚀 8. 服务器 clone 出工作目录(非 bare)

bare 仓库不能直接运行,必须 checkout 一份:

在服务器:

cd ~
git clone ~/repos/myproject.git myproject

以后更新可执行:

cd ~/myproject
git pull

❤️ 到此完成!本地 Windows 开发 → 一键推送到 Ubuntu 服务器

流程图:

Windows 开发代码
│
│ git push
▼
Ubuntu 24.04 (gituser)
~/repos/myproject.git  (bare repo)
│
│ git clone / git pull
▼
~/myproject            (真正运行的代码目录)

你的服务器可以同时拥有多个独立项目,每个项目一个独立的 bare 仓库,例如:

~/repos/project1.git
~/repos/project2.git
~/repos/my_flask_app.git
~/repos/my_ai_model.git
~/repos/myproject_new.git

只要你愿意,可以建 100 个都没问题。

下面给你一个最清晰、最实用的多项目同步模板


1. 在服务器创建新的仓库 myproject_new.git

gituser 身份:

mkdir -p ~/repos/myproject_new.git
cd ~/repos/myproject_new.git
git init --bare

2. 本地 Windows 新项目链接这个远程仓库

假设你本地新项目目录是:

D:\Projects\myproject_new

初始化:

cd D:\Projects\myproject_new
git init
git add .
git commit -m "init project"

添加远程:

git remote add origin gituser@服务器IP:~/repos/myproject_new.git

推送:

git push -u origin master

成功!


3. 服务器上 clone 出可运行目录(非 bare)

仍然是 gituser:

cd ~
git clone ~/repos/myproject_new.git myproject_new

以后更新的时候,到:

~/myproject_new

运行:

git pull

🔥 完整示例:你的多个项目会这样组织

/home/gituser/
├── repos/
│   ├── myproject.git
│   ├── myproject_new.git
│   ├── webapp.git
│   └── ai_service.git
│
├── myproject/
│   └── (真正运行的代码)
├── myproject_new/
│   └── (真正运行的代码)
├── webapp/
└── ai_service/

每个项目开发-同步流程:

  1. 在 Windows 编写代码

  2. git add . && git commit -m "update"

  3. git push

  4. 在服务器 cd ~/myproject_new && git pull

顺滑无比。


下面给你一套 最标准、最稳妥、一步到位 的流程。
你只需要 复制粘贴 即可把本地:

D:\MatchCode\DataMining

同步到你服务器的 bare 仓库:

~/repos/DataMining.git   (gituser 用户)

第一步:服务器端(Ubuntu 24.04)创建 bare 仓库

你现在应该用 gituser 登录服务器,如果你还在 root 下,请先切换:

su - gituser

然后创建仓库目录:

mkdir -p ~/repos/DataMining.git
cd ~/repos/DataMining.git
git init --bare

现在你的服务器仓库已准备好接收 push。


第二步:本地(Windows 11)给你的项目添加 remote

打开 PowerShell,进入你的项目目录:

cd D:\MatchCode\DataMining

查看本地是否已初始化 Git:

git status

如果未初始化:

git init
git add .
git commit -m "Initial commit"

再添加远程仓库 origin:

git remote add origin gituser@服务器IP:~/repos/DataMining.git

✔ 注意,gituser@服务器IP 前不要加 ssh://
~/repos/DataMining.git 不要漏 .git


第三步:把本地全部代码推送到服务器

如果你本地分支叫 main(新版 Git 默认如此):

git push -u origin main

如果你本地分支叫 master

git push -u origin master

如果你不确定你当前分支叫什么:

git branch

看到前面有 * 的就是当前分支。


🚨 若推送时报错(常见):

error: failed to push some refs...

说明服务器端仓库不是完全空的,可以强推:

git push -u origin main --force

或者 master:

git push -u origin master --force

第四步:确认服务器端是否成功接收

服务器端执行:

cd ~/repos/DataMining.git

查看是否有 objects :

du -sh .

如果有几十 KB ~ 几 MB,则说明接收成功。

如果你需要部署实际代码(不是 bare 仓库),可以 clone:

cd ~
git clone ~/repos/DataMining.git DataMining

服务器的实际运行目录:

~/DataMining/

在你的 本地 Windows 项目目录 下,只需要执行一条命令即可删除这个远端服务器配置:

✅ 删除 origin 远程仓库

进入你的项目目录:

cd D:\MatchCode\DataMining

删除远程仓库 origin:

git remote remove origin

或者:

git remote rm origin

两种写法完全一样。


✅ 查看是否已经删除成功

git remote -v

如果没有任何输出,说明远程仓库已经被移除。


🔧 如果你有多个远端(比如 origin、backup、prod),也可以分别删除:

git remote rm backup
git remote rm prod

要在 另外一台电脑 / 本地其他目录 克隆你服务器上的仓库,只需要执行一次标准的 git clone


✅ 克隆服务器上的 Git 仓库(标准方式)

在任意本地目录执行:

git clone gituser@服务器IP:~/repos/DataMining.git

例如:

git clone gituser@1.2.3.4:~/repos/DataMining.git

克隆后会生成一个目录 DataMining

DataMining/
 ├── app.py
 ├── src/
 ├── ...

🔑 注意:你必须保证服务器的 gituser 有读权限

你之前应该执行了(或者我帮你写过):

sudo chown -R gituser:gituser /home/gituser/repos

仓库属于 gituser,你用 gituser@IP 登录时就没问题。


🔧 如果你使用 SSH key(推荐)

本地生成 key:

ssh-keygen -t rsa -b 4096

复制公钥到服务器:

ssh-copy-id gituser@服务器IP

然后就可以 免密码 clone

git clone gituser@服务器IP:~/repos/DataMining.git

📌 常见错误与解决方式

❌ Permission denied (publickey)

说明服务器没加入本地的公钥,重新执行:

ssh-copy-id gituser@服务器IP

❌ fatal: 'repos/DataMining.git' does not appear to be a git repository

说明你没有初始化裸仓库,请确认服务器端目录结构:

ls -l /home/gituser/repos

应该看到:

DataMining.git/

里面应该有:

HEAD
config
refs/
objects/
hooks/

进一步

安装 Gitea

Gitea 是轻量的 Git 服务器,超级简单,支持:

✔ 网页界面(像 GitHub)
✔ 项目管理
✔ SSH + HTTPS
✔ 用户管理
✔ 私有仓库
✔ 1 分钟部署


🟢 安装步骤:

  1. 下载 Windows 版 Gitea:
    https://dl.gitea.com/gitea/

运行后程序日志如下,

我们数据库选sqlite就行,注册一个管理员帐号

然后,修改custom\conf\app.ini注意路径在起始的日志里

修改如下内容,

[service]
DISABLE_REGISTRATION = true
REQUIRE_SIGNIN_VIEW = false
 

然后就可以了,linux推荐用这种  使用  sudo snap install gitea ,然后访问3000端口,配置与windows上一样


gitea v1.25.1 from Gitea installed
(base) user@user-desktop:~$ gitea
2025/11/19 11:40:37 cmd/web.go:266:runWeb() [I] Starting Gitea on PID: 22743
2025/11/19 11:40:37 cmd/web.go:114:showWebStartupMessage() [I] Gitea version: 1.25.1 built with GNU Make 4.3, go1.25.3 : bindata, sqlite, sqlite_unlock_notify, pam, cert
2025/11/19 11:40:37 cmd/web.go:115:showWebStartupMessage() [I] * RunMode: prod
2025/11/19 11:40:37 cmd/web.go:116:showWebStartupMessage() [I] * AppPath: /snap/gitea/7667/gitea
2025/11/19 11:40:37 cmd/web.go:117:showWebStartupMessage() [I] * WorkPath: /var/snap/gitea/common
2025/11/19 11:40:37 cmd/web.go:118:showWebStartupMessage() [I] * CustomPath: /var/snap/gitea/common
2025/11/19 11:40:37 cmd/web.go:119:showWebStartupMessage() [I] * ConfigFile: /var/snap/gitea/common/conf/app.ini
2025/11/19 11:40:37 cmd/web.go:120:showWebStartupMessage() [I] Prepare to run install page
2025/11/19 11:40:39 cmd/web.go:328:listen() [I] Listen: http://0.0.0.0:3000
2025/11/19 11:40:39 cmd/web.go:332:listen() [I] AppURL(ROOT_URL): http://localhost:3000/
2025/11/19 11:40:39 modules/graceful/server.go:50:NewServer() [I] Starting new Web server: tcp:0.0.0.0:3000 on PID: 22743
2025/11/19 11:40:39 modules/graceful/server.go:76:(*Server).ListenAndServe() [E] Unable to GetListener: listen tcp 0.0.0.0:3000: bind: address already in use
2025/11/19 11:40:39 cmd/web.go:377:listen() [E] Failed to start server: listen tcp 0.0.0.0:3000: bind: address already in use
2025/11/19 11:40:39 cmd/web.go:379:listen() [I] HTTP Listener: 0.0.0.0:3000 Closed
2025/11/19 11:40:39 cmd/web.go:152:serveInstall() [E] Unable to open listener for installer. Is Gitea already running?
2025/11/19 11:40:39 modules/graceful/manager.go:176:(*Manager).doHammerTime() [W] Setting Hammer condition
2025/11/19 11:40:40 modules/graceful/manager.go:192:(*Manager).doTerminate() [W] Terminating
2025/11/19 11:40:40 .../graceful/manager_unix.go:154:(*Manager).handleSignals() [W] PID: 22743. Background context for manager closed - context canceled - Shutting down...
2025/11/19 11:40:40 cmd/web.go:158:serveInstall() [I] PID: 22743 Gitea Web Finished
Command error: listen tcp 0.0.0.0:3000: bind: address already in use

Ubuntu 使用 snap 安装 gitea 时,配置文件 app.ini 并不在传统的 /etc/gitea//var/lib/gitea/,而是被 snap 放在自己的隔离目录中。

下面给你最准确的 snap 版 gitea 配置文件路径


snap 安装的 Gitea:app.ini 路径

/var/snap/gitea/current/custom/conf/app.ini

也可以通过下面命令确认:

sudo ls /var/snap/gitea/current/custom/conf/

如果目录不存在,需要手动创建:

sudo mkdir -p /var/snap/gitea/current/custom/conf
sudo nano /var/snap/gitea/current/custom/conf/app.ini

📌 查看 snap gitea 日志(里面也会提示 custom 目录路径)

sudo journalctl -u snap.gitea.gitea -f

日志开头通常会显示:

Custom path: /var/snap/gitea/current/custom
Config file: /var/snap/gitea/current/custom/conf/app.ini

✨ 修改示例(你的配置)

编辑文件:

sudo nano /var/snap/gitea/current/custom/conf/app.ini

加入:

[service]
DISABLE_REGISTRATION = true
REQUIRE_SIGNIN_VIEW = false

保存后重启服务:

sudo snap restart gitea

snap list gitea
snap services gitea

总结一下,还是用gitea方便


根据你给出的结果:

$ git branch -vv
  develop 0367eb4 [origin/develop: behind 1] 修复问题
* master  78a1b76 [origin/master: ahead 536] 增加书签修复,

这里给出了非常明确的信息:


✅ *你当前所在分支:master(前面有

* master  78a1b76 [origin/master: ahead 536]

这一行告诉我们 2 个关键点:


① master 正在跟踪(tracking):

origin/master

这说明:

🎯 执行 git push 时的默认推送目标,就是 origin/master

也就是:

ssh://sunyuzhe@xxxx.xxx:29418/cde/pc/compliance

② master 当前比 origin/master “领先 536 个提交”

[origin/master: ahead 536]

说明你有 536 个本地提交没有推到 origin。


📌 所以你的问题答案非常明确:

👉 现在不加任何参数输入:

git push

默认推送到:

origin/master

(gerrit 仓库)


❗ 如果你想推送到 gitea/master 而不是 origin/master

你要明确指定 remote:

git push gitea master

但你之前的 gitea push 提示 “Failed to authenticate”,说明需要:

  • 正确账号密码

  • 或 token

  • 或用 SSH 配置

我可以帮你解决登录问题。


❗ 如果你想以后 master 默认推送到 gitea/master 而不是 origin/master

执行:

git branch --set-upstream-to=gitea/master master

然后以后:

git push

就会推送到:

gitea/master

另外针对一个linux 上的项目上传到gitea上面,使用remote http 

git init 之后

在服务器上建立一个项目,比如叫 orangePi6_mobile_detect

然后

git remote set-url origin http://su1.ltd:3000/admin/orangePi6_mobile_detect.git

git push --set-upstream origin master

这时要输入帐号 admin

密码:不是登录的密码,而是token 

只能使用一次就不行了

另外别的http登录不了,要改进一下

nano /var/snap/gitea/common/conf/app.ini


[server]
DOMAIN = su1.ltd
HTTP_PORT = 3000

[security]
ENABLE_WEBAUTHN = false


必须重启动gitea
snap restart gitea

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐