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

在服务器上创建一个私有化的git


🚀 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/

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

  • 在 Windows 编写代码

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

  • git push

  • 在服务器 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 分钟部署


    🟢 安装步骤:

  • 下载 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

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 在服务器上创建一个私有化的git
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!