Files
zhishiku/git命令_如何上传.md

286 lines
8.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` 隐藏文件夹。如果有,采用方案二或三可以保留你的修改痕迹。
**需要我帮你写一个具体的脚本来自动化这个推送过程吗?**