198 lines
4.0 KiB
Markdown
198 lines
4.0 KiB
Markdown
# 修复上传问题指南
|
||
|
||
## 问题分析
|
||
|
||
1. **未提交的更改**:`android-chat-master` 子模块有修改
|
||
2. **远程仓库已存在**:需要更新或删除后重新添加
|
||
3. **SSH 主机密钥验证失败**:重新安装 Gerrit 后 SSH 密钥改变了
|
||
|
||
## 解决方案
|
||
|
||
### 方法一:使用 HTTP(推荐,最简单)
|
||
|
||
HTTP 方式不需要 SSH 密钥,更简单。
|
||
|
||
#### 步骤 1:处理未提交的更改
|
||
|
||
```bash
|
||
# 查看当前状态
|
||
git status
|
||
|
||
# 选项 A:提交所有更改
|
||
git add .
|
||
git commit -m "Update code before push to Gerrit"
|
||
|
||
# 选项 B:如果不想提交子模块的更改,可以暂存
|
||
git stash
|
||
```
|
||
|
||
#### 步骤 2:更新远程仓库(使用 HTTP)
|
||
|
||
```bash
|
||
# 删除旧的远程仓库
|
||
git remote remove gerrit
|
||
|
||
# 重新添加(使用 HTTP,不需要 SSH)
|
||
git remote add gerrit http://101.43.95.130:8080/zhini_im
|
||
|
||
# 验证
|
||
git remote -v
|
||
```
|
||
|
||
#### 步骤 3:推送代码
|
||
|
||
```bash
|
||
# 切换到主分支(如果需要)
|
||
git checkout -b master 2>/dev/null || git checkout master
|
||
|
||
# 推送代码
|
||
git push gerrit HEAD:refs/heads/master
|
||
```
|
||
|
||
### 方法二:修复 SSH 密钥问题(如果想用 SSH)
|
||
|
||
#### 步骤 1:删除旧的 SSH 主机密钥
|
||
|
||
```bash
|
||
# 在 Git Bash 中执行
|
||
ssh-keygen -R [101.43.95.130]:29418
|
||
|
||
# 或者手动编辑 known_hosts 文件
|
||
# 删除 /c/Users/Administrator/.ssh/known_hosts 文件中第 4 行
|
||
```
|
||
|
||
#### 步骤 2:重新添加 SSH 主机密钥
|
||
|
||
```bash
|
||
# 重新连接并接受新的主机密钥
|
||
ssh -p 29418 admin@101.43.95.130
|
||
|
||
# 输入 yes 接受新的主机密钥
|
||
```
|
||
|
||
#### 步骤 3:更新远程仓库(使用 SSH)
|
||
|
||
```bash
|
||
# 删除旧的
|
||
git remote remove gerrit
|
||
|
||
# 添加 SSH 远程仓库
|
||
git remote add gerrit ssh://admin@101.43.95.130:29418/zhini_im
|
||
|
||
# 推送
|
||
git push gerrit HEAD:refs/heads/master
|
||
```
|
||
|
||
## 完整操作步骤(推荐使用 HTTP)
|
||
|
||
### 在 Git Bash 中执行:
|
||
|
||
```bash
|
||
# 1. 进入项目目录
|
||
cd /d/zhini/zhini_im
|
||
|
||
# 2. 查看当前状态
|
||
git status
|
||
|
||
# 3. 处理未提交的更改
|
||
# 选项 A:提交所有更改
|
||
git add .
|
||
git commit -m "Update code before push to Gerrit"
|
||
|
||
# 或者选项 B:暂存更改(如果不想现在提交)
|
||
# git stash
|
||
|
||
# 4. 删除旧的远程仓库
|
||
git remote remove gerrit
|
||
|
||
# 5. 添加 HTTP 远程仓库(推荐,不需要 SSH)
|
||
git remote add gerrit http://101.43.95.130:8080/zhini_im
|
||
|
||
# 6. 验证远程仓库
|
||
git remote -v
|
||
|
||
# 7. 切换到主分支(如果需要)
|
||
git checkout -b master 2>/dev/null || git checkout master
|
||
|
||
# 8. 推送代码
|
||
git push gerrit HEAD:refs/heads/master
|
||
```
|
||
|
||
## 如果推送时提示需要认证
|
||
|
||
在开发模式下,HTTP 推送通常不需要密码,但如果提示:
|
||
|
||
- **用户名**:`admin`(或您注册的用户名)
|
||
- **密码**:留空(开发模式不需要密码)
|
||
|
||
## 处理子模块问题
|
||
|
||
如果 `android-chat-master` 是子模块,可以:
|
||
|
||
### 选项 1:提交子模块更改
|
||
|
||
```bash
|
||
cd android-chat-master
|
||
git add .
|
||
git commit -m "Update submodule"
|
||
cd ..
|
||
git add android-chat-master
|
||
git commit -m "Update submodule reference"
|
||
```
|
||
|
||
### 选项 2:忽略子模块更改
|
||
|
||
```bash
|
||
# 暂存子模块更改
|
||
git stash
|
||
|
||
# 或者重置子模块
|
||
git submodule update --init --recursive
|
||
```
|
||
|
||
## 验证推送
|
||
|
||
推送成功后:
|
||
|
||
1. 访问:`http://101.43.95.130:8080/#/admin/projects/zhini_im`
|
||
2. 应该能看到项目代码
|
||
3. 访问:`http://101.43.95.130:8080/#/q/project:zhini_im`
|
||
4. 应该能看到提交历史
|
||
|
||
## 常见错误处理
|
||
|
||
### 错误:remote gerrit already exists
|
||
|
||
```bash
|
||
# 删除旧的远程仓库
|
||
git remote remove gerrit
|
||
|
||
# 重新添加
|
||
git remote add gerrit http://101.43.95.130:8080/zhini_im
|
||
```
|
||
|
||
### 错误:Host key verification failed
|
||
|
||
**解决方案 1:使用 HTTP(推荐)**
|
||
```bash
|
||
git remote set-url gerrit http://101.43.95.130:8080/zhini_im
|
||
```
|
||
|
||
**解决方案 2:修复 SSH 密钥**
|
||
```bash
|
||
ssh-keygen -R [101.43.95.130]:29418
|
||
ssh -p 29418 admin@101.43.95.130 # 接受新密钥
|
||
```
|
||
|
||
### 错误:Changes not staged for commit
|
||
|
||
```bash
|
||
# 提交所有更改
|
||
git add .
|
||
git commit -m "Update code"
|
||
|
||
# 或暂存更改
|
||
git stash
|
||
```
|
||
|