本次实践项目由小组成员利用 GitHub 进行合作开发,具体选用了 GitHub 的 Branch 功能进行协同开发,开发流程与分工主要由 lihan3238 设计与管理,DaleChu 协同设计与管理,其他小组成员参与。
master分支:主分支,用于发布稳定版本;lihan3238分支:lihan3238的开发分支;DaleChu分支:DaleChu的开发分支;Dracuspicy分支:Dracuspicy的开发分支;doubleJ分支:doubleJ的开发分支;
-
在 GitHub 上创建 项目工作仓库, 并将小组成员加入仓库协作;
-
小组成员创建自己的开发分支,分别为
lihan3238、DaleChu、Dracuspicy、doubleJ,在自己的开发分支上进行开发; -
在自己的分支上完成开发后,将自己的分支通过
Pull Reaquest合并到master分支; -
完成合并后,使用
git rebase main命令将master分支的最新代码合并到自己的分支; -
不断重复 3、4 步骤,直到项目开发完成。
-
角色:
小组成员A、小组成员B、小组成员C(仓库管理员)、小组成员D(仓库管理员) -
开发流程:
- c0:
小组成员C(仓库管理员)在 GitHub 上创建项目主仓库的main分支; - c0:
小组成员A、小组成员B、小组成员C(仓库管理员)、小组成员D(仓库管理员)分别创建自己的开发分支,并git clone在线仓库到本地,使用git checkout [个人分支]切换到自己的开发分支;
- c1:
小组成员A在自己本地的分支上完成开发,并git push更新到远程仓库的对应分支,之后在 GitHub 上发起Pull Request; - c2:
小组成员B在自己本地的开发分支chap0x0B上完成开发,并git push更新到远程仓库的chap0x0B,之后在 GitHub 上发起Pull Request;
- c3:
小组成员C(仓库管理员)在 GitHub 上审核小组成员A、小组成员B的Pull Request,并将其合并到main分支;
- c3:
小组成员A、小组成员B使用git checkout main切换到main分支,并使用git pull拉取最新代码,之后使用git checkout [个人分支]切换到自己的开发分支,使用git rebase main命令将main分支的最新代码合并到自己的开发分支,并git push更新到远程仓库;
- 分支示意图:
- 项目主仓库 由
lihan3238维护,开发人员请拉取 项目工作仓库 到本地进行开发; - 请在自己的个人开发分支上开发,请勿 直接在
main分支及他人开发分支上进行开发; - 开发过程中如果对其他人提交的内容进行了修改,请及时通知相关开发人员,并在
Pull Request时说明; - 请在
Pull Request时填写详细的Pull Request说明,方便他人审核; - 请在
Pull Request合并通过后,切换到main分支git pull拉取更新到本,之后 切换到自己的分支下 及时使用git rebase main命令将main分支的最新代码合并到自己的开发分支,并git push到远程仓库; git commit message参考
error: cannot lock ref 'refs/remotes/origin/Dalechu': is at 4c00ca1858ea4faddfe0955357e4b9204d75604b but expected be1497b8165e857bc659162466e822dc3de8ae08
! be1497b..6e4fb37 Dalechu -> origin/Dalechu (unable to update local ref)
5d4fd1c..40f53b8 doubleJ -> origin/doubleJ- 原因:远程仓库的
Dalechu分支与本地仓库的Dalechu分支不一致;具体原因不明。 - 解决:删除本地仓库的
Dalechu分支,重新git pull拉取远程仓库的Dalechu分支。
git update-ref -d refs/remotes/origin/Dalechu
git fetch origin2. 项目工作仓库(GitHub) 与 项目主仓库(gitlab) 同步问题
- 原因:小组一开始在 项目工作仓库(GitHub) 上进行开发,后得知需要在 项目主仓库(Gitlab) 上进行开发,遂决定将 项目工作仓库(GitHub) 利用 Gitlab 自带的
Import Project功能导入到 项目主仓库(Gitlab) 中。但是导入后发现 项目工作仓库(GitHub) 上的后续更新并不能自动同步到 项目主仓库(Gitlab) 中。 - 解决:在得到老师的指导,进一步学习了 Git 的
本地仓库和远程仓库的关系后,理解了 本地仓库和远程仓库之间的关系通过一组远程引用(remote references)来管理。远程引用是一组指向远程仓库中提交对象的指针(例如分支和标签)。可以为一个本地仓库绑定多个远程仓库。 于是由lihan3238将自己的本地仓库同时绑定了两个远程仓库,每次将 项目工作仓库(GitHub) 的更新拉取到本地仓库,并将更新推送到 项目主仓库(Gitlab) 中。
# 绑定远程仓库-1
git remote add cuc https://git.cuc.edu.cn/ccs/2024-summer-cp/Network-Security-Comprehensive-Practice.git
## 此时使用 git remote -v 查看绑定情况
## cuc https://git.cuc.edu.cn/ccs/2024-summer-cp/Network-Security-Comprehensive-Practice.git (fetch)
## cuc https://git.cuc.edu.cn/ccs/2024-summer-cp/Network-Security-Comprehensive-Practice.git (push)
## origin https://github.com/lihan3238/Network-Security-Comprehensive-Practice.git (fetch)
## origin https://github.com/lihan3238/Network-Security-Comprehensive-Practice.git (push)
## 每次使用 git pull origin main 拉取工作仓库的更新,git push cuc main 推送到主仓库
# 绑定远程仓库-2
git remote set-url --add origin https://git.cuc.edu.cn/ccs/2024-summer-cp/Network-Security-Comprehensive-Practice.git
## 此时使用 git remote -v 查看绑定情况
## origin https://github.com/lihan3238/Network-Security-Comprehensive-Practice.git (fetch)
## origin https://github.com/lihan3238/Network-Security-Comprehensive-Practice.git (push)
## origin https://git.cuc.edu.cn/ccs/2024-summer-cp/Network-Security-Comprehensive-Practice.git (push)
## 注意到 origin 的 push 地址有两个,分别是 github 和 gitlab 的地址,这样每次 git push origin main 时,会将更新推送到两个远程仓库,但是 pull 时只会从工作仓库拉取
3. 项目主仓库(gitlab) 中,commit记录中同一个用户有多个不同的用户名
- 原因:在 项目工作仓库(GitHub),进行开发时,存在两种不同的
git config配置,一个是在本地工作目录下配置的个人邮箱和用户名-1,一个是在 GitHub 上进行 Pull Request 时使用的邮箱和用户名-2。将项目同步到 项目主仓库(gitlab) 后,个人邮箱和用户名-1会被识别为 Gitlab 用户,显示为我的 Gitlab 用户名,而邮箱和用户名-2因为 Github 上默认使用匿名邮箱xxx@users.noreply.github.com所以被 Gitlab 识别为另一个用户,因此在 commit 记录中会出现两个不同的用户名。 - 解决:
-
- 方法一:在 Github 的用户配置界面,取消勾选
Keep my email addresses private,并设置和本地工作目录下的一致的邮箱;
- 方法一:在 Github 的用户配置界面,取消勾选
-
- 方法二:在本地工作目录下,使用
git config --global user.email "xxx@users.noreply.github.com"设置和 Github 上一致的邮箱,使用git config --global user.name "lihan3238"设置和 Github 上一致的用户名。
- 方法二:在本地工作目录下,使用





