286 lines
8.5 KiB
Markdown
286 lines
8.5 KiB
Markdown
# 001 git如何上传
|
||
|
||
|
||
# 002 git如何上传到子目录
|
||
|
||
|
||
|
||
git config --global user.name "fei"
|
||
git config --global user.email "fei@fei.fei"
|
||
|
||
|
||
在 Linux 中使用 `git` 命令连接自建的 Gitea 仓库并完成初始化提交,主要分为**配置环境**、**在 Gitea 网页端创建仓库**(Git 本身不提供远程创建仓库的命令,除非使用 API)以及**本地操作**三个步骤。
|
||
|
||
以下是具体的操作流程:
|
||
|
||
### 1. 配置本地 Git 环境
|
||
|
||
如果是第一次使用 Git,需要先配置身份标识,否则提交会报错。
|
||
|
||
```bash
|
||
git config --global user.name "你的用户名"
|
||
git config --global user.email "你的邮箱"
|
||
|
||
```
|
||
|
||
---
|
||
|
||
### 2. 在 Gitea 网页端手动创建仓库
|
||
|
||
Git 协议本身不支持通过命令行直接在远程服务器上“新建”一个项目。你需要:
|
||
|
||
1. 登录你的 Gitea 页面。
|
||
2. 点击右上角的 **+** 号 -> **新建仓库**。
|
||
3. 输入 **仓库名称**(例如:`my-project`),不要勾选“初始化仓库”(保持仓库为空)。
|
||
4. 点击 **创建仓库**,获取仓库地址(推荐使用 SSH 或 HTTPS)。
|
||
|
||
---
|
||
|
||
### 3. 初始化并提交当前文件夹
|
||
|
||
进入你想要上传的文件夹,执行以下操作:
|
||
|
||
```bash
|
||
# 进入目标文件夹
|
||
cd /path/to/your/folder
|
||
|
||
# 1. 初始化本地仓库
|
||
git init
|
||
|
||
# 2. 将文件夹下的所有文件添加到暂存区
|
||
git add .
|
||
|
||
# 3. 提交到本地仓库
|
||
git commit -m "首次提交:初始化项目"
|
||
|
||
# 4. 关联 Gitea 远程仓库
|
||
# 请将下方链接替换为你刚才在 Gitea 创建仓库后获取的地址
|
||
git remote add origin http://your-gitea-ip:3000/username/my-project.git
|
||
|
||
# 5. 推送到远程仓库(通常主分支名为 master 或 main)
|
||
git push -u origin master
|
||
|
||
```
|
||
|
||
---
|
||
|
||
### 常见问题排查
|
||
|
||
#### 方式选择:HTTPS vs SSH
|
||
|
||
* **HTTPS**: 每次推送可能需要输入 Gitea 的用户名和密码。如果你想免密,可以使用:
|
||
`git config --global credential.helper store`
|
||
* **SSH (推荐)**: 需要将你 Linux 机器的公钥(`~/.ssh/id_rsa.pub`)添加到 Gitea 的“个人设置 -> SSH / GPG 密钥”中。这样后续推送无需密码。
|
||
|
||
#### 关于 /home/fei/k3s/ 目录的特别提醒
|
||
|
||
考虑到你习惯将配置文件放在 `/home/fei/k3s/`,如果该目录下包含敏感信息(如 `kubeconfig` 或 S3 的 Secret 密钥),建议在 `git init` 后立即创建一个 `.gitignore` 文件:
|
||
|
||
```bash
|
||
echo "credentials.yaml" >> .gitignore
|
||
echo "*.log" >> .gitignore
|
||
|
||
```
|
||
|
||
#### 修改分支名
|
||
|
||
现在的 Gitea 默认分支可能叫 `main`。如果你推送时报错,可以尝试先重命名本地分支再推送:
|
||
|
||
```bash
|
||
git branch -M main
|
||
git push -u origin main
|
||
|
||
```
|
||
|
||
你想了解如何通过 Gitea API 使用命令行自动创建远程仓库,从而跳过网页操作吗?
|
||
|
||
|
||
是的,你需要**先在 Gitea 网页端手动创建一个仓库**,然后才能在命令行关联它。
|
||
|
||
即使你本地已经有文件夹和代码了,Git 也无法直接通过 `remote add` 命令在服务器上“生”出一个仓库。
|
||
|
||
### 第一步:在 Gitea 网页端创建仓库
|
||
|
||
1. 打开浏览器,访问 `https://git.jpd.net3w.com`(推荐使用 HTTPS)。
|
||
2. 使用账号 `gitea_admin` 登录。
|
||
3. 点击页面右上角的 **+** 号 -> **创建仓库**。
|
||
4. **仓库名称**:填 `k3s_auto_deploy`(或者任何你喜欢的名字)。
|
||
5. **注意**:**不要**勾选“初始化仓库”、“设置 .gitignore”或“选择授权许可”。我们要的是一个**完全空白**的仓库。
|
||
6. 点击底部的 **创建仓库**。
|
||
|
||
---
|
||
|
||
### 第二步:在本地 Linux 终端执行命令
|
||
|
||
创建好后,Gitea 会显示该仓库的地址。根据你的信息,命令应该这样写:
|
||
|
||
```bash
|
||
# 1. 关联远程仓库 (推荐使用域名 HTTPS 方式)
|
||
git remote add origin https://git.jpd.net3w.com/gitea_admin/k3s_auto_deploy.git
|
||
|
||
# 2. 如果你想使用 NodePort 方式(备选):
|
||
# git remote add origin http://149.13.91.216:30080/gitea_admin/k3s_auto_deploy.git
|
||
|
||
# 3. 推送代码
|
||
# 第一次推送时,Git 会弹窗或提示你输入用户名和密码
|
||
# 用户名: gitea_admin
|
||
# 密码: 12341234
|
||
git push -u origin master
|
||
|
||
```
|
||
|
||
---
|
||
|
||
### 进阶:如何实现“免密”推送?
|
||
|
||
由于你使用的是 HTTPS 链接,每次 `push` 可能都要输密码,这在自动化部署中很不方便。你有两个选择:
|
||
|
||
1. **让 Git 记住密码(简单):**
|
||
执行 `git config --global credential.helper store`。下次输入正确后,密码会加密存在你的 `/home/fei/` 目录下。
|
||
2. **使用 SSH 密钥(专业):**
|
||
将你的 `~/.ssh/id_rsa.pub` 内容复制到 Gitea 的“个人设置 -> SSH / GPG 密钥”中。然后将远程地址改为 SSH 格式:
|
||
`git remote set-url origin git@git.jpd.net3w.com:gitea_admin/k3s_auto_deploy.git`
|
||
|
||
---
|
||
|
||
**小贴士:**
|
||
在执行 `git push` 之前,别忘了处理上一步提到的 `k3s-ansible` 文件夹。如果你决定把它当作普通文件夹处理,记得先运行:
|
||
`rm -rf k3s-ansible/.git && git add . && git commit -m "准备好推送了"`
|
||
|
||
关联仓库后,推送成功了吗?如果不成功,请把报错信息发给我。
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
建议操作:建立一个专门的“知识库”仓库
|
||
除了项目相关的文档,你还可以单独建一个名为 Wiki 或 Knowledge 的仓库:
|
||
|
||
分门别类:创建 /K3s/、/Networking/、/Linux-Commands/ 等文件夹。
|
||
|
||
随时提交:在本地用你习惯的编辑器(比如 Cursor 或 VS Code)写完,一个 git push 就同步到了你的私有云端。
|
||
|
||
多端同步:你可以在家里电脑、公司电脑甚至手机上(通过支持 Git 的编辑器)随时查看这些文档。
|
||
|
||
一个小技巧: 如果你在本地 k3s自动化部署 文件夹里写了多份 .md 文件,你可以给它们起个好名字,比如 01-环境准备.md、02-安装脚本说明.md。
|
||
|
||
你现在关联并推送成功了吗?如果成功了,你打开 http://git.jpd.net3w.com 就能看到你的文档已经整整齐齐地躺在私有仓库里了。
|
||
|
||
|
||
|
||
|
||
# 002 git到子目录
|
||
|
||
|
||
当然可以。在 Git 中,将一个现有的本地文件夹“推”送到远程仓库的某个子目录下,通常有几种不同的实现方式,取决于你的具体需求(是想彻底合并,还是作为独立模块管理)。
|
||
|
||
以下是几种最常用的方案:
|
||
|
||
---
|
||
|
||
### 方案一:最简单直接的“搬运”法
|
||
|
||
如果你只是想把当前文件夹里的内容塞进远程仓库的一个文件夹里,这是最稳妥的办法:
|
||
|
||
1. **克隆远程仓库**到另一个临时目录:
|
||
`git clone <远程仓库地址> temp-repo`
|
||
2. **创建目标子目录**:
|
||
`mkdir -p temp-repo/子目录名`
|
||
3. **拷贝文件**:
|
||
将你当前文件夹(`/home/fei/k3s/` 等)下的内容手动或使用 `cp` 命令拷贝到 `temp-repo/子目录名` 下。
|
||
4. **提交并推送**:
|
||
```bash
|
||
cd temp-repo
|
||
git add .
|
||
git commit -m "Add k3s configs to subfolder"
|
||
git push
|
||
|
||
```
|
||
|
||
|
||
|
||
---
|
||
|
||
### 方案二:使用 `git subtree` (保留提交历史)
|
||
|
||
如果你希望保留当前本地文件夹之前的 **Git 提交记录**,并将其并入另一个大仓库的子目录,可以使用 `subtree`。
|
||
|
||
假设你已经在当前文件夹初始化了 Git 并有提交记录:
|
||
|
||
1. 在本地关联远程大仓库:
|
||
`git remote add big-repo <大仓库地址>`
|
||
2. 使用 `subtree` 推送到指定分支和目录:
|
||
```bash
|
||
git push big-repo <当前分支名>:refs/heads/<目标分支名>
|
||
|
||
```
|
||
|
||
|
||
*注意:这种方式比较底层。更标准的做法是在大仓库里执行 `pull`:*
|
||
```bash
|
||
# 在大仓库目录下执行
|
||
git subtree add --prefix=k3s-configs <你的配置文件库地址> master --squash
|
||
|
||
```
|
||
|
||
|
||
|
||
---
|
||
|
||
### 方案三:使用 Git Submodule (模块化管理)
|
||
|
||
如果你希望这个子目录**保持独立性**(即它依然是一个独立的仓库,只是被大仓库“引用”),Submodule 是最佳选择。
|
||
|
||
1. 先将当前文件夹推送到它自己的远程仓库(比如 `k3s-backup`)。
|
||
2. 进入你的大仓库目录,运行:
|
||
```bash
|
||
git submodule add <配置文件仓库地址> 子目录名
|
||
git commit -m "Add k3s configs as submodule"
|
||
git push
|
||
|
||
```
|
||
|
||
|
||
|
||
---
|
||
|
||
### 总结建议
|
||
|
||
| 需求场景 | 推荐方案 |
|
||
| --- | --- |
|
||
| **纯备份,不需要复杂的关联** | **方案一** (手动拷贝) |
|
||
| **想在大仓库里看到所有历史记录** | **方案二** (Subtree) |
|
||
| **配置目录经常独立更新,多处复用** | **方案三** (Submodule) |
|
||
|
||
由于你提到你的配置文件通常在 `/home/fei/k3s/`,建议先检查该目录下是否有 `.git` 隐藏文件夹。如果有,采用方案二或三可以保留你的修改痕迹。
|
||
|
||
**需要我帮你写一个具体的脚本来自动化这个推送过程吗?**
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|