项目需要自己的git仓库,github,gitee,阿里云效都可以,gitea没用过,尝试装一下。
1.mariadb安装
lsb_release -a
root@github:/home/tools# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 10 (buster)
Release: 10
Codename: buster
apt install mariadb-server mariadb-client
sudo mysql_secure_installation
- Set root password? [Y/n] y
-Remove anonymous users? [Y/n] y
- Disallow root login remotely? [Y/n] y
- Remove test database and access to it? [Y/n] y
- Reload privilege tables now? [Y/n] y
一路回车,Set root password? [Y/n] y
Enter current password for root (enter for none):
OK, successfully used password, moving on…
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
接下来设置数据库
MariaDB [(none)]> CREATE DATABASE gitea;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON gitea.* TO ‘giteadb‘@’localhost’ IDENTIFIED BY ‘gitea#ba1’;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> QUIT;
2.gitea 安装
sudo apt install git
adduser –system –shell /bin/bash –gecos ‘Git Version Control’ –group –disabled-password –home /data/gitrepo git
下载gitea最新版本:120M左右
curl -s https://api.github.com/repos/go-gitea/gitea/releases/latest |grep browser_download_url | cut -d ‘“‘ -f 4 | grep ‘\linux-amd64$’ | wget -i -
mv gitea-*-linux-amd64 /usr/local/bin/gitea
chmod +x /usr/local/bin/gitea
root@git:/home/tools/gitea# gitea –version
Gitea version 1.20.0 built with GNU Make 4.1, go1.20.6 : bindata, sqlite, sqlite_unlock_notify
接下来,您需要为 Gitea 创建一个目录结构。
mkdir -p /etc/gitea /var/lib/gitea/{custom,data,indexers,public,log}
然后,使用以下命令设置适当的权限和所有权:
chown git:git /var/lib/gitea/{data,indexers,log}
chmod 750 /var/lib/gitea/{data,indexers,log}
chown root:git /etc/gitea
chmod 770 /etc/gitea
创建 Gitea Systemd 文件。 Gitea创建服务/etc/systemd/system/gitea.service:
[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
After=mysql.service
[Service]
LimitMEMLOCK=infinity
LimitNOFILE=65535
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini
Restart=always
Environment=USER=git
HOME=/data/gitrepo
GITEA_WORK_DIR=/var/lib/gitea
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable gitea.service
systemctl start gitea.service
初始化:
最终会生成一个/etc/gitea/app.ini文件:可以做域名,端口根据自己需求调整:
cat /etc/gitea/app.ini
APP_NAME = Gitea: Git with a cup of tea
RUN_USER = git
WORK_PATH = /usr/local/bin
RUN_MODE = prod
[server]
SSH_DOMAIN = repo.git.abcd.com
DOMAIN = 域名
HTTP_PORT = gitea端口自定义10048
ROOT_URL = https://域名
APP_DATA_PATH = /usr/local/bin/data
START_SSH_SERVER = true
DISABLE_SSH = false
\#SSH_PORT = 22
SSH_PORT = 可以自定义
LFS_START_SERVER = true
LFS_JWT_SECRET = ……
OFFLINE_MODE = false
[database]
DB_TYPE = mysql
HOST = 127.0.0.1:3306
NAME = gitea
USER = gitea
PASSWD = `passwd`
SCHEMA =
SSL_MODE = disable
PATH = /usr/local/bin/data/gitea.db
LOG_SQL = false
[repository]
ROOT = /data/gitrepo/
[lfs]
PATH = /usr/local/bin/data/lfs
[mailer]
ENABLED = false
[service]
REGISTER_EMAIL_CONFIRM = false
ENABLE_NOTIFY_MAIL = false
DISABLE_REGISTRATION = false
ALLOW_ONLY_EXTERNAL_REGISTRATION = false
ENABLE_CAPTCHA = false
REQUIRE_SIGNIN_VIEW = false
DEFAULT_KEEP_EMAIL_PRIVATE = false
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
DEFAULT_ENABLE_TIMETRACKING = true
NO_REPLY_ADDRESS = noreply.域名
[openid]
ENABLE_OPENID_SIGNIN = true
ENABLE_OPENID_SIGNUP = true
[cron.update_checker]
ENABLED = false
[session]
PROVIDER = file
[log]
MODE = console
LEVEL = info
ROOT_PATH = /usr/local/bin/data/log
[repository.pull-request]
DEFAULT_MERGE_STYLE = merge
[repository.signing]
DEFAULT_TRUST_MODEL = committer
[security]
……
Nginx 配置转发:
server {
listen 80;
server_name 域名;
\# http默认重定向到https
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name 域名;
access_log /var/log/nginx/gitea_access.log;
error_log /var/log/nginx/gitea_error.log;
ssl_certificate /etc/nginx/cert/域名.pem;
ssl_certificate_key /etc/nginx/cert/域名.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
client_max_body_size 1024m;
allow 192.168.8.10;
deny all;
location / {
proxy_pass http://localhost:10048;
}
}
3.gitea 操作
调试完成就可以访问配置的域名,进入gitea后台:右上角设置,设置SSH/GPGg密钥和管理后台添加账户;
创建仓库:
本地设置:
在安装完git和TortoiseGit后,使用ssh的配置如下:
生成ssh key
运行Git Bash
进到ssh目录: cd ~/.ssh/
如果提示不存在,创建.ssh:mkdir ~/.ssh/
配置用户名和邮箱:
Git config –global user.name “your name”
Git config –global user.email “your_email@example.com”
生成key:ssh-keygen -t rsa -C “your_email@example.com“
连续按三次回车即可
最后得到了两个文件:id_rsa和id_rsa.pub
复制ssh内容:cat is_rsa.pub 添加到gitea 的SSH/GPGg密钥那边
需要创建一个远程空仓库,可以使用GitHub、GitLab等平台创建。获取仓库的URL,以便后续推送代码时使用。
克隆远程仓库
在推送代码之前,首先需要将远程仓库克隆到本地。可以使用以下命令进行克隆:
git remote add origin ssh:/git url
建议用ssh:/git 远程库url,https url会报一些错误:比如,
error: RPC failed; curl 56 HTTP/2 stream 5 was reset
send-pack: unexpected disconnect while reading sideband packet
fatal: the remote end hung up unexpectedly
Everything up-to-date
设置了git config –global http.postBuffer 524288000似乎效果不大
Git基本操作:
新建代码库:
# 在当前目录新建一个Git代码库
$ git init
# 新建一个目录,将其初始化为Git代码库
$ git clone [url]
# 列出当前所有配置, 包含本地、全局、系统配置
$ git config –list
# 列出本地配置
git config –local –list
# 列出全局配置
git config –global –list
# 列出系统配置
git config –system –list
# 添加指定文件到暂存区
$ git add [file1] [file2] …
# 添加指定目录到暂存区,包括子目录
$ git add [dir]
# 添加当前目录的所有文件到暂存区
$ git add .
# 添加每个变化前,都会要求确认# 对于同一个文件的多处变化,可以实现分次提交
$ git add -p
# 删除工作区文件,并且将这次删除放入暂存区
$ git rm [file1] [file2] …
# 停止追踪指定文件,但该文件会保留在工作区
$ git rm –cached [file]
# 改名文件,并且将这个改名放入暂存区
$ git mv [file-original] [file-renamed]
# 提交暂存区到仓库区
$ git commit -m [message]
# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] … -m [message]
# 提交工作区自上次commit之后的变化,直接到仓库区
$ git commit -a
# 提交时显示所有diff信息
$ git commit -v
# 使用一次新的commit,替代上一次提交# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit –amend -m [message]
# 重做上一次commit,并包括指定文件的新变化
$ git commit –amend [file1] [file2] …
# 列出所有远程分支
$ git branch -r
# 列出所有本地分支和远程分支
$ git branch -a
# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]
# 新建一个分支,并切换到该分支
$ git checkout -b [branch]
# 新建一个分支,指向指定commit
$ git branch [branch] [commit]
# 新建一个分支,与指定的远程分支建立追踪关系
$ git branch –track [branch] [remote-branch]
# 切换到指定分支,并更新工作区
$ git checkout [branch-name]
# 切换到上一个分支
$ git checkout -
# 合并指定分支到当前分支
$ git merge [branch]
# 选择一个commit,合并进当前分支
$ git cherry-pick [commit]
# 删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin –delete [branch-name]
$ git branch -dr [remote/branch]
Windows系统上面的更新脚本:
::::::::::::::::::::::::::::::::::::::::::::
:: Usage: ./update.bat "msg" ::
::::::::::::::::::::::::::::::::::::::::::::
@echo off
setlocal enabledelayedexpansion
@echo "start update!"
pause
:: 下方设置参数
@set DATE="%date% %time%"
@set FILE="%0"
@set MSG="%1"
pause
:: 下方将双引号删除
@set FILE=%FILE:"=%
@set MSG=%MSG:"=%
@set DATE=%DATE:"=%
pause
:: 下方更新git
cd E:\work\server_release
dir
git status
git remote -v
:: 多人协作首先pull一下到本地
git pull origin master
pause
git status
pause
git config --global http.postBuffer 524288000
echo "set postbuffer"
pause
@git add .
pause
@git commit -m "%FILE% : %MSG% %DATE%"
pause
@git push origin master
pause
::::::::::::::::::::::::::::::::::::::::::::
:: written by -_- ::
::::::::::::::::::::::::::::::::::::::::::::