1. Install with Docker-Compose
Rely on docker, docker-compose
Add user "git" to group "docker" to run docker-compose in user "git"
gpassed -a git docker
Docker-compose
su git
mkdir gitea ; cd gitea
cat > docker-compose.yml << EOF
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:1
container_name: gitea
environment:
- USER_UID=1002 # UID of git
- USER_GID=1002 # GID of git
restart: always
networks:
- gitea
volumes:
- /home/git/data:/data # mount, HOST:docker
- /etc/timezone:/etc/timezone:ro # ro: read only
- /etc/localtime:/etc/localtime:ro
ports: # port mapping, HOST:docker
- "10080:3000" # web for gitea
- "10022:22" # ssh for gitea
EOF
docker-compose up -d # run in background
Visit ip:10080/install
(You may make a port mapping on router <outer ip>, 10022->10022, 10080->10080)
- simplily choose SQLite3 for database
- fill SSH domain and port with External Domain and Port
<outer ip>:10022
- fill HTTP port with Internal Port
- default
3000
- default
- fill basic URL with External URL
http://<outer ip>:10080
Done!
2. Git使用简介
参考菜鸟教程
# 客户端配置默认用户及邮箱、编辑器,global为全局配置
git config --global user.name "<name>"
git config --global user.email "<email>"
git config --global core.editor vim
2.1. Git工作目录
在项目文件夹内执行git init即将该文件夹初始化为一个git仓库。
用户在目录中所看到的即是工作区
add commit
工 -----------------> 暂 -----------> 仓
作 checkout -- <file> 存 reset HEAD 库
区 <----------------- 区 <----------- 区
^ ^ |
| |
|-----------------------------------------|
checkout HEAD <file>
git status |
查看当前工作区状态 |
git add <files> |
用工作区内的文件更新暂存区 |
git commit |
将暂存区的内容更新至仓库区,产生一个新的快照 |
git reset HEAD |
将暂存区重写为仓库区保存的文件 |
git checkout -- <file> |
用暂存区文件覆盖工作区文件 |
git checkout HEAD <file> |
用仓库区文件替换暂存区与工作区 |
2.2. Git分支管理
分支举例
分支 分支名 快照树
主分支 master M1<----------------------M2
预发布分支 release \-R1<----------------R2^
开发分支 dev \-D1<---D2<-----D3^
功能分支 feat \-F1<-----F2^
快照举例
* <hash*> (HEAD -> branch2, branch3) <commit message>
* <hash*> <commit message>
* <hash*> (branch1) <commit message>
* <hash*> (master) <commit message>
HEAD指针表示当前所在分支及位置
git init |
默认创建主分支master |
git branch release |
创建release分支 |
git checkout release |
切换HEAD指针到release分支 |
git checkout -b dev |
创建并切换到dev分支 |
git branch -d dev |
删除dev分支 |
2.2.1. 分支合并
git merge <待合并分支>将待合并分支合并到当前指针所在分支。
- 快进合并,无冲突
HEAD HEAD
branch1 branch1
| ==> |
B0<--B1<--B2 B0<--B1<--B2
| |
branch2 branch
branch2为从branch1拉取的分支,进行两次提交到B2,branch1没有任何提交。
git checkout branch1; git merge branch2,不会产生任何冲突,直接移动HEAD指针和branch1到B2,快进合并,合并成功。
- 非快进合并
HEAD HEAD
branch1 branch1
| |
B0<----B1 ==> B0<-----B1<----B2
\-C1<-C2 \-C1<-C2<---/
| |
branch2 branch2
当前希望将C2合并至B1,git checkout branch1; git merge branch2
合并原理:追踪两个合并节点(B1, C2)最近的共同出发点(B0),对比三方文件
- 在B0、B1中相同,在C2中不同,说明C2是修改后需要更新的,非快进合并,合并成功,产生新节点B2
- 存在在B0、B1、C2中都不同的文件,git不知道如何更新文件,产生冲突,合并失败,需要解决冲突后再合并
冲突解决:git status查看待解决冲突的文件名,git自动将冲突内容按下述方式标出
冲突片段举例
<<<<<<< HEAD
HEAD中的当前内容
=======
待合并的冲突内容
>>>>>>> branch2
修改冲突片段为需要保留的内容,add、commit后产生新的快照,再尝试merge合并。
2.3. Git commit 规范
git commit [-m <message>]进行一次提交,产生一个新的快照。每次提交必须写入提交说明,可以直接使用-m参数写入一行的短说明,也可以不使用-m,将打开一个新窗口用于编辑提交说明。
建议使用:git commit -s自动增加签名。
建议写法:
<type>(<scope>): <subject>
***空一行***
<body>
***空一行***
<footer>
- Header
type:用于说明commit的类别,只允许以下类别
| feat | 新功能 feature |
| fix | 修复bug |
| docs | 修改文档 documentation |
| style | 不影响代码含义的改动,如代码格式等 |
| refactor | 代码重构,既不新增功能,也不修复bug |
| test | 新增缺失的测试或修正已有的测试 |
| build* | 影响链接或外部依赖的改动 |
| chore | 不改变源码或测试文件的构建过程或辅助工具的改动 |
| revert* | 快照回滚 |
scope:选填,用于说明commit的影响范围,依项目而定,可以是功能、模块、文件名等
subject:短描述
- 以动词开头,使用第一人称现在时
- 第一个字母小写
- 结尾不加句号(.)
- Body
对本次提交的详细描述,可以是多行
- footer:只用于
- 不兼容改动,以BREAKING CHANGE开头
BREAKING CHANGE: <describtion>
<describtion>
Before:
...
After:
...
- 关闭issue
Closes #123
- Revert
特殊提交,Header应写为revert: <被撤销提交的Header>%