docs: add zh-tw folder (#195)

Signed-off-by: appleboy <appleboy.tw@gmail.com>
Reviewed-on: https://gitea.com/gitea/docs/pulls/195
Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com>
Co-authored-by: appleboy <appleboy.tw@gmail.com>
Co-committed-by: appleboy <appleboy.tw@gmail.com>
This commit is contained in:
appleboy
2025-04-04 23:28:16 +00:00
committed by Lunny Xiao
parent 3275094871
commit dbfa0ba454
835 changed files with 72590 additions and 5155 deletions

View File

@@ -1,7 +1,7 @@
// @ts-check // @ts-check
// Note: type annotations allow type checking and IDEs autocompletion // Note: type annotations allow type checking and IDEs autocompletion
import {themes as prismThemes} from 'prism-react-renderer'; import { themes as prismThemes } from "prism-react-renderer";
const lightCodeTheme = prismThemes.github; const lightCodeTheme = prismThemes.github;
const darkCodeTheme = prismThemes.dracula; const darkCodeTheme = prismThemes.dracula;
@@ -9,194 +9,206 @@ const darkCodeTheme = prismThemes.dracula;
// order usage directory by type first // order usage directory by type first
function sortItemsByCategory(items) { function sortItemsByCategory(items) {
// type with "category" (directory) first // type with "category" (directory) first
const sortedItems = items.sort(function(a, b) { const sortedItems = items.sort(function (a, b) {
return a.type.localeCompare(b.type); return a.type.localeCompare(b.type);
}) });
return sortedItems; return sortedItems;
} }
const renderApiSSR = process.env.API_SSR !== 'false'; const renderApiSSR = process.env.API_SSR !== "false";
const apiConfig = [ const apiConfig = [
'redocusaurus', "redocusaurus",
{ {
// Plugin Options for loading OpenAPI files // Plugin Options for loading OpenAPI files
specs: renderApiSSR ? [ specs: renderApiSSR
? [
{ {
route: '/api/next/', route: "/api/next/",
spec: 'static/swagger-latest.json', spec: "static/swagger-latest.json",
}, },
{ {
route: '/api/', route: "/api/",
spec: 'static/swagger-23.json', spec: "static/swagger-23.json",
}, },
{ {
route: '/api/1.23/', route: "/api/1.23/",
spec: 'static/swagger-23.json', spec: "static/swagger-23.json",
}, },
{ {
route: '/api/1.22/', route: "/api/1.22/",
spec: 'static/swagger-22.json', spec: "static/swagger-22.json",
}, },
{ {
route: '/api/1.21/', route: "/api/1.21/",
spec: 'static/swagger-21.json', spec: "static/swagger-21.json",
}, },
{ {
route: '/api/1.20/', route: "/api/1.20/",
spec: 'static/swagger-20.json', spec: "static/swagger-20.json",
}, },
{ {
route: '/api/1.19/', route: "/api/1.19/",
spec: 'static/swagger-19.json', spec: "static/swagger-19.json",
} },
]: [], ]
: [],
// Theme Options for modifying how redoc renders them // Theme Options for modifying how redoc renders them
theme: { theme: {
// Change with your site colors // Change with your site colors
primaryColor: '#1890ff', primaryColor: "#1890ff",
}, },
}, },
] ];
const pageConfig = renderApiSSR ? { const pageConfig = renderApiSSR
exclude: [ ? {
'api/**', exclude: ["api/**"],
], }
}: {} : {};
const globalVariables = { const globalVariables = {
current: { current: {
'goVersion': '1.23', goVersion: "1.23",
'minGoVersion': '1.23', minGoVersion: "1.23",
'minNodeVersion': '18', minNodeVersion: "18",
'version': 'main-nightly', version: "main-nightly",
'sourceVersion': 'main', sourceVersion: "main",
'sourceBranch': 'main', sourceBranch: "main",
'dockerVersion': 'nightly', dockerVersion: "nightly",
'displayVersion': '1.24-dev' displayVersion: "1.24-dev",
}, },
'1.23': { 1.23: {
'goVersion': '1.23', goVersion: "1.23",
'minGoVersion': '1.22', minGoVersion: "1.22",
'minNodeVersion': '18', minNodeVersion: "18",
'version': '1.23.6', version: "1.23.6",
'sourceVersion': 'v1.23.0', sourceVersion: "v1.23.0",
'sourceBranch': 'release/v1.23', sourceBranch: "release/v1.23",
'dockerVersion': '1.23.6', dockerVersion: "1.23.6",
'displayVersion': '1.23.6' displayVersion: "1.23.6",
}, },
'1.22': { 1.22: {
'goVersion': '1.22', goVersion: "1.22",
'minGoVersion': '1.22', minGoVersion: "1.22",
'minNodeVersion': '18', minNodeVersion: "18",
'version': '1.22.6', version: "1.22.6",
'sourceVersion': 'v1.22.6', sourceVersion: "v1.22.6",
'sourceBranch': 'release/v1.22', sourceBranch: "release/v1.22",
'dockerVersion': '1.22.6', dockerVersion: "1.22.6",
'displayVersion': '1.22.6' displayVersion: "1.22.6",
}, },
'1.21': { 1.21: {
'goVersion': '1.21', goVersion: "1.21",
'minGoVersion': '1.21', minGoVersion: "1.21",
'minNodeVersion': '18', minNodeVersion: "18",
'version': '1.21.11', version: "1.21.11",
'sourceVersion': 'v1.21.11', sourceVersion: "v1.21.11",
'sourceBranch': 'release/v1.21', sourceBranch: "release/v1.21",
'dockerVersion': '1.21.11', dockerVersion: "1.21.11",
'displayVersion': '1.21.11' displayVersion: "1.21.11",
}, },
'1.20': { "1.20": {
'goVersion': '1.20', goVersion: "1.20",
'minGoVersion': '1.20', minGoVersion: "1.20",
'minNodeVersion': '16', minNodeVersion: "16",
'version': '1.20.6', version: "1.20.6",
'sourceVersion': 'v1.20.6', sourceVersion: "v1.20.6",
'sourceBranch': 'release/v1.20', sourceBranch: "release/v1.20",
'dockerVersion': '1.20.6', dockerVersion: "1.20.6",
'displayVersion': '1.20.6' displayVersion: "1.20.6",
}, },
'1.19': { 1.19: {
'goVersion': '1.20', goVersion: "1.20",
'minGoVersion': '1.19', minGoVersion: "1.19",
'minNodeVersion': '14', minNodeVersion: "14",
'version': '1.19.4', version: "1.19.4",
'sourceVersion': 'v1.19.4', sourceVersion: "v1.19.4",
'sourceBranch': 'release/v1.19', sourceBranch: "release/v1.19",
'dockerVersion': '1.19.4', dockerVersion: "1.19.4",
'displayVersion': '1.19.4' displayVersion: "1.19.4",
} },
} };
const versions = { const versions = {
current: { current: {
label: globalVariables['current'].displayVersion, // path is kept as next for dev (so users can always find "nightly" docs) label: globalVariables["current"].displayVersion, // path is kept as next for dev (so users can always find "nightly" docs)
banner: 'unreleased', banner: "unreleased",
}, },
'1.23': { 1.23: {
label: globalVariables['1.23'].displayVersion, label: globalVariables["1.23"].displayVersion,
}, },
'1.22': { 1.22: {
label: globalVariables['1.22'].displayVersion, label: globalVariables["1.22"].displayVersion,
}, },
'1.21': { 1.21: {
label: globalVariables['1.21'].displayVersion, label: globalVariables["1.21"].displayVersion,
}, },
'1.20': { "1.20": {
label: globalVariables['1.20'].displayVersion, label: globalVariables["1.20"].displayVersion,
}, },
'1.19': { 1.19: {
label: globalVariables['1.19'].displayVersion, label: globalVariables["1.19"].displayVersion,
} },
} };
/** @type {import('@docusaurus/types').Config} */ /** @type {import('@docusaurus/types').Config} */
const config = { const config = {
title: 'Gitea Documentation', title: "Gitea Documentation",
tagline: 'Git with a cup of tea', tagline: "Git with a cup of tea",
url: 'https://docs.gitea.com', url: "https://docs.gitea.com",
baseUrl: '/', baseUrl: "/",
onBrokenLinks: 'warn', onBrokenLinks: "warn",
onBrokenMarkdownLinks: 'warn', onBrokenMarkdownLinks: "warn",
favicon: 'img/favicon.png', favicon: "img/favicon.png",
future:{ future: {
experimental_faster: true experimental_faster: true,
}, },
plugins: [ plugins: [
[ [
'docusaurus-plugin-plausible', "docusaurus-plugin-plausible",
{ {
domain: 'docs.gitea.com', domain: "docs.gitea.com",
}, },
], ],
// for runner documentations // for runner documentations
[ [
'@docusaurus/plugin-content-docs', "@docusaurus/plugin-content-docs",
{ {
id: 'runner', id: "runner",
path: 'runner', path: "runner",
routeBasePath: 'runner', routeBasePath: "runner",
//sidebarPath: './runner/sidebars.js', //sidebarPath: './runner/sidebars.js',
versions: { versions: {
current: { current: {
label: 'main', label: "main",
banner: 'unreleased', banner: "unreleased",
}, },
"0.2.11": { "0.2.11": {
path: '0.2.11', path: "0.2.11",
label: '0.2.11', label: "0.2.11",
}
}, },
lastVersion: '0.2.11',
editUrl: ({versionDocsDirPath, docPath, locale, version, permalink}) => {
return `https://gitea.com/gitea/docs/src/branch/main/${version === 'current' ? 'runner': `runner_versioned_docs/version-${version}`}/${docPath}`;
}, },
async sidebarItemsGenerator({defaultSidebarItemsGenerator, ...args}) { lastVersion: "0.2.11",
const {item} = args; editUrl: ({
versionDocsDirPath,
docPath,
locale,
version,
permalink,
}) => {
return `https://gitea.com/gitea/docs/src/branch/main/${
version === "current"
? "runner"
: `runner_versioned_docs/version-${version}`
}/${docPath}`;
},
async sidebarItemsGenerator({ defaultSidebarItemsGenerator, ...args }) {
const { item } = args;
// Use the provided data to generate a custom sidebar slice // Use the provided data to generate a custom sidebar slice
const sidebarItems = await defaultSidebarItemsGenerator(args); const sidebarItems = await defaultSidebarItemsGenerator(args);
if (item.dirName !== 'usage') { if (item.dirName !== "usage") {
return sidebarItems; return sidebarItems;
} else { } else {
return sortItemsByCategory(sidebarItems); return sortItemsByCategory(sidebarItems);
@@ -207,44 +219,62 @@ const config = {
], ],
i18n: { i18n: {
defaultLocale: 'en-us', defaultLocale: "en-us",
locales: ['en-us', 'zh-cn'/*,'fr-fr', 'zh-tw'*/], // temporarily disable other locales locales: ["en-us", "zh-cn", "zh-tw"],
localeConfigs: { localeConfigs: {
'en-us': { "en-us": {
label: 'English', label: "English",
}, },
'zh-cn': { "zh-cn": {
label: '中文', label: "簡體中文",
},
"zh-tw": {
label: "繁體中文",
}, },
}, },
}, },
presets: [ presets: [
[ [
'@docusaurus/preset-classic', "@docusaurus/preset-classic",
//'classic', //'classic',
/** @type {import('@docusaurus/preset-classic').Options} */ /** @type {import('@docusaurus/preset-classic').Options} */
({ ({
docs: { docs: {
sidebarPath: require.resolve('./sidebars.js'), sidebarPath: require.resolve("./sidebars.js"),
routeBasePath: '/', // Serve the docs at the site's root routeBasePath: "/", // Serve the docs at the site's root
editUrl: ({versionDocsDirPath, docPath, locale, version, permalink}) => { editUrl: ({
versionDocsDirPath,
docPath,
locale,
version,
permalink,
}) => {
// Special case for awesome page // Special case for awesome page
if (docPath.includes('awesome.md')) { if (docPath.includes("awesome.md")) {
return `https://gitea.com/gitea/awesome-gitea/src/branch/main/README.md` return `https://gitea.com/gitea/awesome-gitea/src/branch/main/README.md`;
} }
if (locale === 'en-us') { if (locale === "en-us") {
return `https://gitea.com/gitea/docs/src/branch/main/${version === 'current' ? 'docs': `versioned_docs/version-${version}`}/${docPath}`; return `https://gitea.com/gitea/docs/src/branch/main/${
version === "current"
? "docs"
: `versioned_docs/version-${version}`
}/${docPath}`;
} }
return `https://gitea.com/gitea/docs/src/branch/main/i18n/${locale}/docusaurus-plugin-content-docs/${version === 'current' ? 'current': `version-${version}`}/${docPath}`; return `https://gitea.com/gitea/docs/src/branch/main/i18n/${locale}/docusaurus-plugin-content-docs/${
version === "current" ? "current" : `version-${version}`
}/${docPath}`;
}, },
versions: versions, versions: versions,
lastVersion: '1.23', lastVersion: "1.23",
async sidebarItemsGenerator({defaultSidebarItemsGenerator, ...args}) { async sidebarItemsGenerator({
const {item} = args; defaultSidebarItemsGenerator,
...args
}) {
const { item } = args;
// Use the provided data to generate a custom sidebar slice // Use the provided data to generate a custom sidebar slice
const sidebarItems = await defaultSidebarItemsGenerator(args); const sidebarItems = await defaultSidebarItemsGenerator(args);
if (item.dirName !== 'usage') { if (item.dirName !== "usage") {
return sidebarItems; return sidebarItems;
} else { } else {
return sortItemsByCategory(sidebarItems); return sortItemsByCategory(sidebarItems);
@@ -253,37 +283,40 @@ const config = {
}, },
blog: false, blog: false,
theme: { theme: {
customCss: require.resolve('./src/css/custom.css'), customCss: require.resolve("./src/css/custom.css"),
}, },
pages: pageConfig, pages: pageConfig,
gtag: { gtag: {
trackingID: 'G-KHM0KYT506' trackingID: "G-KHM0KYT506",
}, },
}), }),
], ],
apiConfig, apiConfig,
], ],
markdown: { markdown: {
preprocessor: ({filePath, fileContent}) => { preprocessor: ({ filePath, fileContent }) => {
var key = ''; var key = "";
var found = false; var found = false;
for (key in globalVariables) { for (key in globalVariables) {
let folderName = (key == 'current' ? 'current' : `version-${key}`); let folderName = key == "current" ? "current" : `version-${key}`;
if (filePath.includes(`/${folderName}/`)) { if (filePath.includes(`/${folderName}/`)) {
found = true; found = true;
break; break;
} }
} }
if (key == '' || !found) { if (key == "" || !found) {
key = 'current'; key = "current";
} }
let content = fileContent; let content = fileContent;
for (const variable in globalVariables[key]) { for (const variable in globalVariables[key]) {
content = content.replaceAll('@'+variable+'@', globalVariables[key][variable]); content = content.replaceAll(
"@" + variable + "@",
globalVariables[key][variable]
);
} }
return content return content;
}, },
}, },
themes: [ themes: [
@@ -295,164 +328,168 @@ const config = {
highlightSearchTermsOnTargetPage: true, highlightSearchTermsOnTargetPage: true,
explicitSearchResultPath: true, explicitSearchResultPath: true,
indexBlog: false, indexBlog: false,
docsRouteBasePath: "/" docsRouteBasePath: "/",
} },
] ],
], ],
themeConfig: themeConfig:
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */ /** @type {import('@docusaurus/preset-classic').ThemeConfig} */
({ ({
metadata: [ metadata: [
{name: 'keywords', content: 'gitea, git, devops, actions, packages, documentation, self-hosted, open-source, version control, gitlab, github'} {
name: "keywords",
content:
"gitea, git, devops, actions, packages, documentation, self-hosted, open-source, version control, gitlab, github",
},
], ],
colorMode: { colorMode: {
defaultMode: 'light', defaultMode: "light",
disableSwitch: false, disableSwitch: false,
respectPrefersColorScheme: true, respectPrefersColorScheme: true,
}, },
announcementBar: { announcementBar: {
id: 'announcementBar-4', // Increment on change id: "announcementBar-4", // Increment on change
content: `<a href="https://about.gitea.com/products/cloud">Try &nbsp; Gitea Cloud &nbsp; ☁️ &nbsp; for 30 days <span aria-hidden="true">&rarr;</span> Accelerate your Development & Deploys!</a>`, content: `<a href="https://about.gitea.com/products/cloud">Try &nbsp; Gitea Cloud &nbsp; ☁️ &nbsp; for 30 days <span aria-hidden="true">&rarr;</span> Accelerate your Development & Deploys!</a>`,
}, },
navbar: { navbar: {
title: 'Gitea', title: "Gitea",
logo: { logo: {
alt: 'Gitea Logo', alt: "Gitea Logo",
src: 'img/gitea.svg', src: "img/gitea.svg",
href: 'https://about.gitea.com/', href: "https://about.gitea.com/",
target: '_self', target: "_self",
}, },
items: [ items: [
{ {
type: 'doc', type: "doc",
docId: 'index', docId: "index",
position: 'left', position: "left",
label: 'Docs', label: "Docs",
}, },
{ {
to: '/api/1.23/', to: "/api/1.23/",
label: 'API', label: "API",
position: 'left', position: "left",
activeBaseRegex: 'api/(1.19|1.20|1.21|1.22|1.23|next)/', activeBaseRegex: "api/(1.19|1.20|1.21|1.22|1.23|next)/",
}, },
{ {
to: '/runner/0.2.11/', to: "/runner/0.2.11/",
label: 'Runner', label: "Runner",
position: 'left', position: "left",
activeBaseRegex: 'runner/(0.2.11|next)/', activeBaseRegex: "runner/(0.2.11|next)/",
}, },
{ {
position: 'left', position: "left",
label: 'Enterprise', label: "Enterprise",
href: 'https://docs.gitea.com/enterprise', href: "https://docs.gitea.com/enterprise",
className: 'internal-href', className: "internal-href",
target: '_self', target: "_self",
}, },
{ {
type: 'search', type: "search",
position: 'right', position: "right",
}, },
{ {
type: 'localeDropdown', type: "localeDropdown",
position: 'right', position: "right",
}, },
{ {
type: 'docsVersionDropdown', type: "docsVersionDropdown",
position: 'right', position: "right",
dropdownActiveClassDisabled: true, dropdownActiveClassDisabled: true,
}, },
{ {
type: 'custom-Dropdown', type: "custom-Dropdown",
label: 'API Version', label: "API Version",
position: 'right', position: "right",
items: [ items: [
{to: '/api/next/', label: '1.24-dev' }, { to: "/api/next/", label: "1.24-dev" },
{to: '/api/1.23/', label: '1.23.6' }, { to: "/api/1.23/", label: "1.23.6" },
{to: '/api/1.22/', label: '1.22.6' }, { to: "/api/1.22/", label: "1.22.6" },
{to: '/api/1.21/', label: '1.21.11' }, { to: "/api/1.21/", label: "1.21.11" },
{to: '/api/1.20/', label: '1.20.6' }, { to: "/api/1.20/", label: "1.20.6" },
{to: '/api/1.19/', label: '1.19.4' }, { to: "/api/1.19/", label: "1.19.4" },
], ],
routerRgx: '\/api\/', routerRgx: "/api/",
classNames: 'api-dropdown', classNames: "api-dropdown",
}, },
{ {
type: 'custom-Dropdown', type: "custom-Dropdown",
label: 'Runner Version', label: "Runner Version",
position: 'right', position: "right",
items: [ items: [
{to: '/runner/next/', label: 'development' }, { to: "/runner/next/", label: "development" },
{to: '/runner/0.2.11/', label: '0.2.11' }, { to: "/runner/0.2.11/", label: "0.2.11" },
], ],
routerRgx: '\/runner\/', routerRgx: "/runner/",
classNames: 'runner-dropdown', classNames: "runner-dropdown",
}, },
{ {
to: 'help/support', to: "help/support",
position: 'right', position: "right",
label: 'Support', label: "Support",
activeBaseRegex: 'help/support', activeBaseRegex: "help/support",
}, },
{ {
href: 'https://gitea.com/user/login', href: "https://gitea.com/user/login",
label: 'Sign In', label: "Sign In",
position: 'right', position: "right",
className: 'internal-href signin-button', className: "internal-href signin-button",
target: '_self', target: "_self",
}, },
], ],
}, },
footer: { footer: {
style: 'dark', style: "dark",
links: [ links: [
{ {
title: 'Community', title: "Community",
items: [ items: [
{ {
label: 'Awesome Gitea', label: "Awesome Gitea",
href: 'https://gitea.com/gitea/awesome-gitea', href: "https://gitea.com/gitea/awesome-gitea",
}, },
{ {
label: 'Stack Overflow', label: "Stack Overflow",
href: 'https://stackoverflow.com/questions/tagged/gitea', href: "https://stackoverflow.com/questions/tagged/gitea",
}, },
{ {
label: 'Discord', label: "Discord",
href: 'https://discord.gg/gitea', href: "https://discord.gg/gitea",
}, },
{ {
label: 'Matrix', label: "Matrix",
href: 'https://matrix.to/#/#gitea-space:matrix.org', href: "https://matrix.to/#/#gitea-space:matrix.org",
}, },
{ {
label: 'Forum', label: "Forum",
href: 'https://forum.gitea.com/', href: "https://forum.gitea.com/",
}, },
{ {
label: 'Twitter', label: "Twitter",
href: 'https://twitter.com/giteaio', href: "https://twitter.com/giteaio",
}, },
{ {
label: 'Mastodon', label: "Mastodon",
href: 'https://social.gitea.io/@gitea', href: "https://social.gitea.io/@gitea",
}, },
], ],
}, },
{ {
title: 'Code', title: "Code",
items: [ items: [
{ {
label: 'GitHub', label: "GitHub",
href: 'https://github.com/go-gitea/gitea', href: "https://github.com/go-gitea/gitea",
}, },
{ {
label: 'Gitea', label: "Gitea",
href: 'https://gitea.com/gitea', href: "https://gitea.com/gitea",
}, },
{ {
label: 'Tea CLI', label: "Tea CLI",
href: 'https://gitea.com/gitea/tea', href: "https://gitea.com/gitea/tea",
}, },
], ],
}, },
@@ -461,7 +498,7 @@ const config = {
prism: { prism: {
theme: lightCodeTheme, theme: lightCodeTheme,
darkTheme: darkCodeTheme, darkTheme: darkCodeTheme,
additionalLanguages: ['ini','diff','json','http','docker','php'], additionalLanguages: ["ini", "diff", "json", "http", "docker", "php"],
}, },
}), }),
}; };

View File

@@ -5,7 +5,6 @@ sidebar_position: 110
aliases: aliases:
- /zh-cn/adding-legal-pages - /zh-cn/adding-legal-pages
--- ---
# 添加法律页面 # 添加法律页面

View File

@@ -10,7 +10,7 @@ aliases:
## 轻量级目录访问协议Lightweight Directory Access ProtocolLDAP ## 轻量级目录访问协议Lightweight Directory Access ProtocolLDAP
通过BindDNLDAP和简单认证方式LDAP共享以下字段: 通过 BindDNLDAP 和简单认证方式 LDAP 共享以下字段:
- 认证名称 **(必选)** - 认证名称 **(必选)**
@@ -27,48 +27,52 @@ aliases:
- 例如: LDAP `389`/ LDAPs `636` - 例如: LDAP `389`/ LDAPs `636`
- 安全协议 (可选) - 安全协议 (可选)
- 连接LDAP服务器时是否使用TLS协议。
- 连接 LDAP 服务器时是否使用 TLS 协议。
- 管理员过滤规则 (可选) - 管理员过滤规则 (可选)
- 一个LDAP过滤器用于指定哪些用户应该被赋予管理员特权。如果用户帐户符合过滤器条件则该用户将被授予管理员权限。
- 一个 LDAP 过滤器,用于指定哪些用户应该被赋予管理员特权。如果用户帐户符合过滤器条件,则该用户将被授予管理员权限。
- 示例:`(objectClass=adminAccount)` - 示例:`(objectClass=adminAccount)`
- 适用于Microsoft Active DirectoryAD的示例:`memberOf=CN=admin-group,OU=example,DC=example,DC=org` - 适用于 Microsoft Active DirectoryAD的示例:`memberOf=CN=admin-group,OU=example,DC=example,DC=org`
- 用户名属性(可选) - 用户名属性(可选)
- 用户LDAP记录中包含用户名称的属性。在第一次成功登录后将使用指定的属性值作为新的Gitea账户用户名。若留空则使用登录表单上提供的用户名。 - 用户 LDAP 记录中包含用户名称的属性。在第一次成功登录后,将使用指定的属性值作为新的 Gitea 账户用户名。若留空,则使用登录表单上提供的用户名。
- 当提供的登录名与多个属性匹配时这一选项非常有用但是只有一个特定属性应该用于Gitea账户名称请参阅"用户过滤器"。 - 当提供的登录名与多个属性匹配时,这一选项非常有用,但是只有一个特定属性应该用于 Gitea 账户名称,请参阅"用户过滤器"。
- 示例:uid - 示例:uid
- 适用于Microsoft Active DirectoryAD的示例:`sAMAccountName` - 适用于 Microsoft Active DirectoryAD的示例:`sAMAccountName`
- 名字属性(可选) - 名字属性(可选)
- 用户LDAP记录中包含用户名字的属性。将用于填充他们的账户信息。 - 用户 LDAP 记录中包含用户名字的属性。将用于填充他们的账户信息。
- 示例:givenName - 示例:givenName
- 姓氏属性(可选) - 姓氏属性(可选)
- 用户LDAP记录中包含用户姓氏的属性。将用于填充他们的账户信息。
- 用户 LDAP 记录中包含用户姓氏的属性。将用于填充他们的账户信息。
- 示例:`sn` - 示例:`sn`
- 电子邮件属性 **(必选)** - 电子邮件属性 **(必选)**
- 用户LDAP记录中包含用户电子邮件地址的属性。将用于填充他们的账户信息。 - 用户 LDAP 记录中包含用户电子邮件地址的属性。将用于填充他们的账户信息。
- 示例:`mail` - 示例:`mail`
### LDAP(via BindDN) ### LDAP(via BindDN)
需要额外设置以下字段: 需要额外设置以下字段:
- 绑定DN (可选) - 绑定 DN (可选)
- 搜索用户时绑定到LDAP服务器的DN。这可以留空以执行匿名搜索。 - 搜索用户时绑定到 LDAP 服务器的 DN。这可以留空以执行匿名搜索。
- 示例: `cn=Search,dc=mydomain,dc=com` - 示例: `cn=Search,dc=mydomain,dc=com`
- 绑定密码 (可选) - 绑定密码 (可选)
- 上述指定的Bind DN绑定区别名的密码如果有的话。注意该密码在服务器上使用SECRET_KEY进行加密存储。仍然建议确保Bind DN具有尽可能少的权限。 - 上述指定的 Bind DN绑定区别名的密码如果有的话。注意该密码在服务器上使用 SECRET_KEY 进行加密存储。仍然建议确保 Bind DN 具有尽可能少的权限。
- 用户搜索基准 **(必选)** - 用户搜索基准 **(必选)**
- 这是用于搜索用户帐户的LDAP基础路径. - 这是用于搜索用户帐户的 LDAP 基础路径.
- 示例: `ou=Users,dc=mydomain,dc=com` - 示例: `ou=Users,dc=mydomain,dc=com`
- 用户过滤规则 **(必选)** - 用户过滤规则 **(必选)**
@@ -79,19 +83,19 @@ aliases:
- 如需多次替换,应使用 `%[1]s`,例如在将提供的登录名与多个属性(如用户标识符、电子邮件甚至电话号码)进行匹配时。 - 如需多次替换,应使用 `%[1]s`,例如在将提供的登录名与多个属性(如用户标识符、电子邮件甚至电话号码)进行匹配时。
- 示例: `(&(objectClass=Person)(|(uid=%[1]s)(mail=%[1]s)(mobile=%[1]s)))` - 示例: `(&(objectClass=Person)(|(uid=%[1]s)(mail=%[1]s)(mobile=%[1]s)))`
- 启用用户同步 - 启用用户同步
- 这个选项启用了一个周期性任务用于将Gitea用户与LDAP服务器进行同步。默认的同步周期是每24小时 - 这个选项启用了一个周期性任务,用于将 Gitea 用户与 LDAP 服务器进行同步。默认的同步周期是每 24 小时,
但您可以在app.ini文件中进行更改。 但您可以在 app.ini 文件中进行更改。
有关此部分的详细说明,请参阅[sample 有关此部分的详细说明,请参阅[sample
app.ini](https://github.com/go-gitea/gitea/blob/main/custom/conf/app.example.ini) app.ini](https://github.com/go-gitea/gitea/blob/main/custom/conf/app.example.ini)
_cron.sync_external_users_ 部分的注释。前面提到的_User Search Base_和_User Filter_ *cron.sync_external_users* 部分的注释。前面提到的*User Search Base*和*User Filter*
设置将限制哪些用户可以使用Gitea以及哪些用户将被同步。 设置将限制哪些用户可以使用 Gitea 以及哪些用户将被同步。
在初始运行任务时将根据给定的设置创建所有与LDAP匹配的用户因此在使用大型企业LDAP目录时需要小心。 在初始运行任务时,将根据给定的设置创建所有与 LDAP 匹配的用户,因此在使用大型企业 LDAP 目录时需要小心。
### LDAP(simple auth) ### LDAP(simple auth)
需要额外设置以下字段: 需要额外设置以下字段:
- 用户DN **(必选)** - 用户 DN **(必选)**
- 用作用户 DN 的模板。匹配参数 `%s` 将替换为登录表单中的登录名。 - 用作用户 DN 的模板。匹配参数 `%s` 将替换为登录表单中的登录名。
- 示例: `cn=%s,ou=Users,dc=mydomain,dc=com` - 示例: `cn=%s,ou=Users,dc=mydomain,dc=com`
@@ -108,11 +112,12 @@ aliases:
- 示例: `(&(objectClass=posixAccount)(|(cn=%[1]s)(mail=%[1]s)))` - 示例: `(&(objectClass=posixAccount)(|(cn=%[1]s)(mail=%[1]s)))`
- 示例: `(&(objectClass=posixAccount)(|(uid=%[1]s)(mail=%[1]s)))` - 示例: `(&(objectClass=posixAccount)(|(uid=%[1]s)(mail=%[1]s)))`
### 使用LDAP验证分组成员 ### 使用 LDAP 验证分组成员
使用以下字段: 使用以下字段:
- 群组搜索基础DN(可选) - 群组搜索基础 DN(可选)
- 组使用的 LDAP DN。 - 组使用的 LDAP DN。
- 示例: `ou=group,dc=mydomain,dc=com` - 示例: `ou=group,dc=mydomain,dc=com`
@@ -132,43 +137,46 @@ aliases:
## 可插拔式认证模块(Pluggable Authentication Module,PAM) ## 可插拔式认证模块(Pluggable Authentication Module,PAM)
这个过程启用了PAMPluggable Authentication Modules认证。用户仍然可以通过用户管理手动添加到系统中。 这个过程启用了 PAMPluggable Authentication Modules认证。用户仍然可以通过用户管理手动添加到系统中。
PAM提供了一种机制通过对用户进行PAM认证来自动将其添加到当前数据库中。为了与普通的Linux密码一起使用 PAM 提供了一种机制,通过对用户进行 PAM 认证来自动将其添加到当前数据库中。为了与普通的 Linux 密码一起使用,
运行Gitea的用户还必须具有对`/etc/shadow`的读取权限,以便在使用公钥登录时检查账户的有效性。 运行 Gitea 的用户还必须具有对`/etc/shadow`的读取权限,以便在使用公钥登录时检查账户的有效性。
**注意**:如果用户已将SSH公钥添加到Gitea中使用这些密钥可能会绕过登录检查系统。因此 **注意**:如果用户已将 SSH 公钥添加到 Gitea 中,使用这些密钥可能会绕过登录检查系统。因此,
如果您希望禁用使用PAM进行身份验证的用户应该在Gitea中手动禁用该账户使用内置的用户管理功能。 如果您希望禁用使用 PAM 进行身份验证的用户,应该在 Gitea 中手动禁用该账户,使用内置的用户管理功能。
1. 配置和安装准备. 1. 配置和安装准备.
- 建议您创建一个管理用户. - 建议您创建一个管理用户.
- 建议取消自动注册. - 建议取消自动注册.
1. 一旦数据库已初始化完成,使用新创建的管理员账户登录. 1. 一旦数据库已初始化完成,使用新创建的管理员账户登录.
1. 导航至用户设置(右上角的图标),然后选择 1. 导航至用户设置(右上角的图标),然后选择
`Site Administration` -> `Authentication Sources`, 并选择 `Site Administration` -> `Authentication Sources`, 并选择
`Add Authentication Source`. `Add Authentication Source`.
1. 填写字段如下: 1. 填写字段如下:
- 认证类型:`PAM` - 认证类型:`PAM`
- 名称:任何有效的值都可以,如果您愿意,可以使用"System Authentication"。 - 名称:任何有效的值都可以,如果您愿意,可以使用"System Authentication"。
- PAM服务名称:从/etc/pam.d/目录下选择适用于所需认证的正确文件[^1]。 - PAM 服务名称:从/etc/pam.d/目录下选择适用于所需认证的正确文件[^1]。
- PAM电子邮件域:用户认证时要附加的电子邮件后缀。例如如果登录系统期望一个名为gituse的用户 - PAM 电子邮件域:用户认证时要附加的电子邮件后缀。例如,如果登录系统期望一个名为 gituse 的用户,
并且将此字段设置为mail.com那么Gitea在验证一个GIT实例的用户时将期望user emai字段为gituser@mail.com[^2]。 并且将此字段设置为 mail.com那么 Gitea 在验证一个 GIT 实例的用户时将期望 user emai 字段为gituser@mail.com[^2]。
**Note**: PAM 支持通过[build-time flags](installation/from-source.md#build)添加, **Note**: PAM 支持通过[build-time flags](installation/from-source.md#build)添加,
而官方提供的二进制文件通常不会默认启用此功能。PAM需要确保系统上有必要的libpam动态库并且编译器可以访问必要的PAM开发头文件。 而官方提供的二进制文件通常不会默认启用此功能。PAM 需要确保系统上有必要的 libpam 动态库,并且编译器可以访问必要的 PAM 开发头文件。
[^1]: 例如在Debian "Bullseye"上使用标准Linux登录可以使用`common-session-noninteractive`。这个值对于其他版本的Debian [^1]:
包括Ubuntu和Mint可能也是有效的请查阅您所使用发行版的文档以确认。 例如,在 Debian "Bullseye"上使用标准 Linux 登录,可以使用`common-session-noninteractive`。这个值对于其他版本的 Debian
包括 Ubuntu 和 Mint可能也是有效的请查阅您所使用发行版的文档以确认。
[^2]: **PAM的必选项** 请注意:在上面的示例中,用户将作为`gituser`而不是`gituser@mail.com`登录到GiteaWeb界面。 [^2]: **PAM 的必选项** 请注意:在上面的示例中,用户将作为`gituser`而不是`gituser@mail.com`登录到 GiteaWeb 界面。
## 简单邮件传输协议(Simple Mail Transfer Protocol,SMTP) ## 简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)
此选项允许 Gitea 以 Gitea 用户身份登录 SMTP 主机。请设置以下字段: 此选项允许 Gitea 以 Gitea 用户身份登录 SMTP 主机。请设置以下字段:
- 身份验证名称 **(必选)** - 身份验证名称 **(必选)**
- 分配给新授权方法的名称 - 分配给新授权方法的名称
- SMTP 验证类型 **(必选)** - SMTP 验证类型 **(必选)**
- 用于连接 SMTP 主机的验证类型plain 或 login - 用于连接 SMTP 主机的验证类型plain 或 login
- 主机名 **(必选)** - 主机名 **(必选)**
@@ -188,7 +196,7 @@ PAM提供了一种机制通过对用户进行PAM认证来自动将其添加
- 示例: `gitea.com,mydomain.com,mydomain2.com` - 示例: `gitea.com,mydomain.com,mydomain2.com`
- 强制使用 SMTPS - 强制使用 SMTPS
- 默认情况下将使用SMTPS连接到端口465.如果您希望将smtp用于其他端口自行设置 - 默认情况下将使用 SMTPS 连接到端口 465.如果您希望将 smtp 用于其他端口,自行设置
- 否则,如果服务器提供' STARTTLS '扩展名,则将使用此扩展名 - 否则,如果服务器提供' STARTTLS '扩展名,则将使用此扩展名
- 跳过 TLS 验证 - 跳过 TLS 验证
- 禁用 TLS 验证身份. - 禁用 TLS 验证身份.
@@ -199,7 +207,7 @@ PAM提供了一种机制通过对用户进行PAM认证来自动将其添加
- 要使用 FreeIPA 凭据登录 Gitea需要为 Gitea 创建一个绑定帐户。 - 要使用 FreeIPA 凭据登录 Gitea需要为 Gitea 创建一个绑定帐户。
创建一个绑定帐户: 创建一个绑定帐户:
- 在FreeIPA服务器上创建一个gitea.ldif文件并将`dc=example,dc=com`替换为您的`dn`,然后提供一个适当安全的密码。 - FreeIPA 服务器上创建一个 gitea.ldif 文件,并将`dc=example,dc=com`替换为您的`dn`,然后提供一个适当安全的密码。
```sh ```sh
dn: uid=gitea,cn=sysaccounts,cn=etc,dc=example,dc=com dn: uid=gitea,cn=sysaccounts,cn=etc,dc=example,dc=com
@@ -212,33 +220,33 @@ PAM提供了一种机制通过对用户进行PAM认证来自动将其添加
nsIdleTimeout: 0 nsIdleTimeout: 0
``` ```
- 导入LDIF文件如果需要请将localhost更改为IPA服务器。系统会提示您输入Directory Manager的密码。: - 导入 LDIF 文件(如果需要,请将 localhost 更改为 IPA 服务器)。系统会提示您输入 Directory Manager 的密码。:
```sh ```sh
ldapmodify -h localhost -p 389 -x -D \ ldapmodify -h localhost -p 389 -x -D \
"cn=Directory Manager" -W -f gitea.ldif "cn=Directory Manager" -W -f gitea.ldif
``` ```
- 为`gitea_users`添加IPA组: - 为`gitea_users`添加 IPA 组:
```sh ```sh
ipa group-add --desc="Gitea Users" gitea_users ipa group-add --desc="Gitea Users" gitea_users
``` ```
- **提示**:对于IPA凭证错误运行' kinit admin '并提供域管理帐户密码. - **提示**:对于 IPA 凭证错误,运行' kinit admin '并提供域管理帐户密码.
- 以管理员身份登录Gitea点击Admin Panel下的`Authentication`。然后单击`Add New Source`并填写详细信息,更改所有适当的地方。 - 以管理员身份登录 Gitea点击 Admin Panel 下的`Authentication`。然后单击`Add New Source`并填写详细信息,更改所有适当的地方。
## SPNEGO with SSPI (Kerberos/NTLM, for Windows only) ## SPNEGO with SSPI (Kerberos/NTLM, for Windows only)
Gitea支持通过Windows内置的安全支持提供程序接口Security Support Provider InterfaceSSPI实现SPNEGO单点登录认证由RFC4559定义的方案用于服务器的Web部分。SSPI仅在Windows环境中工作即当服务器和客户端都在Windows操作系统上运行时。 Gitea 支持通过 Windows 内置的安全支持提供程序接口Security Support Provider InterfaceSSPI实现 SPNEGO 单点登录认证(由 RFC4559 定义的方案),用于服务器的 Web 部分。SSPI 仅在 Windows 环境中工作,即当服务器和客户端都在 Windows 操作系统上运行时。
在激活SSPI单点登录认证SSO之前您需要准备您的环境: 在激活 SSPI 单点登录认证SSO之前您需要准备您的环境:
- 在Active Directory中创建一个单独的用户账户gitea.exe 进程将在该账户下运行例如在domain.local域下创建一个名为user的账户: - 在 Active Directory 中创建一个单独的用户账户gitea.exe 进程将在该账户下运行(例如,在 domain.local 域下创建一个名为 user 的账户:
- 为运行gitea.exe的主机创建一个服务主体名称Service Principal NameSPN其类别为HTTP: - 为运行 gitea.exe 的主机创建一个服务主体名称Service Principal NameSPN其类别为 HTTP:
- 以特权域用户例如域管理员的身份启动“命令提示符”或“PowerShell”。 - 以特权域用户例如域管理员的身份启动“命令提示符”或“PowerShell”。
- 运行下面的命令将host.domain.local替换为Web应用程序将运行的服务器的完全限定域名FQDN将domain\user替换为在前一步中创建的账户名称: - 运行下面的命令,将 host.domain.local 替换为 Web 应用程序将运行的服务器的完全限定域名FQDN domain\user 替换为在前一步中创建的账户名称:
```sh ```sh
setspn -A HTTP/host.domain.local domain\user setspn -A HTTP/host.domain.local domain\user
@@ -247,22 +255,22 @@ Gitea支持通过Windows内置的安全支持提供程序接口Security Suppo
在遵循上述步骤之前,请确保您按照以下流程进行操作: 在遵循上述步骤之前,请确保您按照以下流程进行操作:
1. 用之前创建的用户登录(如果已经登录,请先注销)。 1. 用之前创建的用户登录(如果已经登录,请先注销)。
2. 确保在`custom/conf/app.ini`文件的`[server]`部分中,`ROOT_URL`设置为Web应用程序将运行的服务器的完全限定域名FQDN与之前创建服务主体名称时使用的一致例如`host.domain.local`)。 2. 确保在`custom/conf/app.ini`文件的`[server]`部分中,`ROOT_URL`设置为 Web 应用程序将运行的服务器的完全限定域名FQDN与之前创建服务主体名称时使用的一致例如`host.domain.local`)。
3. 启动Web服务器运行 `gitea.exe web`)。 3. 启动 Web 服务器(运行 `gitea.exe web`)。
4. 在 `Site Administration -> Authentication Sources` 中添加一个 `SPNEGO with SSPI` 认证源以启用SSPI认证。 4. 在 `Site Administration -> Authentication Sources` 中添加一个 `SPNEGO with SSPI` 认证源,以启用 SSPI 认证。
5. 在域中的客户端计算机上,使用任何域用户登录(与运行`gitea.exe`的服务器不同)。 5. 在域中的客户端计算机上,使用任何域用户登录(与运行`gitea.exe`的服务器不同)。
6. 如果您使用ChromeEdge浏览器请将Web应用程序的URL添加到“本地站点”`Internet选项 -> 安全 -> 本地站点 -> 站点`)。 6. 如果您使用 ChromeEdge 浏览器,请将 Web 应用程序的 URL 添加到“本地站点”(`Internet选项 -> 安全 -> 本地站点 -> 站点`)。
7. 启动ChromeEdge浏览器导航到GiteaFQDN URL例如`http://host.domain.local:3000`)。 7. 启动 ChromeEdge 浏览器,导航到 GiteaFQDN URL例如`http://host.domain.local:3000`)。
8. 在控制面板中点击“Sign In”按钮然后选择SSPI将会自动使用当前登录到计算机的用户进行登录。 8. 在控制面板中点击“Sign In”按钮然后选择 SSPI将会自动使用当前登录到计算机的用户进行登录。
9. 如果无法正常工作,请确保: 9. 如果无法正常工作,请确保:
- 您不是在运行`gitea.exe`的同一台服务器上运行Web浏览器。应该在与服务器不同的域加入计算机客户端上运行Web浏览器。如果客户端和服务器都在同一台计算机上运行则NTLM将优先于Kerberos。 - 您不是在运行`gitea.exe`的同一台服务器上运行 Web 浏览器。应该在与服务器不同的域加入计算机(客户端)上运行 Web 浏览器。如果客户端和服务器都在同一台计算机上运行,则 NTLM 将优先于 Kerberos。
- 主机上只有一个`HTTP/...`的SPN。 - 主机上只有一个`HTTP/...`的 SPN。
- SPN中只包含主机名不包含端口号。 - SPN 中只包含主机名,不包含端口号。
- 将Web应用程序的URL添加到"本地站点"。 - 将 Web 应用程序的 URL 添加到"本地站点"。
- 服务器和客户端的时钟差异不超过5分钟(取决于组策略)。 - 服务器和客户端的时钟差异不超过 5 分钟(取决于组策略)。
- 在Internet Explorer中启用了"集成Windows身份验证"(在"高级设置"下)。 - 在 Internet Explorer 中启用了"集成 Windows 身份验证"(在"高级设置"下)。
遵循这些步骤您应该能够成功启用和使用SSPI单点登录认证SSO 遵循这些步骤,您应该能够成功启用和使用 SSPI 单点登录认证SSO
## 反向代理认证 ## 反向代理认证
@@ -279,7 +287,7 @@ ENABLE_REVERSE_PROXY_AUTHENTICATION = true
如果设置了 `ENABLE_REVERSE_PROXY_FULL_NAME=true`,则用户的全名会从 `X-WEBAUTH-FULLNAME` 读取,这样在自动创建用户时将使用这个字段作为用户全名,你也可以通过修改 `REVERSE_PROXY_AUTHENTICATION_FULL_NAME` 来变更 HTTP 头。 如果设置了 `ENABLE_REVERSE_PROXY_FULL_NAME=true`,则用户的全名会从 `X-WEBAUTH-FULLNAME` 读取,这样在自动创建用户时将使用这个字段作为用户全名,你也可以通过修改 `REVERSE_PROXY_AUTHENTICATION_FULL_NAME` 来变更 HTTP 头。
你也可以通过修改 `REVERSE_PROXY_TRUSTED_PROXIES` 来设置反向代理的IP地址范围加强安全性默认值是 `127.0.0.0/8,::1/128`。 通过 `REVERSE_PROXY_LIMIT` 可以设置最多信任几级反向代理。 你也可以通过修改 `REVERSE_PROXY_TRUSTED_PROXIES` 来设置反向代理的 IP 地址范围,加强安全性,默认值是 `127.0.0.0/8,::1/128`。 通过 `REVERSE_PROXY_LIMIT` 可以设置最多信任几级反向代理。
你可以通过以下配置为 API 启用此认证方法: 你可以通过以下配置为 API 启用此认证方法:

View File

@@ -5,12 +5,11 @@ sidebar_position: 11
aliases: aliases:
- /zh-cn/backup-and-restore - /zh-cn/backup-and-restore
--- ---
# 备份与恢复 # 备份与恢复
Gitea 已经实现了 `dump` 命令可以用来备份所有需要的文件到一个zip压缩文件。该压缩文件可以被用来进行数据恢复。 Gitea 已经实现了 `dump` 命令可以用来备份所有需要的文件到一个 zip 压缩文件。该压缩文件可以被用来进行数据恢复。
## 备份一致性 ## 备份一致性
@@ -20,7 +19,7 @@ Gitea 包括数据库、文件和 Git 仓库,当它被使用时所有这些都
## 备份命令 (`dump`) ## 备份命令 (`dump`)
先转到git用户的权限: `su git`. 再Gitea目录运行 `./gitea dump`。一般会显示类似如下的输出: 先转到 git 用户的权限: `su git`. 再 Gitea 目录运行 `./gitea dump`。一般会显示类似如下的输出:
``` ```
2016/12/27 22:32:09 Creating tmp work dir: /tmp/gitea-dump-417443001 2016/12/27 22:32:09 Creating tmp work dir: /tmp/gitea-dump-417443001
@@ -33,12 +32,12 @@ Gitea 包括数据库、文件和 Git 仓库,当它被使用时所有这些都
最后生成的 `gitea-dump-1482906742.zip` 文件将会包含如下内容: 最后生成的 `gitea-dump-1482906742.zip` 文件将会包含如下内容:
* `app.ini` - 如果原先存储在默认的 custom/ 目录之外,则是配置文件的可选副本 - `app.ini` - 如果原先存储在默认的 custom/ 目录之外,则是配置文件的可选副本
* `custom/` - 所有保存在 `custom/` 目录下的配置和自定义的文件。 - `custom/` - 所有保存在 `custom/` 目录下的配置和自定义的文件。
* `data/` - 数据目录APP_DATA_PATH如果使用文件会话则不包括会话。该目录包括 `attachments``avatars``lfs``indexers`、如果使用 SQLite 则包括 SQLite 文件。 - `data/` - 数据目录APP_DATA_PATH如果使用文件会话则不包括会话。该目录包括 `attachments``avatars``lfs``indexers`、如果使用 SQLite 则包括 SQLite 文件。
* `repos/` - 仓库目录的完整副本。 - `repos/` - 仓库目录的完整副本。
* `gitea-db.sql` - 数据库dump出来的 SQL。 - `gitea-db.sql` - 数据库 dump 出来的 SQL。
* `log/` - Logs文件如果用作迁移不是必须的。 - `log/` - Logs 文件,如果用作迁移不是必须的。
中间备份文件将会在临时目录进行创建,如果您要重新指定临时目录,可以用 `--tempdir` 参数,或者用 `TMPDIR` 环境变量。 中间备份文件将会在临时目录进行创建,如果您要重新指定临时目录,可以用 `--tempdir` 参数,或者用 `TMPDIR` 环境变量。
@@ -53,7 +52,7 @@ mysqldump -u$USER -p$PASS --database $DATABASE > gitea-db.sql
pg_dump -U $USER $DATABASE > gitea-db.sql pg_dump -U $USER $DATABASE > gitea-db.sql
``` ```
### 使用Docker `dump` ### 使用 Docker `dump`
在使用 Docker 时,使用 `dump` 命令有一些注意事项。 在使用 Docker 时,使用 `dump` 命令有一些注意事项。

View File

@@ -5,7 +5,6 @@ sidebar_position: 20
aliases: aliases:
- /zh-cn/cmd-embedded - /zh-cn/cmd-embedded
--- ---
# 嵌入资源提取工具 # 嵌入资源提取工具
@@ -30,7 +29,7 @@ gitea embedded list [--include-vendored] [patterns...]
- 列出所有模板文件,无论在哪个虚拟目录下:`**.tmpl` - 列出所有模板文件,无论在哪个虚拟目录下:`**.tmpl`
- 列出所有邮件模板文件:`templates/mail/**.tmpl` - 列出所有邮件模板文件:`templates/mail/**.tmpl`
列出 `public/assets/img` 目录下的所有文件:`public/assets/img/**` 列出 `public/assets/img` 目录下的所有文件:`public/assets/img/**`
不要忘记为模式使用引号,因为空格、`*` 和其他字符可能对命令行解释器有特殊含义。 不要忘记为模式使用引号,因为空格、`*` 和其他字符可能对命令行解释器有特殊含义。

View File

@@ -5,7 +5,6 @@ sidebar_position: 1
aliases: aliases:
- /zh-cn/command-line - /zh-cn/command-line
--- ---
# 命令行 # 命令行
@@ -61,7 +60,7 @@ aliases:
- 选项: - 选项:
- `--email`:要删除的用户的电子邮件。 - `--email`:要删除的用户的电子邮件。
- `--username`:要删除的用户的用户名。 - `--username`:要删除的用户的用户名。
- `--id`要删除的用户的ID。 - `--id`:要删除的用户的 ID。
- 必须提供 `--id``--username``--email` 中的一个。如果提供多个,则所有条件必须匹配。 - 必须提供 `--id``--username``--email` 中的一个。如果提供多个,则所有条件必须匹配。
- 示例: - 示例:
- `gitea admin user delete --id 1` - `gitea admin user delete --id 1`
@@ -283,12 +282,12 @@ aliases:
### cert ### cert
生成自签名的SSL证书。将输出到当前目录下的`cert.pem``key.pem`文件中,并且会覆盖任何现有文件。 生成自签名的 SSL 证书。将输出到当前目录下的`cert.pem``key.pem`文件中,并且会覆盖任何现有文件。
- 选项: - 选项:
- `--host value`逗号分隔的主机名和IP地址列表此证书适用于这些主机。支持使用通配符。必填。 - `--host value`:逗号分隔的主机名和 IP 地址列表,此证书适用于这些主机。支持使用通配符。必填。
- `--ecdsa-curve value`用于生成密钥的ECDSA曲线。可选。有效选项为P224、P256、P384、P521。 - `--ecdsa-curve value`:用于生成密钥的 ECDSA 曲线。可选。有效选项为 P224、P256、P384、P521。
- `--rsa-bits value`要生成的RSA密钥的大小。可选。如果设置了--ecdsa-curve则忽略此选项。默认值3072 - `--rsa-bits value`:要生成的 RSA 密钥的大小。可选。如果设置了--ecdsa-curve则忽略此选项。默认值3072
- `--start-date value`:证书的创建日期。可选。(格式:`Jan 1 15:04:05 2011`)。 - `--start-date value`:证书的创建日期。可选。(格式:`Jan 1 15:04:05 2011`)。
- `--duration value`证书有效期。可选。默认值8760h0m0s - `--duration value`证书有效期。可选。默认值8760h0m0s
- `--ca`:如果提供此选项,则证书将生成自己的证书颁发机构。可选。 - `--ca`:如果提供此选项,则证书将生成自己的证书颁发机构。可选。
@@ -297,18 +296,18 @@ aliases:
### dump ### dump
将所有文件和数据库导出到一个zip文件中。输出文件将保存在当前目录下类似于`gitea-dump-1482906742.zip` 将所有文件和数据库导出到一个 zip 文件中。输出文件将保存在当前目录下,类似于`gitea-dump-1482906742.zip`
- 选项: - 选项:
- `--file name``-f name`指定要创建的导出文件的名称。可选。默认值gitea-dump-[timestamp].zip - `--file name``-f name`指定要创建的导出文件的名称。可选。默认值gitea-dump-[timestamp].zip
- `--tempdir path``-t path`:指定临时目录的路径。可选。(默认值:/tmp - `--tempdir path``-t path`:指定临时目录的路径。可选。(默认值:/tmp
- `--skip-repository``-R`:跳过仓库的导出。可选。 - `--skip-repository``-R`:跳过仓库的导出。可选。
- `--skip-custom-dir`:跳过自定义目录的导出。可选。 - `--skip-custom-dir`:跳过自定义目录的导出。可选。
- `--skip-lfs-data`跳过LFS数据的导出。可选。 - `--skip-lfs-data`:跳过 LFS 数据的导出。可选。
- `--skip-attachment-data`:跳过附件数据的导出。可选。 - `--skip-attachment-data`:跳过附件数据的导出。可选。
- `--skip-package-data`:跳过包数据的导出。可选。 - `--skip-package-data`:跳过包数据的导出。可选。
- `--skip-log`:跳过日志数据的导出。可选。 - `--skip-log`:跳过日志数据的导出。可选。
- `--database``-d`指定数据库的SQL语法。可选。 - `--database``-d`:指定数据库的 SQL 语法。可选。
- `--verbose``-V`:如果提供此选项,显示附加详细信息。可选。 - `--verbose``-V`:如果提供此选项,显示附加详细信息。可选。
- `--type`设置导出的格式。可选。默认值zip - `--type`设置导出的格式。可选。默认值zip
- 示例: - 示例:
@@ -401,19 +400,19 @@ gitea doctor recreate-table
- 命令: - 命令:
- `shutdown`: 优雅地关闭运行中的进程 - `shutdown`: 优雅地关闭运行中的进程
- `restart`: 优雅地重新启动运行中的进程对于Windows服务器尚未实现 - `restart`: 优雅地重新启动运行中的进程(对于 Windows 服务器尚未实现)
- `flush-queues`: 刷新运行中的进程中的队列 - `flush-queues`: 刷新运行中的进程中的队列
- 选项: - 选项:
- `--timeout value`: 刷新过程的超时时间(默认值: 1m0s - `--timeout value`: 刷新过程的超时时间(默认值: 1m0s
- `--non-blocking`: 设置为true以在返回之前不等待刷新完成 - `--non-blocking`: 设置为 true以在返回之前不等待刷新完成
- `logging`: 调整日志命令 - `logging`: 调整日志命令
- 命令: - 命令:
- `pause`: 暂停日志记录 - `pause`: 暂停日志记录
- 注意: - 注意:
- 如果日志级别低于此级别日志级别将被临时提升为INFO。 - 如果日志级别低于此级别,日志级别将被临时提升为 INFO。
- Gitea将在一定程度上缓冲日志并在超过该点后丢弃日志。 - Gitea 将在一定程度上缓冲日志,并在超过该点后丢弃日志。
- `resume`: 恢复日志记录 - `resume`: 恢复日志记录
- `release-and-reopen`: 使Gitea释放和重新打开用于日志记录的文件和连接相当于向Gitea发送SIGUSR1信号 - `release-and-reopen`: 使 Gitea 释放和重新打开用于日志记录的文件和连接(相当于向 Gitea 发送 SIGUSR1 信号)。
- `remove name`: 删除指定的日志记录器 - `remove name`: 删除指定的日志记录器
- 选项: - 选项:
- `--group group`, `-g group`: 从中删除子记录器的组(默认为`default` - `--group group`, `-g group`: 从中删除子记录器的组(默认为`default`
@@ -429,7 +428,7 @@ gitea doctor recreate-table
- `--expression value`, `-e value`: 日志记录器的匹配表达式 - `--expression value`, `-e value`: 日志记录器的匹配表达式
- `--prefix value`, `-p value`: 日志记录器的前缀 - `--prefix value`, `-p value`: 日志记录器的前缀
- `--color`: 在日志中使用颜色 - `--color`: 在日志中使用颜色
- `--stderr`: 将控制台日志输出到stderr - 仅适用于控制台 - `--stderr`: 将控制台日志输出到 stderr - 仅适用于控制台
- `file`: 添加文件日志记录器 - `file`: 添加文件日志记录器
- 选项: - 选项:
- `--group value`, `-g value`: 要添加日志记录器的组 - 默认为"default" - `--group value`, `-g value`: 要添加日志记录器的组 - 默认为"default"
@@ -459,9 +458,9 @@ gitea doctor recreate-table
- `--color`: 在日志中使用颜色 - `--color`: 在日志中使用颜色
- `--reconnect-on-message`, `-R`: 对于每个消息重新连接主机 - `--reconnect-on-message`, `-R`: 对于每个消息重新连接主机
- `--reconnect`, `-r`: 连接中断时重新连接主机 - `--reconnect`, `-r`: 连接中断时重新连接主机
- `--protocol value`, `-P value`: 设置要使用的协议tcp、unixudp默认为tcp - `--protocol value`, `-P value`: 设置要使用的协议tcp、unixudp默认为 tcp
- `--address value`, `-a value`: 要连接到的主机地址和端口(默认为:7020 - `--address value`, `-a value`: 要连接到的主机地址和端口(默认为:7020
- `smtp`: 添加SMTP日志记录器 - `smtp`: 添加 SMTP 日志记录器
- 选项: - 选项:
- `--group value`, `-g value`: 要添加日志记录器的组 - 默认为"default" - `--group value`, `-g value`: 要添加日志记录器的组 - 默认为"default"
- `--name value`, `-n value`: 新日志记录器的名称 - 默认为模式 - `--name value`, `-n value`: 新日志记录器的名称 - 默认为模式

View File

@@ -5,13 +5,12 @@ sidebar_position: 30
aliases: aliases:
- /zh-cn/config-cheat-sheet - /zh-cn/config-cheat-sheet
--- ---
# 配置说明 # 配置说明
这是针对Gitea配置文件的说明 这是针对 Gitea 配置文件的说明,
你可以了解Gitea的强大配置。 你可以了解 Gitea 的强大配置。
需要说明的是,你的所有改变请修改 `custom/conf/app.ini` 文件而不是源文件。 需要说明的是,你的所有改变请修改 `custom/conf/app.ini` 文件而不是源文件。
如果是从发行版本完成的安装, 如果是从发行版本完成的安装,
@@ -22,14 +21,12 @@ aliases:
包含`#`或者`;`的变量必须使用引号( `` ` `` 或者 `"` )包裹,否则会被解析为注释。 包含`#`或者`;`的变量必须使用引号( `` ` `` 或者 `"` )包裹,否则会被解析为注释。
本文档使用以下约定: 本文档使用以下约定:
* `[section].FOO_BAR` 或 `[section]FOO_BAR`: 一个位于 INI 文件 `[section]` 段中的配置项。 - `[section].FOO_BAR` 或 `[section]FOO_BAR`: 一个位于 INI 文件 `[section]` 段中的配置项。
* `FooBar`: 这是一个 Gitea 内部变量,不是一个配置项,仅用于描述相关逻辑。 - `FooBar`: 这是一个 Gitea 内部变量,不是一个配置项,仅用于描述相关逻辑。
* `$FOO_BAR`: 这是一个环境变量Gitea 可能会使用它的值,但是它不能直接用于配置文件中。 - `$FOO_BAR`: 这是一个环境变量Gitea 可能会使用它的值,但是它不能直接用于配置文件中。
* `{FOO_BAR}/something` 或 `{FooBar}/something`: 这个值会默认使用配置项 `FOO_BAR` 或者内部变量 `FooBar`。 - `{FOO_BAR}/something` 或 `{FooBar}/something`: 这个值会默认使用配置项 `FOO_BAR` 或者内部变量 `FooBar`。
**注意:** 修改完配置文件后,需要重启 Gitea 服务才能生效。 **注意:** 修改完配置文件后,需要重启 Gitea 服务才能生效。
@@ -43,16 +40,16 @@ aliases:
这些值取决于环境,但构成了许多值的基础。当运行 `gitea help`或启动时,它们将 这些值取决于环境,但构成了许多值的基础。当运行 `gitea help`或启动时,它们将
作为默认配置的一部分进行报告。它们在那里发出的顺序略有不同,但我们将按照设置的顺序在这里列出。 作为默认配置的一部分进行报告。它们在那里发出的顺序略有不同,但我们将按照设置的顺序在这里列出。
- _`AppPath`_: Gitea二进制可执行文件的绝对路径 - _`AppPath`_: Gitea 二进制可执行文件的绝对路径
- _`AppWorkPath`_: Gitea可执行文件的工作目录。 该配置可以通过以下几种方式设置,优先级依次递减: - _`AppWorkPath`_: Gitea 可执行文件的工作目录。 该配置可以通过以下几种方式设置,优先级依次递减:
- `app.ini`中的`WORK_PATH`配置项 - `app.ini`中的`WORK_PATH`配置项
- 启动Gitea时的`--work-path`命令行参数 - 启动 Gitea 时的`--work-path`命令行参数
- `$GITEA_WORK_DIR`环境变量 - `$GITEA_WORK_DIR`环境变量
- 在编译时设置的内置值(参见从源代码编译) - 在编译时设置的内置值(参见从源代码编译)
- 默认为 _`AppPath`_ 的目录 - 默认为 _`AppPath`_ 的目录
- 如果上述任何路径为相对路径,将自动解析为相对于 _`AppPath`_ 目录的绝对路径 - 如果上述任何路径为相对路径,将自动解析为相对于 _`AppPath`_ 目录的绝对路径
- _`CustomPath`_: 这是用于自定义模板和其他选项的基础目录。 - _`CustomPath`_: 这是用于自定义模板和其他选项的基础目录。
它是通过使用以下层次结构中的第一个设置的内容来确定的: 它是通过使用以下层次结构中的第一个设置的内容来确定的:
- 通过传递给二进制文件的`--custom-path`标志 - 通过传递给二进制文件的`--custom-path`标志
- 环境变量 `$GITEA_CUSTOM` - 环境变量 `$GITEA_CUSTOM`
- 在构建时设置的内置值(参见从源代码构建) - 在构建时设置的内置值(参见从源代码构建)
@@ -63,27 +60,27 @@ aliases:
- 这是指向`app.ini`文件的路径。 - 这是指向`app.ini`文件的路径。
- 在构建时设置的内置值(参见从源代码构建) - 在构建时设置的内置值(参见从源代码构建)
- 否则,默认为 _`CustomPath`_`/conf/app.ini` - 否则,默认为 _`CustomPath`_`/conf/app.ini`
- 如果上述任何路径是相对路径,则会相对于_`CustomPath`_目录进行处理。 - 如果上述任何路径是相对路径,则会相对于*`CustomPath`*目录进行处理。
此外,还有_`StaticRootPath`_,可以在构建时设置为内置值,否则将默认为 _`AppWorkPath`_。 此外,还有*`StaticRootPath`*,可以在构建时设置为内置值,否则将默认为 _`AppWorkPath`_。
## Overall (`DEFAULT`) ## Overall (`DEFAULT`)
- `APP_NAME`: **Gitea: Git with a cup of tea** 应用名称,在网页的标题中显示。 - `APP_NAME`: **Gitea: Git with a cup of tea** 应用名称,在网页的标题中显示。
- `RUN_USER`: **_current OS username_/`$USER`/`$USERNAME` e.g. git**: 运行Gitea的用户 - `RUN_USER`: **_current OS username_/`$USER`/`$USERNAME` e.g. git**: 运行 Gitea 的用户,
应当是一个专用的系统账户(非用户使用,推荐创建一个专用的`git`用户). 如果在你自己的个人电脑使用改成你自己的用户名。 应当是一个专用的系统账户(非用户使用,推荐创建一个专用的`git`用户). 如果在你自己的个人电脑使用改成你自己的用户名。
该配置如果设置不正确Gitea可能崩溃。 该配置如果设置不正确Gitea 可能崩溃。
- `RUN_MODE`: **prod**: 应用的运行模式,对运行性能和问题排除有影响: `dev` 或者 `prod`,默认为 `prod`。 `dev`模式有助于开发和问题排查, 除设置为`dev` 外,均被视为 `prod`. - `RUN_MODE`: **prod**: 应用的运行模式,对运行性能和问题排除有影响: `dev` 或者 `prod`,默认为 `prod`。 `dev`模式有助于开发和问题排查, 除设置为`dev` 外,均被视为 `prod`.
- `WORK_PATH`: **_the-work-path_**: 工作目录, 前文有提及. - `WORK_PATH`: **_the-work-path_**: 工作目录, 前文有提及.
## 仓库 (`repository`) ## 仓库 (`repository`)
- `ROOT`: **`{APP_DATA_PATH}/gitea-repositories`**: 存放git工程的根目录建议填绝对路径。 - `ROOT`: **`{APP_DATA_PATH}/gitea-repositories`**: 存放 git 工程的根目录,建议填绝对路径。
相对路径将被解析为**`{AppWorkPath}/{ROOT}`**. 相对路径将被解析为**`{AppWorkPath}/{ROOT}`**.
- `SCRIPT_TYPE`: **bash**: 服务器支持的Shell类型通常是`bash` - `SCRIPT_TYPE`: **bash**: 服务器支持的 Shell 类型,通常是`bash`
但有些服务器也有可能是`sh`。 但有些服务器也有可能是`sh`。
- `DETECTED_CHARSETS_ORDER`: **UTF-8, UTF-16BE, UTF-16LE, UTF-32BE, UTF-32LE, ISO-8859, windows-1252, ISO-8859, windows-1250, ISO-8859, ISO-8859, ISO-8859, windows-1253, ISO-8859, windows-1255, ISO-8859, windows-1251, windows-1256, KOI8-R, ISO-8859, windows-1254, Shift_JIS, GB18030, EUC-JP, EUC-KR, Big5, ISO-2022, ISO-2022, ISO-2022, IBM424_rtl, IBM424_ltr, IBM420_rtl, IBM420_ltr**: 检测到的字符集的决定性顺序 - 如果检测到的字符集具有相等的置信度则优先选择列表中较早出现的字符集而不是较晚出现的字符集。添加“defaults”将会将未命名的字符集放置在该点。 - `DETECTED_CHARSETS_ORDER`: **UTF-8, UTF-16BE, UTF-16LE, UTF-32BE, UTF-32LE, ISO-8859, windows-1252, ISO-8859, windows-1250, ISO-8859, ISO-8859, ISO-8859, windows-1253, ISO-8859, windows-1255, ISO-8859, windows-1251, windows-1256, KOI8-R, ISO-8859, windows-1254, Shift_JIS, GB18030, EUC-JP, EUC-KR, Big5, ISO-2022, ISO-2022, ISO-2022, IBM424_rtl, IBM424_ltr, IBM420_rtl, IBM420_ltr**: 检测到的字符集的决定性顺序 - 如果检测到的字符集具有相等的置信度则优先选择列表中较早出现的字符集而不是较晚出现的字符集。添加“defaults”将会将未命名的字符集放置在该点。
- `ANSI_CHARSET`: **_empty_**: 默认的ANSI字符集用于覆盖非UTF-8字符集。 - `ANSI_CHARSET`: **_empty_**: 默认的 ANSI 字符集,用于覆盖非 UTF-8 字符集。
- `FORCE_PRIVATE`: **false**: 强制使每个新仓库变为私有。 - `FORCE_PRIVATE`: **false**: 强制使每个新仓库变为私有。
- `DEFAULT_PRIVATE`: **last**: 创建新仓库时默认为私有:`last`, `private`, `public`。 - `DEFAULT_PRIVATE`: **last**: 创建新仓库时默认为私有:`last`, `private`, `public`。
- `DEFAULT_PUSH_CREATE_PRIVATE`: **true**: 使用推送创建新仓库时默认为私有。 - `DEFAULT_PUSH_CREATE_PRIVATE`: **true**: 使用推送创建新仓库时默认为私有。
@@ -91,20 +88,20 @@ aliases:
`-1` 代表无限制. `-1` 代表无限制.
- `PREFERRED_LICENSES`: **Apache License 2.0,MIT License**: 要放置在列表顶部的指定许可证。 - `PREFERRED_LICENSES`: **Apache License 2.0,MIT License**: 要放置在列表顶部的指定许可证。
名称必须与 options/license 或 custom/options/license 中的文件名匹配。 名称必须与 options/license 或 custom/options/license 中的文件名匹配。
- `DISABLE_HTTP_GIT`: **false**: 禁用HTTP协议与仓库进行 - `DISABLE_HTTP_GIT`: **false**: 禁用 HTTP 协议与仓库进行
交互的能力。 交互的能力。
- `USE_COMPAT_SSH_URI`: **false**: 当使用默认的SSH端口时强制使用ssh://克隆URL - `USE_COMPAT_SSH_URI`: **false**: 当使用默认的 SSH 端口时,强制使用 ssh://克隆 URL
而不是scp-style uri。 而不是 scp-style uri。
- `GO_GET_CLONE_URL_PROTOCOL`: **https**: 用于 "go get" 请求的值返回仓库的URL作为httpsssh - `GO_GET_CLONE_URL_PROTOCOL`: **https**: 用于 "go get" 请求的值,返回仓库的 URL 作为 httpsssh
默认为https。 默认为 https。
- `ACCESS_CONTROL_ALLOW_ORIGIN`: **_empty_**:用于 Access-Control-Allow-Origin 标头的值, - `ACCESS_CONTROL_ALLOW_ORIGIN`: **_empty_**:用于 Access-Control-Allow-Origin 标头的值,
默认不提供。 默认不提供。
警告:如果您不提供正确的值,这可能对您的网站造成危害。 警告:如果您不提供正确的值,这可能对您的网站造成危害。
- `DEFAULT_CLOSE_ISSUES_VIA_COMMITS_IN_ANY_BRANCH`: **false**: 如果非默认分支上的提交将问题标记为已关闭,则关闭该问题。 - `DEFAULT_CLOSE_ISSUES_VIA_COMMITS_IN_ANY_BRANCH`: **false**: 如果非默认分支上的提交将问题标记为已关闭,则关闭该问题。
- `ENABLE_PUSH_CREATE_USER`: **false**: 允许用户将本地存储库推送到Gitea并为用户自动创建它们。 - `ENABLE_PUSH_CREATE_USER`: **false**: 允许用户将本地存储库推送到 Gitea并为用户自动创建它们。
- `ENABLE_PUSH_CREATE_ORG`: **false**: 允许用户将本地存储库推送到Gitea并为组织自动创建它们。 - `ENABLE_PUSH_CREATE_ORG`: **false**: 允许用户将本地存储库推送到 Gitea并为组织自动创建它们。
- `DISABLED_REPO_UNITS`: **_empty_**: 逗号分隔的全局禁用的仓库单元列表。允许的值是:: \[repo.issues, repo.ext_issues, repo.pulls, repo.wiki, repo.ext_wiki, repo.projects, repo.packages, repo.actions\] - `DISABLED_REPO_UNITS`: **_empty_**: 逗号分隔的全局禁用的仓库单元列表。允许的值是:: \[repo.issues, repo.ext_issues, repo.pulls, repo.wiki, repo.ext_wiki, repo.projects, repo.packages, repo.actions\]
- `DEFAULT_REPO_UNITS`: **repo.code,repo.releases,repo.issues,repo.pulls,repo.wiki,repo.projects,repo.packages,repo.actions**: 逗号分隔的默认新仓库单元列表。允许的值是:: \[repo.code, repo.releases, repo.issues, repo.pulls, repo.wiki, repo.projects, repo.packages, repo.actions\]. 注意目前无法停用代码和发布。如果您指定了默认的仓库单元您仍应将它们列出以保持未来的兼容性。外部wiki和问题跟踪器不能默认启用因为它需要额外的设置。禁用的仓库单元将不会添加到新的仓库中无论它是否在默认列表中。 - `DEFAULT_REPO_UNITS`: **repo.code,repo.releases,repo.issues,repo.pulls,repo.wiki,repo.projects,repo.packages,repo.actions**: 逗号分隔的默认新仓库单元列表。允许的值是:: \[repo.code, repo.releases, repo.issues, repo.pulls, repo.wiki, repo.projects, repo.packages, repo.actions\]. 注意:目前无法停用代码和发布。如果您指定了默认的仓库单元,您仍应将它们列出以保持未来的兼容性。外部 wiki 和问题跟踪器不能默认启用,因为它需要额外的设置。禁用的仓库单元将不会添加到新的仓库中,无论它是否在默认列表中。
- `DEFAULT_FORK_REPO_UNITS`: **repo.code,repo.pulls**: 逗号分隔的默认分叉仓库单元列表。允许的值和规则与`DEFAULT_REPO_UNITS`相同。 - `DEFAULT_FORK_REPO_UNITS`: **repo.code,repo.pulls**: 逗号分隔的默认分叉仓库单元列表。允许的值和规则与`DEFAULT_REPO_UNITS`相同。
- `DEFAULT_MIRROR_REPO_UNITS`: **repo.code,repo.releases,repo.issues,repo.wiki,repo.projects,repo.packages**: 逗号分隔的默认镜像仓库单元列表。允许的值和规则与`DEFAULT_REPO_UNITS`相同。 - `DEFAULT_MIRROR_REPO_UNITS`: **repo.code,repo.releases,repo.issues,repo.wiki,repo.projects,repo.packages**: 逗号分隔的默认镜像仓库单元列表。允许的值和规则与`DEFAULT_REPO_UNITS`相同。
- `DEFAULT_TEMPLATE_REPO_UNITS`: **repo.code,repo.releases,repo.issues,repo.pulls,repo.wiki,repo.projects,repo.packages**: 逗号分隔的默认模板仓库单元列表。允许的值和规则与`DEFAULT_REPO_UNITS`相同。 - `DEFAULT_TEMPLATE_REPO_UNITS`: **repo.code,repo.releases,repo.issues,repo.pulls,repo.wiki,repo.projects,repo.packages**: 逗号分隔的默认模板仓库单元列表。允许的值和规则与`DEFAULT_REPO_UNITS`相同。
@@ -120,15 +117,15 @@ aliases:
### 仓库 - 编辑器 (`repository.editor`) ### 仓库 - 编辑器 (`repository.editor`)
- `LINE_WRAP_EXTENSIONS`: **.txt,.md,.markdown,.mdown,.mkd,.livemd,**: 在 Monaco 编辑器中应该换行的文件扩展名列表。用逗号分隔扩展名。要对没有扩展名的文件进行换行,只需放置一个逗号。 - `LINE_WRAP_EXTENSIONS`: **.txt,.md,.markdown,.mdown,.mkd,.livemd,**: 在 Monaco 编辑器中应该换行的文件扩展名列表。用逗号分隔扩展名。要对没有扩展名的文件进行换行,只需放置一个逗号。
- `PREVIEWABLE_FILE_MODES`: **markdown**: 具有预览API的有效文件模式例如 `api/v1/markdown`。用逗号分隔各个值。如果文件扩展名不匹配,编辑模式下的预览选项卡将不会显示。 - `PREVIEWABLE_FILE_MODES`: **markdown**: 具有预览 API 的有效文件模式,例如 `api/v1/markdown`。用逗号分隔各个值。如果文件扩展名不匹配,编辑模式下的预览选项卡将不会显示。
### 仓库 - 合并请求 (`repository.pull-request`) ### 仓库 - 合并请求 (`repository.pull-request`)
- `WORK_IN_PROGRESS_PREFIXES`: **WIP:,\[WIP\]**: 在拉取请求标题中用于标记工作正在进行中的前缀列表。 - `WORK_IN_PROGRESS_PREFIXES`: **WIP:,\[WIP\]**: 在拉取请求标题中用于标记工作正在进行中的前缀列表。
这些前缀在不区分大小写的情况下进行匹配。 这些前缀在不区分大小写的情况下进行匹配。
- `CLOSE_KEYWORDS`: **close**, **closes**, **closed**, **fix**, **fixes**, **fixed**, **resolve**, **resolves**, **resolved**: 在拉取请求评论中用于自动关闭相关问题的关键词列表。 - `CLOSE_KEYWORDS`: **close**, **closes**, **closed**, **fix**, **fixes**, **fixed**, **resolve**, **resolves**, **resolved**: 在拉取请求评论中用于自动关闭相关问题的关键词列表。
- `REOPEN_KEYWORDS`: **reopen**, **reopens**, **reopened**: 在拉取请求评论中用于自动重新打开相关问题的 - `REOPEN_KEYWORDS`: **reopen**, **reopens**, **reopened**: 在拉取请求评论中用于自动重新打开相关问题的
关键词列表。 关键词列表。
- `DEFAULT_MERGE_STYLE`: **merge**: 设置创建仓库的默认合并方式,可选: `merge`, `rebase`, `rebase-merge`, `squash`, `fast-forward-only` - `DEFAULT_MERGE_STYLE`: **merge**: 设置创建仓库的默认合并方式,可选: `merge`, `rebase`, `rebase-merge`, `squash`, `fast-forward-only`
- `DEFAULT_MERGE_MESSAGE_COMMITS_LIMIT`: **50**: 在默认合并消息中,对于`squash`提交,最多包括此数量的提交。设置为 -1 以包括所有提交。 - `DEFAULT_MERGE_MESSAGE_COMMITS_LIMIT`: **50**: 在默认合并消息中,对于`squash`提交,最多包括此数量的提交。设置为 -1 以包括所有提交。
- `DEFAULT_MERGE_MESSAGE_SIZE`: **5120**: 在默认的合并消息中,对于`squash`提交,限制提交消息的大小。设置为 `-1`以取消限制。仅在`POPULATE_SQUASH_COMMENT_WITH_COMMIT_MESSAGES`为`true`时使用。 - `DEFAULT_MERGE_MESSAGE_SIZE`: **5120**: 在默认的合并消息中,对于`squash`提交,限制提交消息的大小。设置为 `-1`以取消限制。仅在`POPULATE_SQUASH_COMMENT_WITH_COMMIT_MESSAGES`为`true`时使用。
@@ -137,18 +134,18 @@ aliases:
- `DEFAULT_MERGE_MESSAGE_OFFICIAL_APPROVERS_ONLY`: **true**: 在默认合并消息中,仅包括官方允许审查的审批者。 - `DEFAULT_MERGE_MESSAGE_OFFICIAL_APPROVERS_ONLY`: **true**: 在默认合并消息中,仅包括官方允许审查的审批者。
- `POPULATE_SQUASH_COMMENT_WITH_COMMIT_MESSAGES`: **false**: 在默认的 squash 合并消息中,包括构成拉取请求的所有提交的提交消息。 - `POPULATE_SQUASH_COMMENT_WITH_COMMIT_MESSAGES`: **false**: 在默认的 squash 合并消息中,包括构成拉取请求的所有提交的提交消息。
- `ADD_CO_COMMITTER_TRAILERS`: **true**: 如果提交者与作者不匹配,在合并提交消息中添加`co-authored-by`和`co-committed-by`标记。 - `ADD_CO_COMMITTER_TRAILERS`: **true**: 如果提交者与作者不匹配,在合并提交消息中添加`co-authored-by`和`co-committed-by`标记。
- `TEST_CONFLICTING_PATCHES_WITH_GIT_APPLY`:使用三方合并方法测试`PR Patch`以发现是否存在冲突。如果此设置`true`,将使用`git apply`重新测试冲突的`PR Pathch` - 这是1.18(和之前版本)中的先前行为,但效率相对较低。如果发现需要此设置,请报告。 - `TEST_CONFLICTING_PATCHES_WITH_GIT_APPLY`:使用三方合并方法测试`PR Patch`以发现是否存在冲突。如果此设置`true`,将使用`git apply`重新测试冲突的`PR Pathch` - 这是 1.18(和之前版本)中的先前行为,但效率相对较低。如果发现需要此设置,请报告。
### 仓库 - 工单 (`repository.issue`) ### 仓库 - 工单 (`repository.issue`)
- `LOCK_REASONS`: **Too heated,Off-topic,Resolved,Spam**: 合并请求或工单被锁定的原因列表。 - `LOCK_REASONS`: **Too heated,Off-topic,Resolved,Spam**: 合并请求或工单被锁定的原因列表。
- `MAX_PINNED`: **3**: 每个仓库的最大可固定工单数量。设置为0禁用固定工单。 - `MAX_PINNED`: **3**: 每个仓库的最大可固定工单数量。设置为 0 禁用固定工单。
### 仓库 - 文件上传 (`repository.upload`) ### 仓库 - 文件上传 (`repository.upload`)
- `ENABLED`: **true**: 是否启用仓库文件上传。 - `ENABLED`: **true**: 是否启用仓库文件上传。
- `TEMP_PATH`: **data/tmp/uploads**: 文件上传的临时保存路径(在Gitea重启的时候该目录会被清空)。 - `TEMP_PATH`: **data/tmp/uploads**: 文件上传的临时保存路径(在 Gitea 重启的时候该目录会被清空)。
- `ALLOWED_TYPES`: **_empty_**: 以逗号分割的列表,代表支持上传的文件类型。(`.zip`), mime类型 (`text/plain`) or 通配符类型 (`image/*`, `audio/*`, `video/*`). 为空或者 `*/*`代表允许所有类型文件。 - `ALLOWED_TYPES`: **_empty_**: 以逗号分割的列表,代表支持上传的文件类型。(`.zip`), mime 类型 (`text/plain`) or 通配符类型 (`image/*`, `audio/*`, `video/*`). 为空或者 `*/*`代表允许所有类型文件。
- `FILE_MAX_SIZE`: **50**: 每个文件的最大大小(MB)。 - `FILE_MAX_SIZE`: **50**: 每个文件的最大大小(MB)。
- `MAX_FILES`: **5**: 每次上传的最大文件数。 - `MAX_FILES`: **5**: 每次上传的最大文件数。
@@ -170,10 +167,10 @@ aliases:
- 除了 never 和 always 之外的选项可以组合为逗号分隔的列表。 - 除了 never 和 always 之外的选项可以组合为逗号分隔的列表。
- `DEFAULT_TRUST_MODEL`: **collaborator**: \[collaborator, committer, collaboratorcommitter\]: 用于验证提交的默认信任模型。 - `DEFAULT_TRUST_MODEL`: **collaborator**: \[collaborator, committer, collaboratorcommitter\]: 用于验证提交的默认信任模型。
- `collaborator`: 信任协作者密钥签名的签名。 - `collaborator`: 信任协作者密钥签名的签名。
- `committer`: 信任与提交者匹配的签名这与GitHub匹配并会强制Gitea签名的提交具有Gitea作为提交者 - `committer`: 信任与提交者匹配的签名(这与 GitHub 匹配,并会强制 Gitea 签名的提交具有 Gitea 作为提交者)。
- `collaboratorcommitter`: 信任与提交者匹配的协作者密钥签名的签名。 - `collaboratorcommitter`: 信任与提交者匹配的协作者密钥签名的签名。
- `WIKI`: **never**: \[never, pubkey, twofa, always, parentsigned\]: 对wiki提交进行签名。 - `WIKI`: **never**: \[never, pubkey, twofa, always, parentsigned\]: 对 wiki 提交进行签名。
- `CRUD_ACTIONS`: **pubkey, twofa, parentsigned**: \[never, pubkey, twofa, parentsigned, always\]: 对CRUD操作进行签名。 - `CRUD_ACTIONS`: **pubkey, twofa, parentsigned**: \[never, pubkey, twofa, parentsigned, always\]: 对 CRUD 操作进行签名。
- 与上面相同的选项,增加了: - 与上面相同的选项,增加了:
- `parentsigned`: 仅在父提交进行了签名时才进行签名。 - `parentsigned`: 仅在父提交进行了签名时才进行签名。
- `MERGES`: **pubkey, twofa, basesigned, commitssigned**: \[never, pubkey, twofa, approved, basesigned, commitssigned, always\]: 对合并操作进行签名。 - `MERGES`: **pubkey, twofa, basesigned, commitssigned**: \[never, pubkey, twofa, approved, basesigned, commitssigned, always\]: 对合并操作进行签名。
@@ -204,7 +201,7 @@ aliases:
- `MAX_AGE`: **10m**: 缓存响应的最大时间 - `MAX_AGE`: **10m**: 缓存响应的最大时间
- `ALLOW_CREDENTIALS`: **false**: 允许带有凭据的请求 - `ALLOW_CREDENTIALS`: **false**: 允许带有凭据的请求
- `HEADERS`: **Content-Type,User-Agent**: 允许请求携带的头部 - `HEADERS`: **Content-Type,User-Agent**: 允许请求携带的头部
- `X_FRAME_OPTIONS`: **SAMEORIGIN**: 详见 `X-Frame-Options`HTTP头部. - `X_FRAME_OPTIONS`: **SAMEORIGIN**: 详见 `X-Frame-Options`HTTP 头部.
## 界面 (`ui`) ## 界面 (`ui`)
@@ -213,17 +210,17 @@ aliases:
- `MEMBERS_PAGING_NUM`: **20**: 组织成员页面每页显示的成员数量。 - `MEMBERS_PAGING_NUM`: **20**: 组织成员页面每页显示的成员数量。
- `FEED_MAX_COMMIT_NUM`: **5**: 活动流页面显示的最大提交数量。 - `FEED_MAX_COMMIT_NUM`: **5**: 活动流页面显示的最大提交数量。
- `FEED_PAGING_NUM`: **20**: 活动流页面显示的最大活动数量。 - `FEED_PAGING_NUM`: **20**: 活动流页面显示的最大活动数量。
- `SITEMAP_PAGING_NUM`: **20**: 在单个子SiteMap中显示的项数。 - `SITEMAP_PAGING_NUM`: **20**: 在单个子 SiteMap 中显示的项数。
- `GRAPH_MAX_COMMIT_NUM`: **100**: 提交图中显示的最大commit数量。 - `GRAPH_MAX_COMMIT_NUM`: **100**: 提交图中显示的最大 commit 数量。
- `CODE_COMMENT_LINES`: **4**: 在代码评论中能够显示的最大代码行数。 - `CODE_COMMENT_LINES`: **4**: 在代码评论中能够显示的最大代码行数。
- `DEFAULT_THEME`: **gitea-auto**: 在Gitea安装时候设置的默认主题自定义的主题可以通过 `{CustomPath}/public/assets/css/theme-*.css` 提供。 - `DEFAULT_THEME`: **gitea-auto**: 在 Gitea 安装时候设置的默认主题,自定义的主题可以通过 `{CustomPath}/public/assets/css/theme-*.css` 提供。
- `SHOW_USER_EMAIL`: **true**: 用户的电子邮件是否应该显示在`Explore Users`页面中。 - `SHOW_USER_EMAIL`: **true**: 用户的电子邮件是否应该显示在`Explore Users`页面中。
- `THEMES`: **_empty_**: 所有可用的主题(由 `{CustomPath}/public/assets/css/theme-*.css` 提供)。允许用户选择个性化的主题, - `THEMES`: **_empty_**: 所有可用的主题(由 `{CustomPath}/public/assets/css/theme-*.css` 提供)。允许用户选择个性化的主题,
- `MAX_DISPLAY_FILE_SIZE`: **8388608**: 能够显示文件的最大大小默认为8MiB - `MAX_DISPLAY_FILE_SIZE`: **8388608**: 能够显示文件的最大大小(默认为 8MiB
- `REACTIONS`: 用户可以在问题Issue、Pull RequestPR以及评论中选择的所有可选的反应。 - `REACTIONS`: 用户可以在问题Issue、Pull RequestPR以及评论中选择的所有可选的反应。
这些值可以是表情符号别名(例如::smile:或Unicode表情符号。 这些值可以是表情符号别名(例如::smile:)或 Unicode 表情符号。
对于自定义的反应,在 public/assets/img/emoji/ 目录下添加一个紧密裁剪的正方形图像,文件名为 reaction_name.png。 对于自定义的反应,在 public/assets/img/emoji/ 目录下添加一个紧密裁剪的正方形图像,文件名为 reaction_name.png。
- `CUSTOM_EMOJIS`: **gitea, codeberg, gitlab, git, github, gogs**: 不在utf8标准中定义的额外表情符号。 - `CUSTOM_EMOJIS`: **gitea, codeberg, gitlab, git, github, gogs**: 不在 utf8 标准中定义的额外表情符号。
默认情况下,我们支持 Gitea 表情符号(:gitea:)。要添加更多表情符号,请将它们复制到 public/assets/img/emoji/ 目录下, 默认情况下,我们支持 Gitea 表情符号(:gitea:)。要添加更多表情符号,请将它们复制到 public/assets/img/emoji/ 目录下,
并将其添加到此配置中。 并将其添加到此配置中。
- `DEFAULT_SHOW_FULL_NAME`: **false**: 是否在可能的情况下显示用户的全名。如果没有设置全名,则将使用用户名。 - `DEFAULT_SHOW_FULL_NAME`: **false**: 是否在可能的情况下显示用户的全名。如果没有设置全名,则将使用用户名。
@@ -258,11 +255,11 @@ aliases:
### 界面 - SVG Images (`ui.svg`) ### 界面 - SVG Images (`ui.svg`)
- `ENABLE_RENDER`: **true**: 是否将SVG文件呈现为图像。如果禁用了SVG渲染SVG文件将显示为文本无法作为图像嵌入到Markdown文件中。 - `ENABLE_RENDER`: **true**: 是否将 SVG 文件呈现为图像。如果禁用了 SVG 渲染SVG 文件将显示为文本,无法作为图像嵌入到 Markdown 文件中。
### 界面 - CSV Files (`ui.csv`) ### 界面 - CSV Files (`ui.csv`)
- `MAX_FILE_SIZE`: **524288** (512kb): 以字节为单位允许将CSV文件呈现为表格的最大文件大小将其设置为0表示没有限制)。 - `MAX_FILE_SIZE`: **524288** (512kb): 以字节为单位允许将 CSV 文件呈现为表格的最大文件大小(将其设置为 0 表示没有限制)。
- `MAX_ROWS`: **2500** : 最大允许的 CSV 文件行数。 (设置为 0 不限制) - `MAX_ROWS`: **2500** : 最大允许的 CSV 文件行数。 (设置为 0 不限制)
## Markdown (`markdown`) ## Markdown (`markdown`)
@@ -273,10 +270,10 @@ aliases:
- `ENABLE_HARD_LINE_BREAK_IN_DOCUMENTS`: **false**: 在文档中将软换行符呈现为硬换行符, - `ENABLE_HARD_LINE_BREAK_IN_DOCUMENTS`: **false**: 在文档中将软换行符呈现为硬换行符,
这意味着段落之间的单个换行符将导致换行, 这意味着段落之间的单个换行符将导致换行,
并且不需要在段落后添加尾随空格来强制换行。 并且不需要在段落后添加尾随空格来强制换行。
- `CUSTOM_URL_SCHEMES`: 使用逗号分隔的列表ftp、git、svn来指示要在Markdown中呈现的附加URL超链接。 - `CUSTOM_URL_SCHEMES`: 使用逗号分隔的列表ftp、git、svn来指示要在 Markdown 中呈现的附加 URL 超链接。
以httphttps开头的URL始终显示。 httphttps 开头的 URL 始终显示。
如果此条目为空则允许所有URL方案。 如果此条目为空,则允许所有 URL 方案。
- `FILE_EXTENSIONS`: **.md,.markdown,.mdown,.mkd,.livemd**: 应呈现/编辑为Markdown的文件扩展名列表。使用逗号分隔扩展名。要将没有任何扩展名的文件呈现为Markdown请只需放置一个逗号。 - `FILE_EXTENSIONS`: **.md,.markdown,.mdown,.mkd,.livemd**: 应呈现/编辑为 Markdown 的文件扩展名列表。使用逗号分隔扩展名。要将没有任何扩展名的文件呈现为 Markdown请只需放置一个逗号。
- `ENABLE_MATH`: **true**: 启用对`\(...\)`, `\[...\]`, `$...$`和`$$...$$` 作为数学块的检测。 - `ENABLE_MATH`: **true**: 启用对`\(...\)`, `\[...\]`, `$...$`和`$$...$$` 作为数学块的检测。
## 服务器 (`server`) ## 服务器 (`server`)
@@ -289,15 +286,15 @@ aliases:
- `PROXY_PROTOCOL_ACCEPT_UNKNOWN`: **false**:接受带有未知类型的`PROXY`协议头。 - `PROXY_PROTOCOL_ACCEPT_UNKNOWN`: **false**:接受带有未知类型的`PROXY`协议头。
- `DOMAIN`: **localhost**: 此服务器的域名。 - `DOMAIN`: **localhost**: 此服务器的域名。
- `ROOT_URL`: **`{PROTOCOL}://{DOMAIN}:{HTTP_PORT}/`**: - `ROOT_URL`: **`{PROTOCOL}://{DOMAIN}:{HTTP_PORT}/`**:
覆盖自动生成的公共URL。 覆盖自动生成的公共 URL。
如果内部URL和外部URL不匹配例如在Docker中这很有用。 如果内部 URL 和外部 URL 不匹配(例如在 Docker 中),这很有用。
- `STATIC_URL_PREFIX`: **_empty_**: - `STATIC_URL_PREFIX`: **_empty_**:
覆盖此选项以从不同的URL请求静态资源。 覆盖此选项以从不同的 URL 请求静态资源。
这包括CSS文件、图片、JS文件和Web字体。 这包括 CSS 文件、图片、JS 文件和 Web 字体。
头像图片是动态资源仍由Gitea提供。 头像图片是动态资源,仍由 Gitea 提供。
选项可以是不同的路径,例如`/static`, 也可以是另一个域,例如`https://cdn.example.com`. 选项可以是不同的路径,例如`/static`, 也可以是另一个域,例如`https://cdn.example.com`.
请求会变成 `{ROOT_URL}/static/assets/css/index.css` 或 `https://cdn.example.com/assets/css/index.css` 请求会变成 `{ROOT_URL}/static/assets/css/index.css` 或 `https://cdn.example.com/assets/css/index.css`
静态文件位于Gitea源代码仓库的`public/`目录中。 静态文件位于 Gitea 源代码仓库的`public/`目录中。
您可以将`STATIC_URL_PREFIX`请求代理到 Gitea 服务器以提供静态资源,或者将手动构建的 Gitea 资源从 `$GITEA_BUILD/public`复制到静态位置,例如`/var/www/assets`。确保`$STATIC_URL_PREFIX/assets/css/index.css`指向`/var/www/assets/css/index.css`。 您可以将`STATIC_URL_PREFIX`请求代理到 Gitea 服务器以提供静态资源,或者将手动构建的 Gitea 资源从 `$GITEA_BUILD/public`复制到静态位置,例如`/var/www/assets`。确保`$STATIC_URL_PREFIX/assets/css/index.css`指向`/var/www/assets/css/index.css`。
- `HTTP_ADDR`: **0.0.0.0**: HTTP 监听地址。 - `HTTP_ADDR`: **0.0.0.0**: HTTP 监听地址。
@@ -321,11 +318,11 @@ aliases:
- `PER_WRITE_TIMEOUT`: **30s**: 连接的任何写操作的超时时间。(将其设置为 -1 - `PER_WRITE_TIMEOUT`: **30s**: 连接的任何写操作的超时时间。(将其设置为 -1
以禁用所有超时。) 以禁用所有超时。)
- `PER_WRITE_PER_KB_TIMEOUT`: **10s**: 连接每写入 1 KB 的超时时间。 - `PER_WRITE_PER_KB_TIMEOUT`: **10s**: 连接每写入 1 KB 的超时时间。
- `DISABLE_SSH`: **false**: 当SSH不可用时禁用SSH功能。 - `DISABLE_SSH`: **false**: 当 SSH 不可用时禁用 SSH 功能。
- `START_SSH_SERVER`: **false**: 启用时使用内置的SSH服务器。 - `START_SSH_SERVER`: **false**: 启用时,使用内置的 SSH 服务器。
- `SSH_SERVER_USE_PROXY_PROTOCOL`: **false**: 在与内置SSH服务器建立连接时期望PROXY协议头。 - `SSH_SERVER_USE_PROXY_PROTOCOL`: **false**: 在与内置 SSH 服务器建立连接时,期望 PROXY 协议头。
- `BUILTIN_SSH_SERVER_USER`: **`{RUN_USER}`**: 用于内置SSH服务器的用户名。 - `BUILTIN_SSH_SERVER_USER`: **`{RUN_USER}`**: 用于内置 SSH 服务器的用户名。
- `SSH_USER`: **BUILTIN_SSH_SERVER_USER**: 在克隆URL中显示的SSH用户名。 - `SSH_USER`: **BUILTIN_SSH_SERVER_USER**: 在克隆 URL 中显示的 SSH 用户名。
如果设置为 `(DOER_USERNAME)`,将使用当前登录用户名作为克隆用的 SSH 用户名。 如果设置为 `(DOER_USERNAME)`,将使用当前登录用户名作为克隆用的 SSH 用户名。
此配置项仅为自己配置 SSH 反向代理的高级用户准备, 此配置项仅为自己配置 SSH 反向代理的高级用户准备,
大多数用户应当把它留空,或者按需修改 `BUILTIN_SSH_SERVER_USER`。 大多数用户应当把它留空,或者按需修改 `BUILTIN_SSH_SERVER_USER`。
@@ -421,7 +418,7 @@ aliases:
## 数据库 (`database`) ## 数据库 (`database`)
- `DB_TYPE`: **mysql**: 数据库类型 \[mysql, postgres, mssql, sqlite3\]。 - `DB_TYPE`: **mysql**: 数据库类型 \[mysql, postgres, mssql, sqlite3\]。
- `HOST`: **127.0.0.1:3306**: 数据库主机地址和端口或unix套接字的绝对路径 \[mysql, postgres\](例如:/var/run/mysqld/mysqld.sock - `HOST`: **127.0.0.1:3306**: 数据库主机地址和端口或 unix 套接字的绝对路径 \[mysql, postgres\](例如:/var/run/mysqld/mysqld.sock
- `NAME`: **gitea**: 数据库名称。 - `NAME`: **gitea**: 数据库名称。
- `USER`: **root**: 数据库用户名。 - `USER`: **root**: 数据库用户名。
- `PASSWD`: **_empty_**: 数据库密码。如果密码包含特殊字符,请使用 \`your password\` 或 """your password"""。 - `PASSWD`: **_empty_**: 数据库密码。如果密码包含特殊字符,请使用 \`your password\` 或 """your password"""。
@@ -455,15 +452,15 @@ aliases:
## 索引 (`indexer`) ## 索引 (`indexer`)
- `ISSUE_INDEXER_TYPE`: **bleve**: 工单索引类型,当前支持:`bleve``db``elasticsearch``meilisearch` - `ISSUE_INDEXER_TYPE`: **bleve**: 工单索引类型,当前支持:`bleve``db``elasticsearch``meilisearch`
- `ISSUE_INDEXER_CONN_STR`**** : 工单索引连接字符串,仅适用于 elasticsearch 和 meilisearch例如`http://elastic:password@localhost:9200`)或者(例如:`http://:apikey@localhost:7700`)。 - `ISSUE_INDEXER_CONN_STR`\*\*\*\* : 工单索引连接字符串,仅适用于 elasticsearch 和 meilisearch例如`http://elastic:password@localhost:9200`)或者(例如:`http://:apikey@localhost:7700`)。
- `ISSUE_INDEXER_NAME`**gitea_issues**: 工单索引器名称,在 ISSUE_INDEXER_TYPE 为 elasticsearch 或 meilisearch 时可用。 - `ISSUE_INDEXER_NAME`**gitea_issues**: 工单索引器名称,在 ISSUE_INDEXER_TYPE 为 elasticsearch 或 meilisearch 时可用。
- `ISSUE_INDEXER_PATH`**indexers/issues.bleve**: 用于工单搜索的索引文件;在 ISSUE_INDEXER_TYPE 为 bleve 和 elasticsearch 时可用。相对路径将相对于 _`AppWorkPath`_ 进行绝对路径化。 - `ISSUE_INDEXER_PATH`**indexers/issues.bleve**: 用于工单搜索的索引文件;在 ISSUE*INDEXER_TYPE 为 bleve 和 elasticsearch 时可用。相对路径将相对于 *`AppWorkPath`\_ 进行绝对路径化。
- `REPO_INDEXER_ENABLED`**false**: 启用代码搜索(占用大量磁盘空间,约为存储库大小的 6 倍)。 - `REPO_INDEXER_ENABLED`**false**: 启用代码搜索(占用大量磁盘空间,约为存储库大小的 6 倍)。
- `REPO_INDEXER_REPO_TYPES`**sources,forks,mirrors,templates**: 存储库索引器单元。要索引的项目可以是 `sources``forks``mirrors``templates` 或它们的任何组合,用逗号分隔。如果为空,则默认为仅 `sources`,如果要完全禁用,请参见 `REPO_INDEXER_ENABLED` - `REPO_INDEXER_REPO_TYPES`**sources,forks,mirrors,templates**: 存储库索引器单元。要索引的项目可以是 `sources``forks``mirrors``templates` 或它们的任何组合,用逗号分隔。如果为空,则默认为仅 `sources`,如果要完全禁用,请参见 `REPO_INDEXER_ENABLED`
- `REPO_INDEXER_TYPE`**bleve**: 代码搜索引擎类型,可以为 `bleve` 或者 `elasticsearch` - `REPO_INDEXER_TYPE`**bleve**: 代码搜索引擎类型,可以为 `bleve` 或者 `elasticsearch`
- `REPO_INDEXER_PATH`**indexers/repos.bleve**: 用于代码搜索的索引文件。 - `REPO_INDEXER_PATH`**indexers/repos.bleve**: 用于代码搜索的索引文件。
- `REPO_INDEXER_CONN_STR`****: 代码索引器连接字符串,在 `REPO_INDEXER_TYPE` 为 elasticsearch 时可用。例如:`http://elastic:password@localhost:9200` - `REPO_INDEXER_CONN_STR`\*\*\*\*: 代码索引器连接字符串,在 `REPO_INDEXER_TYPE` 为 elasticsearch 时可用。例如:`http://elastic:password@localhost:9200`
- `REPO_INDEXER_NAME`**gitea_codes**: 代码索引器名称,在 `REPO_INDEXER_TYPE` 为 elasticsearch 时可用。 - `REPO_INDEXER_NAME`**gitea_codes**: 代码索引器名称,在 `REPO_INDEXER_TYPE` 为 elasticsearch 时可用。
- `REPO_INDEXER_INCLUDE`**empty**: 逗号分隔的 glob 模式列表(参见 [https://github.com/gobwas/glob](https://github.com/gobwas/glob))以用于**包括**在索引中。使用 `**.txt` 匹配任何具有 .txt 扩展名的文件。空列表表示包括所有文件。 - `REPO_INDEXER_INCLUDE`**empty**: 逗号分隔的 glob 模式列表(参见 [https://github.com/gobwas/glob](https://github.com/gobwas/glob))以用于**包括**在索引中。使用 `**.txt` 匹配任何具有 .txt 扩展名的文件。空列表表示包括所有文件。
@@ -481,8 +478,8 @@ aliases:
- `LENGTH`**100000**: 通道队列阻塞之前的最大队列大小 - `LENGTH`**100000**: 通道队列阻塞之前的最大队列大小
- `BATCH_LENGTH`**20**: 在传递给处理程序之前批处理数据 - `BATCH_LENGTH`**20**: 在传递给处理程序之前批处理数据
- `CONN_STR`**redis://127.0.0.1:6379/0**: redis 队列类型的连接字符串。对于 `redis-cluster`,使用 `redis+cluster://127.0.0.1:6379/0`。可以使用查询参数来设置选项。类似地LevelDB 选项也可以使用:**leveldb://relative/path?option=value** 或 **leveldb:///absolute/path?option=value** 进行设置,并将覆盖 `DATADIR` - `CONN_STR`**redis://127.0.0.1:6379/0**: redis 队列类型的连接字符串。对于 `redis-cluster`,使用 `redis+cluster://127.0.0.1:6379/0`。可以使用查询参数来设置选项。类似地LevelDB 选项也可以使用:**leveldb://relative/path?option=value** 或 **leveldb:///absolute/path?option=value** 进行设置,并将覆盖 `DATADIR`
- `QUEUE_NAME`**_queue**: 默认的 redis 和磁盘队列名称的后缀。单独的队列将默认为 **`name`**`QUEUE_NAME`,但可以在特定的 `queue.name` 部分中进行覆盖。 - `QUEUE_NAME`**\_queue**: 默认的 redis 和磁盘队列名称的后缀。单独的队列将默认为 **`name`**`QUEUE_NAME`,但可以在特定的 `queue.name` 部分中进行覆盖。
- `SET_NAME`**_unique**: 将添加到默认的 redis 和磁盘队列 `set` 名称中以用于唯一队列的后缀。单独的队列将默认为 **`name`**`QUEUE_NAME`_`SET_NAME`_但可以在特定的 `queue.name` 部分中进行覆盖。 - `SET_NAME`**\_unique**: 将添加到默认的 redis 和磁盘队列 `set` 名称中以用于唯一队列的后缀。单独的队列将默认为 **`name`**`QUEUE_NAME`_`SET_NAME`_但可以在特定的 `queue.name` 部分中进行覆盖。
- `MAX_WORKERS`**(dynamic)**: 队列的最大工作协程数。默认值为 "CpuNum/2",限制在 1 到 10 之间。 - `MAX_WORKERS`**(dynamic)**: 队列的最大工作协程数。默认值为 "CpuNum/2",限制在 1 到 10 之间。
Gitea 创建以下非唯一队列: Gitea 创建以下非唯一队列:
@@ -506,8 +503,8 @@ Gitea 创建以下非唯一队列:
- `DEFAULT_EMAIL_NOTIFICATIONS`: **enabled**: 用户电子邮件通知的默认配置用户可配置。选项enabled、onmention、disabled - `DEFAULT_EMAIL_NOTIFICATIONS`: **enabled**: 用户电子邮件通知的默认配置用户可配置。选项enabled、onmention、disabled
- `DISABLE_REGULAR_ORG_CREATION`: **false**: 禁止普通(非管理员)用户创建组织。 - `DISABLE_REGULAR_ORG_CREATION`: **false**: 禁止普通(非管理员)用户创建组织。
- `USER_DISABLED_FEATURES`:**_empty_** 禁用的用户特性,当前允许为空或者 `deletion``manage_ssh_keys` `manage_gpg_keys` 未来可以增加更多设置。 - `USER_DISABLED_FEATURES`:**_empty_** 禁用的用户特性,当前允许为空或者 `deletion``manage_ssh_keys` `manage_gpg_keys` 未来可以增加更多设置。
- `deletion`: 用户不能通过界面或者API删除他自己。 - `deletion`: 用户不能通过界面或者 API 删除他自己。
- `manage_ssh_keys`: 用户不能通过界面或者API配置SSH Keys。 - `manage_ssh_keys`: 用户不能通过界面或者 API 配置 SSH Keys。
- `manage_gpg_keys`: 用户不能配置 GPG 密钥。 - `manage_gpg_keys`: 用户不能配置 GPG 密钥。
## 安全性 (`security`) ## 安全性 (`security`)
@@ -516,7 +513,7 @@ Gitea 创建以下非唯一队列:
- `SECRET_KEY`: **\<每次安装时随机生成\>**: 全局服务器安全密钥。这个密钥非常重要,如果丢失将无法解密加密的数据(例如 2FA - `SECRET_KEY`: **\<每次安装时随机生成\>**: 全局服务器安全密钥。这个密钥非常重要,如果丢失将无法解密加密的数据(例如 2FA
- `SECRET_KEY_URI`: **_empty_**: 与定义 `SECRET_KEY` 不同,此选项可用于使用存储在文件中的密钥(示例值:`file:/etc/gitea/secret_key`)。它不应该像 `SECRET_KEY` 一样容易丢失。 - `SECRET_KEY_URI`: **_empty_**: 与定义 `SECRET_KEY` 不同,此选项可用于使用存储在文件中的密钥(示例值:`file:/etc/gitea/secret_key`)。它不应该像 `SECRET_KEY` 一样容易丢失。
- `LOGIN_REMEMBER_DAYS`: **31**: 在要求重新登录之前,记住用户的登录状态多长时间(以天为单位)。 - `LOGIN_REMEMBER_DAYS`: **31**: 在要求重新登录之前,记住用户的登录状态多长时间(以天为单位)。
- `COOKIE_REMEMBER_NAME`: **gitea\_incredible**: 保存自动登录信息的 Cookie 名称。 - `COOKIE_REMEMBER_NAME`: **gitea_incredible**: 保存自动登录信息的 Cookie 名称。
- `REVERSE_PROXY_AUTHENTICATION_USER`: **X-WEBAUTH-USER**: 反向代理认证的 HTTP 头部名称,用于提供用户信息。 - `REVERSE_PROXY_AUTHENTICATION_USER`: **X-WEBAUTH-USER**: 反向代理认证的 HTTP 头部名称,用于提供用户信息。
- `REVERSE_PROXY_AUTHENTICATION_EMAIL`: **X-WEBAUTH-EMAIL**: 反向代理认证的 HTTP 头部名称,用于提供邮箱信息。 - `REVERSE_PROXY_AUTHENTICATION_EMAIL`: **X-WEBAUTH-EMAIL**: 反向代理认证的 HTTP 头部名称,用于提供邮箱信息。
- `REVERSE_PROXY_AUTHENTICATION_FULL_NAME`: **X-WEBAUTH-FULLNAME**: 反向代理认证的 HTTP 头部名称,用于提供全名信息。 - `REVERSE_PROXY_AUTHENTICATION_FULL_NAME`: **X-WEBAUTH-FULLNAME**: 反向代理认证的 HTTP 头部名称,用于提供全名信息。
@@ -556,7 +553,7 @@ Gitea 创建以下非唯一队列:
- lower - 使用一个或多个小写拉丁字符 - lower - 使用一个或多个小写拉丁字符
- upper - 使用一个或多个大写拉丁字符 - upper - 使用一个或多个大写拉丁字符
- digit - 使用一个或多个数字 - digit - 使用一个或多个数字
- spec - 使用一个或多个特殊字符,如 ``!"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~`` - spec - 使用一个或多个特殊字符,如 `` !"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ ``
- off - 不检查密码复杂性 - off - 不检查密码复杂性
- `PASSWORD_CHECK_PWN`: **false**: 检查密码是否在 [HaveIBeenPwned](https://haveibeenpwned.com/Passwords) 中曝光。 - `PASSWORD_CHECK_PWN`: **false**: 检查密码是否在 [HaveIBeenPwned](https://haveibeenpwned.com/Passwords) 中曝光。
- `SUCCESSFUL_TOKENS_CACHE_SIZE`: **20**: 缓存成功的令牌哈希。API 令牌在数据库中存储为 pbkdf2 哈希,但这意味着在存在多个 API 操作时可能会有显着的哈希负载。此缓存将在 LRU 缓存中存储成功的哈希令牌,以在性能和安全性之间保持平衡。 - `SUCCESSFUL_TOKENS_CACHE_SIZE`: **20**: 缓存成功的令牌哈希。API 令牌在数据库中存储为 pbkdf2 哈希,但这意味着在存在多个 API 操作时可能会有显着的哈希负载。此缓存将在 LRU 缓存中存储成功的哈希令牌,以在性能和安全性之间保持平衡。
@@ -564,27 +561,27 @@ Gitea 创建以下非唯一队列:
## Camo (`camo`) ## Camo (`camo`)
- `ENABLED`: **false**: 启用媒体代理,目前仅支持图像。 - `ENABLED`: **false**: 启用媒体代理,目前仅支持图像。
- `SERVER_URL`: **_empty_**: Camo服务器的URL如果启用camo则**必填**。 - `SERVER_URL`: **_empty_**: Camo 服务器的 URL如果启用 camo则**必填**。
- `HMAC_KEY`: **_empty_**: 为URL编码提供HMAC密钥如果启用camo则**必填**。 - `HMAC_KEY`: **_empty_**: 为 URL 编码提供 HMAC 密钥,如果启用 camo则**必填**。
- `ALWAYS`: **false**: 设置为true以在HTTPHTTPS内容上使用camo否则仅代理非HTTPS URL。`ALLWAYS` 已经过期,并且会在未来版本中删除。 - `ALWAYS`: **false**: 设置为 true 以在 HTTPHTTPS 内容上使用 camo否则仅代理非 HTTPS URL。`ALLWAYS` 已经过期,并且会在未来版本中删除。
## OpenID (`openid`) ## OpenID (`openid`)
- `ENABLE_OPENID_SIGNIN`: **true**: 允许通过OpenID进行身份验证。 - `ENABLE_OPENID_SIGNIN`: **true**: 允许通过 OpenID 进行身份验证。
- `ENABLE_OPENID_SIGNUP`: **! DISABLE\_REGISTRATION**: 允许通过OpenID进行注册。 - `ENABLE_OPENID_SIGNUP`: **! DISABLE_REGISTRATION**: 允许通过 OpenID 进行注册。
- `WHITELISTED_URIS`: **_empty_**: 如果非空是一组匹配OpenID URIPOSIX正则表达式模式用于允许访问。 - `WHITELISTED_URIS`: **_empty_**: 如果非空,是一组匹配 OpenID URIPOSIX 正则表达式模式,用于允许访问。
- `BLACKLISTED_URIS`: **_empty_**: 如果非空是一组匹配OpenID URIPOSIX正则表达式模式用于阻止访问。 - `BLACKLISTED_URIS`: **_empty_**: 如果非空,是一组匹配 OpenID URIPOSIX 正则表达式模式,用于阻止访问。
## OAuth2 Client (`oauth2_client`) ## OAuth2 Client (`oauth2_client`)
- `REGISTER_EMAIL_CONFIRM`: _[service]_ **REGISTER\_EMAIL\_CONFIRM**: 设置此项以启用或禁用OAuth2自动注册的电子邮件确认。覆盖`[service]`部分的`REGISTER\_EMAIL\_CONFIRM`设置) - `REGISTER_EMAIL_CONFIRM`: _[service]_ **REGISTER_EMAIL_CONFIRM**: 设置此项以启用或禁用 OAuth2 自动注册的电子邮件确认。(覆盖`[service]`部分的`REGISTER\_EMAIL\_CONFIRM`设置)
- `OPENID_CONNECT_SCOPES`: **_empty_**: 附加的OpenID连接范围的列表。`openid`已隐式添加) - `OPENID_CONNECT_SCOPES`: **_empty_**: 附加的 OpenID 连接范围的列表。(`openid`已隐式添加)
- `ENABLE_AUTO_REGISTRATION`: **false**: 为新的OAuth2用户自动创建用户帐户。 - `ENABLE_AUTO_REGISTRATION`: **false**: 为新的 OAuth2 用户自动创建用户帐户。
- `USERNAME`: **nickname**: 新OAuth2帐户的用户名来源 - `USERNAME`: **nickname**: 新 OAuth2 帐户的用户名来源:
- userid - 使用userid / sub属性 - userid - 使用 userid / sub 属性
- nickname - 使用nickname属性 - nickname - 使用 nickname 属性
- email - 使用email属性的用户名部分 - email - 使用 email 属性的用户名部分
- `UPDATE_AVATAR`: **false**: 如果OAuth2提供程序中有可用的头像则进行头像更新。更新将在每次登录时执行。 - `UPDATE_AVATAR`: **false**: 如果 OAuth2 提供程序中有可用的头像,则进行头像更新。更新将在每次登录时执行。
- `ACCOUNT_LINKING`: **login**: 如果帐户/电子邮件已存在,如何处理: - `ACCOUNT_LINKING`: **login**: 如果帐户/电子邮件已存在,如何处理:
- disabled - 显示错误 - disabled - 显示错误
- login - 显示帐户链接登录 - login - 显示帐户链接登录
@@ -597,54 +594,54 @@ Gitea 创建以下非唯一队列:
- `REGISTER_EMAIL_CONFIRM`: **false**: 启用此项以要求通过邮件确认注册。需要启用`Mailer` - `REGISTER_EMAIL_CONFIRM`: **false**: 启用此项以要求通过邮件确认注册。需要启用`Mailer`
- `REGISTER_MANUAL_CONFIRM`: **false**: 启用此项以手动确认新的注册。需要禁用`REGISTER_EMAIL_CONFIRM` - `REGISTER_MANUAL_CONFIRM`: **false**: 启用此项以手动确认新的注册。需要禁用`REGISTER_EMAIL_CONFIRM`
- `DISABLE_REGISTRATION`: **false**: 禁用注册,之后只有管理员可以为用户创建帐户。 - `DISABLE_REGISTRATION`: **false**: 禁用注册,之后只有管理员可以为用户创建帐户。
- `REQUIRE_EXTERNAL_REGISTRATION_PASSWORD`: **false**: 启用此项以强制通过外部方式创建的帐户通过GitHub、OpenID Connect等创建密码。警告启用此项将降低安全性因此只有在您知道自己在做什么时才应启用它。 - `REQUIRE_EXTERNAL_REGISTRATION_PASSWORD`: **false**: 启用此项以强制通过外部方式创建的帐户(通过 GitHub、OpenID Connect 等)创建密码。警告:启用此项将降低安全性,因此只有在您知道自己在做什么时才应启用它。
- `REQUIRE_SIGNIN_VIEW`: **false**: 启用此项以强制用户登录以查看任何页面或使用API。 - `REQUIRE_SIGNIN_VIEW`: **false**: 启用此项以强制用户登录以查看任何页面或使用 API。
- `ENABLE_NOTIFY_MAIL`: **false**: 启用此项以在发生某些情况(如创建问题)时向存储库的观察者发送电子邮件。需要启用`Mailer` - `ENABLE_NOTIFY_MAIL`: **false**: 启用此项以在发生某些情况(如创建问题)时向存储库的观察者发送电子邮件。需要启用`Mailer`
- `ENABLE_BASIC_AUTHENTICATION`: **true**: 禁用此项以禁止使用HTTP BASIC和用户的密码进行身份验证。请注意如果禁用此项您将无法使用密码访问令牌API端点。此外这仅会禁用使用密码的BASIC身份验证而不会禁用令牌或OAuth Basic。 - `ENABLE_BASIC_AUTHENTICATION`: **true**: 禁用此项以禁止使用 HTTP BASIC 和用户的密码进行身份验证。请注意,如果禁用此项,您将无法使用密码访问令牌 API 端点。此外,这仅会禁用使用密码的 BASIC 身份验证,而不会禁用令牌或 OAuth Basic。
- `ENABLE_REVERSE_PROXY_AUTHENTICATION`: **false**: 启用此项以允许反向代理身份验证。 - `ENABLE_REVERSE_PROXY_AUTHENTICATION`: **false**: 启用此项以允许反向代理身份验证。
- `ENABLE_REVERSE_PROXY_AUTO_REGISTRATION`: **false**: 启用此项以允许反向身份验证的自动注册。 - `ENABLE_REVERSE_PROXY_AUTO_REGISTRATION`: **false**: 启用此项以允许反向身份验证的自动注册。
- `ENABLE_REVERSE_PROXY_EMAIL`: **false**: 启用此项以允许使用提供的电子邮件而不是生成的电子邮件进行自动注册。 - `ENABLE_REVERSE_PROXY_EMAIL`: **false**: 启用此项以允许使用提供的电子邮件而不是生成的电子邮件进行自动注册。
- `ENABLE_REVERSE_PROXY_FULL_NAME`: **false**: 启用此项以允许使用提供的全名进行自动注册。 - `ENABLE_REVERSE_PROXY_FULL_NAME`: **false**: 启用此项以允许使用提供的全名进行自动注册。
- `ENABLE_CAPTCHA`: **false**: 启用此项以对注册使用验证码验证。 - `ENABLE_CAPTCHA`: **false**: 启用此项以对注册使用验证码验证。
- `REQUIRE_CAPTCHA_FOR_LOGIN`: **false**: 启用此项以要求登录使用验证码验证。您还必须启用`ENABLE_CAPTCHA` - `REQUIRE_CAPTCHA_FOR_LOGIN`: **false**: 启用此项以要求登录使用验证码验证。您还必须启用`ENABLE_CAPTCHA`
- `REQUIRE_EXTERNAL_REGISTRATION_CAPTCHA`: **false**: 启用此项以强制对外部帐户即GitHub、OpenID Connect等使用验证码验证。您还必须启用`ENABLE_CAPTCHA` - `REQUIRE_EXTERNAL_REGISTRATION_CAPTCHA`: **false**: 启用此项以强制对外部帐户(即 GitHub、OpenID Connect 等)使用验证码验证。您还必须启用`ENABLE_CAPTCHA`
- `CAPTCHA_TYPE`: **image**: \[image、recaptcha、hcaptcha、mcaptcha、cfturnstile\] - `CAPTCHA_TYPE`: **image**: \[image、recaptcha、hcaptcha、mcaptcha、cfturnstile\]
- `RECAPTCHA_SECRET`: **""**: 访问 https://www.google.com/recaptcha/admin 以获取recaptcha的密钥。 - `RECAPTCHA_SECRET`: **""**: 访问 https://www.google.com/recaptcha/admin 以获取 recaptcha 的密钥。
- `RECAPTCHA_SITEKEY`: **""**: 访问 https://www.google.com/recaptcha/admin 以获取recaptcha的站点密钥。 - `RECAPTCHA_SITEKEY`: **""**: 访问 https://www.google.com/recaptcha/admin 以获取 recaptcha 的站点密钥。
- `RECAPTCHA_URL`: **https://www.google.com/recaptcha/** 设置recaptcha网址允许使用recaptcha net。 - `RECAPTCHA_URL`: **https://www.google.com/recaptcha/** :设置 recaptcha 网址,允许使用 recaptcha net。
- `HCAPTCHA_SECRET`: **""**: 注册 https://www.hcaptcha.com/ 以获取hcaptcha的密钥。 - `HCAPTCHA_SECRET`: **""**: 注册 https://www.hcaptcha.com/ 以获取 hcaptcha 的密钥。
- `HCAPTCHA_SITEKEY`: **""**: 注册 https://www.hcaptcha.com/ 以获取hcaptcha的站点密钥。 - `HCAPTCHA_SITEKEY`: **""**: 注册 https://www.hcaptcha.com/ 以获取 hcaptcha 的站点密钥。
- `MCAPTCHA_SECRET`: **""**: 访问您的mCaptcha实例以获取mCaptcha的密钥。 - `MCAPTCHA_SECRET`: **""**: 访问您的 mCaptcha 实例以获取 mCaptcha 的密钥。
- `MCAPTCHA_SITEKEY`: **""**: 访问您的mCaptcha实例以获取mCaptcha的站点密钥。 - `MCAPTCHA_SITEKEY`: **""**: 访问您的 mCaptcha 实例以获取 mCaptcha 的站点密钥。
- `MCAPTCHA_URL` **https://demo.mcaptcha.org/** 设置mCaptchaURL。 - `MCAPTCHA_URL` **https://demo.mcaptcha.org/** :设置 mCaptchaURL。
- `CF_TURNSTILE_SECRET` **""**: 访问 https://dash.cloudflare.com/?to=/:account/turnstile 以获取cloudflare turnstile的密钥。 - `CF_TURNSTILE_SECRET` **""**: 访问 https://dash.cloudflare.com/?to=/:account/turnstile 以获取 cloudflare turnstile 的密钥。
- `CF_TURNSTILE_SITEKEY` **""**: 访问 https://dash.cloudflare.com/?to=/:account/turnstile 以获取cloudflare turnstile的站点密钥。 - `CF_TURNSTILE_SITEKEY` **""**: 访问 https://dash.cloudflare.com/?to=/:account/turnstile 以获取 cloudflare turnstile 的站点密钥。
- `DEFAULT_KEEP_EMAIL_PRIVATE`: **false**: 默认情况下,将用户设置为保持其电子邮件地址私有。 - `DEFAULT_KEEP_EMAIL_PRIVATE`: **false**: 默认情况下,将用户设置为保持其电子邮件地址私有。
- `DEFAULT_ALLOW_CREATE_ORGANIZATION`: **true**: 默认情况下,允许新用户创建组织。 - `DEFAULT_ALLOW_CREATE_ORGANIZATION`: **true**: 默认情况下,允许新用户创建组织。
- `DEFAULT_USER_IS_RESTRICTED`: **false**: 默认情况下,为新用户分配受限权限。 - `DEFAULT_USER_IS_RESTRICTED`: **false**: 默认情况下,为新用户分配受限权限。
- `DEFAULT_ENABLE_DEPENDENCIES`: **true**: 启用此项以默认启用依赖项。 - `DEFAULT_ENABLE_DEPENDENCIES`: **true**: 启用此项以默认启用依赖项。
- `ALLOW_CROSS_REPOSITORY_DEPENDENCIES` : **true** 启用此项以允许从用户被授予访问权限的任何存储库上进行依赖项操作。 - `ALLOW_CROSS_REPOSITORY_DEPENDENCIES` : **true** 启用此项以允许从用户被授予访问权限的任何存储库上进行依赖项操作。
- `USER_LOCATION_MAP_URL`: **""**: 一个显示用户在地图上位置的地图服务URL。位置将作为转义的查询参数附加到URL中。 - `USER_LOCATION_MAP_URL`: **""**: 一个显示用户在地图上位置的地图服务 URL。位置将作为转义的查询参数附加到 URL 中。
- `ENABLE_USER_HEATMAP`: **true**: 启用此项以在用户个人资料上显示热图。 - `ENABLE_USER_HEATMAP`: **true**: 启用此项以在用户个人资料上显示热图。
- `ENABLE_TIMETRACKING`: **true**: 启用时间跟踪功能。 - `ENABLE_TIMETRACKING`: **true**: 启用时间跟踪功能。
- `DEFAULT_ENABLE_TIMETRACKING`: **true**: 默认情况下,允许存储库默认使用时间跟踪。 - `DEFAULT_ENABLE_TIMETRACKING`: **true**: 默认情况下,允许存储库默认使用时间跟踪。
- `DEFAULT_ALLOW_ONLY_CONTRIBUTORS_TO_TRACK_TIME`: **true**: 仅允许具有写权限的用户跟踪时间。 - `DEFAULT_ALLOW_ONLY_CONTRIBUTORS_TO_TRACK_TIME`: **true**: 仅允许具有写权限的用户跟踪时间。
- `EMAIL_DOMAIN_ALLOWLIST`: **_empty_**: 如果非空,逗号分隔的域名列表,只能用于在此实例上注册,支持通配符。 - `EMAIL_DOMAIN_ALLOWLIST`: **_empty_**: 如果非空,逗号分隔的域名列表,只能用于在此实例上注册,支持通配符。
- `EMAIL_DOMAIN_BLOCKLIST`: **_empty_**: 如果非空,逗号分隔的域名列表,不能用于在此实例上注册,支持通配符。 - `EMAIL_DOMAIN_BLOCKLIST`: **_empty_**: 如果非空,逗号分隔的域名列表,不能用于在此实例上注册,支持通配符。
- `SHOW_REGISTRATION_BUTTON`: **! DISABLE\_REGISTRATION**: 显示注册按钮 - `SHOW_REGISTRATION_BUTTON`: **! DISABLE_REGISTRATION**: 显示注册按钮
- `SHOW_MILESTONES_DASHBOARD_PAGE`: **true** 启用此项以显示里程碑仪表板页面 - 查看所有用户的里程碑 - `SHOW_MILESTONES_DASHBOARD_PAGE`: **true** 启用此项以显示里程碑仪表板页面 - 查看所有用户的里程碑
- `AUTO_WATCH_NEW_REPOS`: **true** 启用此项以在创建新存储库时让所有组织用户观看新存储库 - `AUTO_WATCH_NEW_REPOS`: **true** 启用此项以在创建新存储库时让所有组织用户观看新存储库
- `AUTO_WATCH_ON_CHANGES`: **false** 启用此项以在首次提交后使用户观看存储库 - `AUTO_WATCH_ON_CHANGES`: **false** 启用此项以在首次提交后使用户观看存储库
- `DEFAULT_USER_VISIBILITY`: **public**: 为用户设置默认的可见性模式,可以是"public"、"limited"或"private"。 - `DEFAULT_USER_VISIBILITY`: **public**: 为用户设置默认的可见性模式,可以是"public"、"limited"或"private"。
- `ALLOWED_USER_VISIBILITY_MODES`: **public,limited,private**: 设置用户可以具有的可见性模式 - `ALLOWED_USER_VISIBILITY_MODES`: **public,limited,private**: 设置用户可以具有的可见性模式
- `DEFAULT_ORG_VISIBILITY`: **public**: 为组织设置默认的可见性模式,可以是"public"、"limited"或"private"。 - `DEFAULT_ORG_VISIBILITY`: **public**: 为组织设置默认的可见性模式,可以是"public"、"limited"或"private"。
- `DEFAULT_ORG_MEMBER_VISIBLE`: **false**: 如果添加到组织时将用户的成员身份可见设置为True。 - `DEFAULT_ORG_MEMBER_VISIBLE`: **false**: 如果添加到组织时将用户的成员身份可见,设置为 True。
- `ALLOW_ONLY_INTERNAL_REGISTRATION`: **false**: 设置为True以强制仅通过Gitea进行注册。 - `ALLOW_ONLY_INTERNAL_REGISTRATION`: **false**: 设置为 True 以强制仅通过 Gitea 进行注册。
- `ALLOW_ONLY_EXTERNAL_REGISTRATION`: **false**: 设置为True以强制仅使用第三方服务进行注册。 - `ALLOW_ONLY_EXTERNAL_REGISTRATION`: **false**: 设置为 True 以强制仅使用第三方服务进行注册。
- `NO_REPLY_ADDRESS`: **noreply.DOMAIN**: 如果用户将KeepEmailPrivate设置为True则在Git日志中的用户电子邮件地址的域部分的值。DOMAIN解析为server.DOMAIN中的值。 - `NO_REPLY_ADDRESS`: **noreply.DOMAIN**: 如果用户将 KeepEmailPrivate 设置为 True则在 Git 日志中的用户电子邮件地址的域部分的值。DOMAIN 解析为 server.DOMAIN 中的值。
用户的电子邮件将被替换为小写的用户名、"@"和NO_REPLY_ADDRESS的连接。 用户的电子邮件将被替换为小写的用户名、"@"和 NO_REPLY_ADDRESS 的连接。
- `USER_DELETE_WITH_COMMENTS_MAX_TIME`: **0**: 用户删除后,评论将保留的最短时间。 - `USER_DELETE_WITH_COMMENTS_MAX_TIME`: **0**: 用户删除后,评论将保留的最短时间。
- `VALID_SITE_URL_SCHEMES`: **http, https**: 用户个人资料的有效站点URL方案 - `VALID_SITE_URL_SCHEMES`: **http, https**: 用户个人资料的有效站点 URL 方案
### Service - Explore (`service.explore`) ### Service - Explore (`service.explore`)
@@ -655,12 +652,12 @@ Gitea 创建以下非唯一队列:
## SSH Minimum Key Sizes (`ssh.minimum_key_sizes`) ## SSH Minimum Key Sizes (`ssh.minimum_key_sizes`)
定义允许的算法及其最小密钥长度(使用-1来禁用某个类型 定义允许的算法及其最小密钥长度(使用-1 来禁用某个类型):
- `ED25519`**256** - `ED25519`**256**
- `ECDSA`**256** - `ECDSA`**256**
- `RSA`**3071**: 我们在这里设置为2047因为一个其他方面有效的3072 RSA密钥可能被报告为3071长度。 - `RSA`**3071**: 我们在这里设置为 2047因为一个其他方面有效的 3072 RSA 密钥可能被报告为 3071 长度。
- `DSA`**-1**: 默认情况下禁用DSA。设置为**1024**以重新启用但请注意可能需要重新配置您的SSHD提供者 - `DSA`**-1**: 默认情况下禁用 DSA。设置为**1024**以重新启用,但请注意可能需要重新配置您的 SSHD 提供者
## Webhook (`webhook`) ## Webhook (`webhook`)
@@ -677,7 +674,7 @@ Gitea 创建以下非唯一队列:
- `SKIP_TLS_VERIFY`: **false**: 允许不安全的证书。 - `SKIP_TLS_VERIFY`: **false**: 允许不安全的证书。
- `PAGING_NUM`: **10**: 一页中显示的 Webhook 历史事件数量。 - `PAGING_NUM`: **10**: 一页中显示的 Webhook 历史事件数量。
- `PROXY_URL`: **_empty_**: 代理服务器 URL支持 http://、https://、socks://,留空将遵循环境的 http_proxy/https_proxy 设置。如果未提供,将使用全局代理设置。 - `PROXY_URL`: **_empty_**: 代理服务器 URL支持 http://、https://、socks://,留空将遵循环境的 http_proxy/https_proxy 设置。如果未提供,将使用全局代理设置。
- `PROXY_HOSTS`: **_empty_**: 需要代理的主机名的逗号分隔列表。支持通配符模式 (*);使用 ** 来匹配所有主机。如果未提供,将使用全局代理设置。 - `PROXY_HOSTS`: **_empty_**: 需要代理的主机名的逗号分隔列表。支持通配符模式 (\*);使用 \*\* 来匹配所有主机。如果未提供,将使用全局代理设置。
## 邮件 (`mailer`) ## 邮件 (`mailer`)
@@ -733,7 +730,7 @@ Gitea 创建以下非唯一队列:
## 缓存 (`cache`) ## 缓存 (`cache`)
- `ADAPTER`: **memory**: 缓存引擎,可以为 `memory`, `redis`, `redis-cluster`, `twoqueue``memcache`. (`twoqueue` 代表缓冲区固定的LRU缓存) - `ADAPTER`: **memory**: 缓存引擎,可以为 `memory`, `redis`, `redis-cluster`, `twoqueue``memcache`. (`twoqueue` 代表缓冲区固定的 LRU 缓存)
- `INTERVAL`: **60**: 垃圾回收间隔(秒),只对`memory``towqueue`有效。 - `INTERVAL`: **60**: 垃圾回收间隔(秒),只对`memory``towqueue`有效。
- `HOST`: **_empty_**: 缓存配置。`redis`, `redis-cluster``memcache`配置连接字符串;`twoqueue` 设置队列参数 - `HOST`: **_empty_**: 缓存配置。`redis`, `redis-cluster``memcache`配置连接字符串;`twoqueue` 设置队列参数
- Redis: `redis://:macaron@127.0.0.1:6379/0?pool_size=100&idle_timeout=180s` - Redis: `redis://:macaron@127.0.0.1:6379/0?pool_size=100&idle_timeout=180s`
@@ -752,7 +749,7 @@ Gitea 创建以下非唯一队列:
- `PROVIDER`: **memory**: 会话存储引擎 \[memory, file, redis, redis-cluster, db, mysql, couchbase, memcache, postgres\]。设置为 `db` 将会重用 `[database]` 的配置信息。 - `PROVIDER`: **memory**: 会话存储引擎 \[memory, file, redis, redis-cluster, db, mysql, couchbase, memcache, postgres\]。设置为 `db` 将会重用 `[database]` 的配置信息。
- `PROVIDER_CONFIG`: **data/sessions**: 对于文件,为根路径;对于 db为空将使用数据库配置对于其他引擎为连接字符串。相对路径将根据 _`AppWorkPath`_ 绝对化。 - `PROVIDER_CONFIG`: **data/sessions**: 对于文件,为根路径;对于 db为空将使用数据库配置对于其他引擎为连接字符串。相对路径将根据 _`AppWorkPath`_ 绝对化。
- `COOKIE_SECURE`: **_empty_**: `true``false`。启用此选项以强制在所有会话访问中使用 HTTPS。如果没有设置当 ROOT_URL 是 https 链接的时候默认设置为 true。 - `COOKIE_SECURE`: **_empty_**: `true``false`。启用此选项以强制在所有会话访问中使用 HTTPS。如果没有设置当 ROOT_URL 是 https 链接的时候默认设置为 true。
- `COOKIE_NAME`: **i\_like\_gitea**: 用于会话 ID 的 cookie 名称。 - `COOKIE_NAME`: **i_like_gitea**: 用于会话 ID 的 cookie 名称。
- `GC_INTERVAL_TIME`: **86400**: GC 间隔时间,以秒为单位。 - `GC_INTERVAL_TIME`: **86400**: GC 间隔时间,以秒为单位。
- `SESSION_LIFE_TIME`: **86400**: 会话生命周期,以秒为单位,默认为 864001 天)。 - `SESSION_LIFE_TIME`: **86400**: 会话生命周期,以秒为单位,默认为 864001 天)。
- `DOMAIN`: **_empty_**: 设置 cookie 的域。 - `DOMAIN`: **_empty_**: 设置 cookie 的域。
@@ -807,7 +804,7 @@ Gitea 创建以下非唯一队列:
- `MINIO_USE_SSL`: **false**: Minio 启用 SSL仅当 STORAGE_TYPE 为 `minio` 时可用。 - `MINIO_USE_SSL`: **false**: Minio 启用 SSL仅当 STORAGE_TYPE 为 `minio` 时可用。
- `MINIO_INSECURE_SKIP_VERIFY`: **false**: Minio 跳过 SSL 验证,仅当 STORAGE_TYPE 为 `minio` 时可用。 - `MINIO_INSECURE_SKIP_VERIFY`: **false**: Minio 跳过 SSL 验证,仅当 STORAGE_TYPE 为 `minio` 时可用。
- `MINIO_CHECKSUM_ALGORITHM`: **default**: Minio 校验算法:`default`(适用于 MinIO 或 AWS S3`md5`(适用于 Cloudflare 或 Backblaze - `MINIO_CHECKSUM_ALGORITHM`: **default**: Minio 校验算法:`default`(适用于 MinIO 或 AWS S3`md5`(适用于 Cloudflare 或 Backblaze
- `MINIO_BUCKET_LOOKUP_TYPE`: **auto**: Miniobucket查找方式默认为`auto`模式,可将其设置为`dns`(虚拟托管样式)或`path`(路径样式),仅当`STORAGE_TYPE``minio`时可用。 - `MINIO_BUCKET_LOOKUP_TYPE`: **auto**: Miniobucket 查找方式默认为`auto`模式,可将其设置为`dns`(虚拟托管样式)或`path`(路径样式),仅当`STORAGE_TYPE``minio`时可用。
## 日志 (`log`) ## 日志 (`log`)
@@ -872,11 +869,11 @@ Gitea 创建以下非唯一队列:
- `ENABLED`: **false**: 是否在后台运行定期任务。 - `ENABLED`: **false**: 是否在后台运行定期任务。
- `RUN_AT_START`: **false**: 在应用程序启动时运行定时任务。 - `RUN_AT_START`: **false**: 在应用程序启动时运行定时任务。
- `NOTICE_ON_SUCCESS`: **false**: 设置为 true时任务成功完成时将进行通知。 - `NOTICE_ON_SUCCESS`: **false**: 设置为 true 时,任务成功完成时将进行通知。
- `SCHEDULE` 接受的格式: - `SCHEDULE` 接受的格式:
- 完整的crontab语法规范, e.g. `* * * * * ?` - 完整的 crontab 语法规范, e.g. `* * * * * ?`
- 描述符e.g. `@midnight`, `@every 1h30m` ... - 描述符 e.g. `@midnight`, `@every 1h30m` ...
- 更多详见: [cron documentation](https://pkg.go.dev/github.com/gogs/cron@v0.0.0-20171120032916-9f6c956d3e14) - 更多详见: [cron documentation](https://pkg.go.dev/github.com/gogs/cron@v0.0.0-20171120032916-9f6c956d3e14)
### 基本定时任务 - 默认开启 ### 基本定时任务 - 默认开启
@@ -885,31 +882,31 @@ Gitea 创建以下非唯一队列:
- `ENABLED`: **true**: 是否启用该定时任务。 - `ENABLED`: **true**: 是否启用该定时任务。
- `RUN_AT_START`: **true**: 设置在服务启动时运行。 - `RUN_AT_START`: **true**: 设置在服务启动时运行。
- `SCHEDULE`: **@midnight**: 使用Cron语法的定时任务触发配置例如 `@every 1h` - `SCHEDULE`: **@midnight**: 使用 Cron 语法的定时任务触发配置,例如 `@every 1h`
- `OLDER_THAN`: **24h**: 超过`OLDER_THAN`时间的存档将被删除,例如 `12h` - `OLDER_THAN`: **24h**: 超过`OLDER_THAN`时间的存档将被删除,例如 `12h`
#### 定时任务 - 更新镜像仓库 (`cron.update_mirrors`) #### 定时任务 - 更新镜像仓库 (`cron.update_mirrors`)
- `SCHEDULE`: **@every 10m**: 使用Cron语法的定时任务触发配置例如 `@every 3h` - `SCHEDULE`: **@every 10m**: 使用 Cron 语法的定时任务触发配置,例如 `@every 3h`
- `PULL_LIMIT`: **50**: 将要添加到队列的镜像数量限制为此数字负值表示无限制0将导致不会将镜像加入队列从而有效地禁用镜像更新 - `PULL_LIMIT`: **50**: 将要添加到队列的镜像数量限制为此数字负值表示无限制0 将导致不会将镜像加入队列,从而有效地禁用镜像更新)。
- `PUSH_LIMIT`: **50**: 将要添加到队列的镜像数量限制为此数字负值表示无限制0将导致不会将镜像加入队列从而有效地禁用镜像更新 - `PUSH_LIMIT`: **50**: 将要添加到队列的镜像数量限制为此数字负值表示无限制0 将导致不会将镜像加入队列,从而有效地禁用镜像更新)。
#### 定时任务 - 健康检查所有仓库 (`cron.repo_health_check`) #### 定时任务 - 健康检查所有仓库 (`cron.repo_health_check`)
- `SCHEDULE`: **@midnight**: Cron语法用于安排仓库健康检查。 - `SCHEDULE`: **@midnight**: Cron 语法,用于安排仓库健康检查。
- `TIMEOUT`: **60s**: 用于健康检查执行超时的时间持续语法。 - `TIMEOUT`: **60s**: 用于健康检查执行超时的时间持续语法。
- `ARGS`: **_empty_**: `git fsck` 命令的参数,例如 `--unreachable --tags`。在 http://git-scm.com/docs/git-fsck 上了解更多。 - `ARGS`: **_empty_**: `git fsck` 命令的参数,例如 `--unreachable --tags`。在 http://git-scm.com/docs/git-fsck 上了解更多。
#### 定时任务 - 检查所有仓库统计 (`cron.check_repo_stats`) #### 定时任务 - 检查所有仓库统计 (`cron.check_repo_stats`)
- `RUN_AT_START`: **true**: 在启动时运行仓库统计检查。 - `RUN_AT_START`: **true**: 在启动时运行仓库统计检查。
- `SCHEDULE`: **@midnight**: Cron语法用于安排仓库统计检查。 - `SCHEDULE`: **@midnight**: Cron 语法,用于安排仓库统计检查。
#### 定时任务 - 清理 hook_task 表 (`cron.cleanup_hook_task_table`) #### 定时任务 - 清理 hook_task 表 (`cron.cleanup_hook_task_table`)
- `ENABLED`: **true**: 启用清理 hook_task 任务。 - `ENABLED`: **true**: 启用清理 hook_task 任务。
- `RUN_AT_START`: **false**: 在启动时运行清理 hook_task如果启用 - `RUN_AT_START`: **false**: 在启动时运行清理 hook_task如果启用
- `SCHEDULE`: **@midnight**: Cron语法用于清理 hook_task 表。 - `SCHEDULE`: **@midnight**: Cron 语法,用于清理 hook_task 表。
- `CLEANUP_TYPE` **OlderThan** OlderThan 或 PerWebhook 方法来清理 hook_task可以按年龄即 hook_task 记录传递多久)或按每个 Webhook 保留的数量(即每个 Webhook 保留最新的 x 个传递)来清理。 - `CLEANUP_TYPE` **OlderThan** OlderThan 或 PerWebhook 方法来清理 hook_task可以按年龄即 hook_task 记录传递多久)或按每个 Webhook 保留的数量(即每个 Webhook 保留最新的 x 个传递)来清理。
- `OLDER_THAN`: **168h**: 如果 CLEANUP_TYPE 设置为 OlderThan则早于此表达式的任何传递的 hook_task 记录将被删除。 - `OLDER_THAN`: **168h**: 如果 CLEANUP_TYPE 设置为 OlderThan则早于此表达式的任何传递的 hook_task 记录将被删除。
- `NUMBER_TO_KEEP`: **10**: 如果 CLEANUP_TYPE 设置为 PerWebhook则 Webhook 的此数量 hook_task 记录将被保留(即保留最新的 x 个传递)。 - `NUMBER_TO_KEEP`: **10**: 如果 CLEANUP_TYPE 设置为 PerWebhook则 Webhook 的此数量 hook_task 记录将被保留(即保留最新的 x 个传递)。
@@ -919,7 +916,7 @@ Gitea 创建以下非唯一队列:
- `ENABLED`: **true**: 启用清理过期包任务。 - `ENABLED`: **true**: 启用清理过期包任务。
- `RUN_AT_START`: **true**: 在启动时运行任务(如果启用)。 - `RUN_AT_START`: **true**: 在启动时运行任务(如果启用)。
- `NOTICE_ON_SUCCESS`: **false**: 每次运行此任务时都会通知。 - `NOTICE_ON_SUCCESS`: **false**: 每次运行此任务时都会通知。
- `SCHEDULE`: **@midnight**: Cron语法用于任务。 - `SCHEDULE`: **@midnight**: Cron 语法,用于任务。
- `OLDER_THAN`: **24h**: 未引用的包数据创建超过 OLDER_THAN 时间的包将被删除。 - `OLDER_THAN`: **24h**: 未引用的包数据创建超过 OLDER_THAN 时间的包将被删除。
#### Cron - 更新迁移海报 ID (`cron.update_migration_poster_id`) #### Cron - 更新迁移海报 ID (`cron.update_migration_poster_id`)
@@ -937,7 +934,7 @@ Gitea 创建以下非唯一队列:
- `ENABLED`: **false**: 启用服务。 - `ENABLED`: **false**: 启用服务。
- `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。 - `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。
- `SCHEDULE`: **@every 72h**: Cron语法用于安排仓库存档清理例如 `@every 1h` - `SCHEDULE`: **@every 72h**: Cron 语法,用于安排仓库存档清理,例如 `@every 1h`
- `TIMEOUT`: **60s**: 用于垃圾收集执行超时的时间持续语法。 - `TIMEOUT`: **60s**: 用于垃圾收集执行超时的时间持续语法。
- `NOTICE_ON_SUCCESS`: **false**: 设置为 true 以打开成功通知。 - `NOTICE_ON_SUCCESS`: **false**: 设置为 true 以打开成功通知。
- `ARGS`: **_empty_**: `git gc` 命令的参数,例如 `--aggressive --auto`。默认值与 [git] -> GC_ARGS 相同。 - `ARGS`: **_empty_**: `git gc` 命令的参数,例如 `--aggressive --auto`。默认值与 [git] -> GC_ARGS 相同。
@@ -947,95 +944,95 @@ Gitea 创建以下非唯一队列:
- `ENABLED`: **false**: 启用服务。 - `ENABLED`: **false**: 启用服务。
- `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。 - `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。
- `NOTICE_ON_SUCCESS`: **false**: 设置为 true 以打开成功通知。 - `NOTICE_ON_SUCCESS`: **false**: 设置为 true 以打开成功通知。
- `SCHEDULE`: **@every 72h**: Cron语法用于安排仓库存档清理例如 `@every 1h` - `SCHEDULE`: **@every 72h**: Cron 语法,用于安排仓库存档清理,例如 `@every 1h`
#### Cron - 重新同步所有仓库的 pre-receive、update 和 post-receive 钩子 (`cron.resync_all_hooks`) #### Cron - 重新同步所有仓库的 pre-receive、update 和 post-receive 钩子 (`cron.resync_all_hooks`)
- `ENABLED`: **false**: 启用服务。 - `ENABLED`: **false**: 启用服务。
- `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。 - `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。
- `NOTICE_ON_SUCCESS`: **false**: 设置为 true 以打开成功通知。 - `NOTICE_ON_SUCCESS`: **false**: 设置为 true 以打开成功通知。
- `SCHEDULE`: **@every 72h**: Cron语法用于安排仓库存档清理例如 `@every 1h` - `SCHEDULE`: **@every 72h**: Cron 语法,用于安排仓库存档清理,例如 `@every 1h`
#### Cron - 重新初始化所有缺失的 Git 仓库,但记录已存在 (`cron.reinit_missing_repos`) #### Cron - 重新初始化所有缺失的 Git 仓库,但记录已存在 (`cron.reinit_missing_repos`)
- `ENABLED`: **false**: 启用服务。 - `ENABLED`: **false**: 启用服务。
- `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。 - `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。
- `NOTICE_ON_SUCCESS`: **false**: 设置为 true 以打开成功通知。 - `NOTICE_ON_SUCCESS`: **false**: 设置为 true 以打开成功通知。
- `SCHEDULE`: **@every 72h**: Cron语法用于安排仓库存档清理例如 `@every 1h` - `SCHEDULE`: **@every 72h**: Cron 语法,用于安排仓库存档清理,例如 `@every 1h`
#### Cron - 删除所有缺少 Git 文件的仓库 (`cron.delete_missing_repos`) #### Cron - 删除所有缺少 Git 文件的仓库 (`cron.delete_missing_repos`)
- `ENABLED`: **false**: 启用服务。 - `ENABLED`: **false**: 启用服务。
- `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。 - `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。
- `NOTICE_ON_SUCCESS`: **false**: 设置为 true 以打开成功通知。 - `NOTICE_ON_SUCCESS`: **false**: 设置为 true 以打开成功通知。
- `SCHEDULE`: **@every 72h**: Cron语法用于安排仓库存档清理例如 `@every 1h` - `SCHEDULE`: **@every 72h**: Cron 语法,用于安排仓库存档清理,例如 `@every 1h`
#### Cron - 删除生成的仓库头像 (`cron.delete_generated_repository_avatars`) #### Cron - 删除生成的仓库头像 (`cron.delete_generated_repository_avatars`)
- `ENABLED`: **false**: 启用服务。 - `ENABLED`: **false**: 启用服务。
- `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。 - `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。
- `NOTICE_ON_SUCCESS`: **false**: 设置为 true 以打开成功通知。 - `NOTICE_ON_SUCCESS`: **false**: 设置为 true 以打开成功通知。
- `SCHEDULE`: **@every 72h**: Cron语法用于安排仓库存档清理例如 `@every 1h` - `SCHEDULE`: **@every 72h**: Cron 语法,用于安排仓库存档清理,例如 `@every 1h`
#### Cron - 从数据库中删除所有旧的操作 (`cron.delete_old_actions`) #### Cron - 从数据库中删除所有旧的操作 (`cron.delete_old_actions`)
- `ENABLED`: **false**: 启用服务。 - `ENABLED`: **false**: 启用服务。
- `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。 - `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。
- `NOTICE_ON_SUCCESS`: **false**: 设置为 true 以打开成功通知。 - `NOTICE_ON_SUCCESS`: **false**: 设置为 true 以打开成功通知。
- `SCHEDULE`: **@every 168h**: Cron语法用于设置多长时间进行检查。 - `SCHEDULE`: **@every 168h**: Cron 语法,用于设置多长时间进行检查。
- `OLDER_THAN`: **8760h**: 早于此表达式的任何操作都将从数据库中删除,建议使用 `8760h`1年因为这是热力图的最大长度。 - `OLDER_THAN`: **8760h**: 早于此表达式的任何操作都将从数据库中删除,建议使用 `8760h`1 年),因为这是热力图的最大长度。
#### Cron - 从数据库中删除所有旧的系统通知 (`cron.delete_old_system_notices`) #### Cron - 从数据库中删除所有旧的系统通知 (`cron.delete_old_system_notices`)
- `ENABLED`: **false**: 启用服务。 - `ENABLED`: **false**: 启用服务。
- `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。 - `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。
- `NO_SUCCESS_NOTICE`: **false**: 设置为 true 以关闭成功通知。 - `NO_SUCCESS_NOTICE`: **false**: 设置为 true 以关闭成功通知。
- `SCHEDULE`: **@every 168h**: Cron语法用于设置多长时间进行检查。 - `SCHEDULE`: **@every 168h**: Cron 语法,用于设置多长时间进行检查。
- `OLDER_THAN`: **8760h**: 早于此表达式的任何系统通知都将从数据库中删除。 - `OLDER_THAN`: **8760h**: 早于此表达式的任何系统通知都将从数据库中删除。
#### Cron - 在仓库中回收 LFS 指针 (`cron.gc_lfs`) #### Cron - 在仓库中回收 LFS 指针 (`cron.gc_lfs`)
- `ENABLED`: **false**: 启用服务。 - `ENABLED`: **false**: 启用服务。
- `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。 - `RUN_AT_START`: **false**: 在启动时运行任务(如果启用)。
- `SCHEDULE`: **@every 24h**: Cron语法用于设置多长时间进行检查。 - `SCHEDULE`: **@every 24h**: Cron 语法,用于设置多长时间进行检查。
- `OLDER_THAN`: **168h**: 只会尝试回收早于此时间(默认7天)的 LFSMetaObject。 - `OLDER_THAN`: **168h**: 只会尝试回收早于此时间(默认 7 天)的 LFSMetaObject。
- `LAST_UPDATED_MORE_THAN_AGO`: **72h**: 只会尝试回收超过此时间(默认3天)没有尝试过回收的 LFSMetaObject。 - `LAST_UPDATED_MORE_THAN_AGO`: **72h**: 只会尝试回收超过此时间(默认 3 天)没有尝试过回收的 LFSMetaObject。
- `NUMBER_TO_CHECK_PER_REPO`: **100**: 每个仓库要检查的过期 LFSMetaObject 的最小数量。设置为 `0` 以始终检查所有。 - `NUMBER_TO_CHECK_PER_REPO`: **100**: 每个仓库要检查的过期 LFSMetaObject 的最小数量。设置为 `0` 以始终检查所有。
## Git (`git`) ## Git (`git`)
- `PATH`: **""**: Git可执行文件的路径。如果为空Gitea将在PATH环境中搜索。 - `PATH`: **""**: Git 可执行文件的路径。如果为空Gitea 将在 PATH 环境中搜索。
- `HOME_PATH`: **`{APP_DATA_PATH}/home`**: GitHOME目录。 - `HOME_PATH`: **`{APP_DATA_PATH}/home`**: GitHOME 目录。
此目录将用于包含Giteagit调用将使用的`.gitconfig`和可能的`.gnupg`目录。如果您可以确认Gitea是在此环境中唯一运行的应用程序您可以将其设置为Gitea用户的正常主目录。 此目录将用于包含 Giteagit 调用将使用的`.gitconfig`和可能的`.gnupg`目录。如果您可以确认 Gitea 是在此环境中唯一运行的应用程序,您可以将其设置为 Gitea 用户的正常主目录。
- `DISABLE_DIFF_HIGHLIGHT`: **false**: 禁用已添加和已删除更改的高亮显示。 - `DISABLE_DIFF_HIGHLIGHT`: **false**: 禁用已添加和已删除更改的高亮显示。
- `MAX_GIT_DIFF_LINES`: **1000**: 在diff视图中允许单个文件的最大行数。 - `MAX_GIT_DIFF_LINES`: **1000**: 在 diff 视图中允许单个文件的最大行数。
- `MAX_GIT_DIFF_LINE_CHARACTERS`: **5000**: 在diff视图中每行的最大字符数。 - `MAX_GIT_DIFF_LINE_CHARACTERS`: **5000**: 在 diff 视图中每行的最大字符数。
- `MAX_GIT_DIFF_FILES`: **100**: 在diff视图中显示的最大文件数。 - `MAX_GIT_DIFF_FILES`: **100**: 在 diff 视图中显示的最大文件数。
- `COMMITS_RANGE_SIZE`: **50**: 设置默认的提交范围大小 - `COMMITS_RANGE_SIZE`: **50**: 设置默认的提交范围大小
- `BRANCHES_RANGE_SIZE`: **20**: 设置默认的分支范围大小 - `BRANCHES_RANGE_SIZE`: **20**: 设置默认的分支范围大小
- `GC_ARGS`: **_empty_**: 命令`git gc`的参数,例如`--aggressive --auto`。更多信息请参见http://git-scm.com/docs/git-gc/ - `GC_ARGS`: **_empty_**: 命令`git gc`的参数,例如`--aggressive --auto`。更多信息请参见http://git-scm.com/docs/git-gc/
- `ENABLE_AUTO_GIT_WIRE_PROTOCOL`: **true**: 如果使用Git版本 >= 2.18时使用Git wire协议版本2默认为true当您始终希望使用Git wire协议版本1时设置为false。 - `ENABLE_AUTO_GIT_WIRE_PROTOCOL`: **true**: 如果使用 Git 版本 >= 2.18 时使用 Git wire 协议版本 2默认为 true当您始终希望使用 Git wire 协议版本 1 时设置为 false。
要在使用OpenSSH服务器的情况下为通过SSHGit启用此功能请将`AcceptEnv GIT_PROTOCOL`添加到您的sshd_config文件中。 要在使用 OpenSSH 服务器的情况下为通过 SSHGit 启用此功能,请将`AcceptEnv GIT_PROTOCOL`添加到您的 sshd_config 文件中。
- `PULL_REQUEST_PUSH_MESSAGE`: **true**: 对于推送到非默认分支的响应使用URL创建拉取请求如果启用了该存储库的拉取请求 - `PULL_REQUEST_PUSH_MESSAGE`: **true**: 对于推送到非默认分支的响应,使用 URL 创建拉取请求(如果启用了该存储库的拉取请求)
- `VERBOSE_PUSH`: **true**: 在处理推送时打印有关推送状态的信息。 - `VERBOSE_PUSH`: **true**: 在处理推送时打印有关推送状态的信息。
- `VERBOSE_PUSH_DELAY`: **5s**: 仅在推送时间超过此延迟时才打印详细信息。 - `VERBOSE_PUSH_DELAY`: **5s**: 仅在推送时间超过此延迟时才打印详细信息。
- `LARGE_OBJECT_THRESHOLD`: **1048576**: 仅限于Go-Git不要在内存中缓存大于此大小的对象。设置为0以禁用。) - `LARGE_OBJECT_THRESHOLD`: **1048576**: (仅限于 Go-Git不要在内存中缓存大于此大小的对象。设置为 0 以禁用。)
- `DISABLE_CORE_PROTECT_NTFS`: **false**`core.protectNTFS`强制设置为false。 - `DISABLE_CORE_PROTECT_NTFS`: **false**`core.protectNTFS`强制设置为 false。
- `DISABLE_PARTIAL_CLONE`: **false** 禁用使用部分克隆进行git。 - `DISABLE_PARTIAL_CLONE`: **false** 禁用使用部分克隆进行 git。
### Git - 超时设置 (`git.timeout`) ### Git - 超时设置 (`git.timeout`)
- `DEFAULT`: **360**: Git操作的默认超时时间单位秒 - `DEFAULT`: **360**: Git 操作的默认超时时间,单位秒
- `MIGRATE`: **600**: 在迁移外部存储库时的超时时间,单位秒 - `MIGRATE`: **600**: 在迁移外部存储库时的超时时间,单位秒
- `MIRROR`: **300**: 在镜像外部存储库时的超时时间,单位秒 - `MIRROR`: **300**: 在镜像外部存储库时的超时时间,单位秒
- `CLONE`: **300**: 在存储库之间进行内部克隆的超时时间,单位秒 - `CLONE`: **300**: 在存储库之间进行内部克隆的超时时间,单位秒
- `PULL`: **300**: 在存储库之间进行内部拉取的超时时间,单位秒 - `PULL`: **300**: 在存储库之间进行内部拉取的超时时间,单位秒
- `GC`: **60**: git存储库GC的超时时间单位秒 - `GC`: **60**: git 存储库 GC 的超时时间,单位秒
### Git - 配置选项 (`git.config`) ### Git - 配置选项 (`git.config`)
此部分中的键/值对将用作git配置。 此部分中的键/值对将用作 git 配置。
此部分仅执行“设置”配置从此部分中删除的配置键不会自动从git配置中删除。格式为`some.configKey = value` 此部分仅执行“设置”配置,从此部分中删除的配置键不会自动从 git 配置中删除。格式为`some.configKey = value`
- `diff.algorithm`: **histogram** - `diff.algorithm`: **histogram**
- `core.logAllRefUpdates`: **true** - `core.logAllRefUpdates`: **true**
@@ -1043,31 +1040,31 @@ Gitea 创建以下非唯一队列:
## 指标 (`metrics`) ## 指标 (`metrics`)
- `ENABLED`: **false**: 启用/prometheusmetrics端点。 - `ENABLED`: **false**: 启用/prometheusmetrics 端点。
- `ENABLED_ISSUE_BY_LABEL`: **false**: 启用按标签统计问题,格式为`gitea_issues_by_label{label="bug"} 2` - `ENABLED_ISSUE_BY_LABEL`: **false**: 启用按标签统计问题,格式为`gitea_issues_by_label{label="bug"} 2`
- `ENABLED_ISSUE_BY_REPOSITORY`: **false**: 启用按存储库统计问题,格式为`gitea_issues_by_repository{repository="org/repo"} 5` - `ENABLED_ISSUE_BY_REPOSITORY`: **false**: 启用按存储库统计问题,格式为`gitea_issues_by_repository{repository="org/repo"} 5`
- `TOKEN`: **_empty_**: 如果要在授权中包含指标则需要指定令牌。相同的令牌需要在prometheus参数`bearer_token``bearer_token_file`中使用。 - `TOKEN`: **_empty_**: 如果要在授权中包含指标,则需要指定令牌。相同的令牌需要在 prometheus 参数`bearer_token``bearer_token_file`中使用。
## API (`api`) ## API (`api`)
- `ENABLE_SWAGGER`: **true**: 启用API文档接口 (`/api/swagger`, `/api/v1/swagger`, …). True or false。 - `ENABLE_SWAGGER`: **true**: 启用 API 文档接口 (`/api/swagger`, `/api/v1/swagger`, …). True or false。
- `MAX_RESPONSE_ITEMS`: **50**: API分页的最大单页项目数。 - `MAX_RESPONSE_ITEMS`: **50**: API 分页的最大单页项目数。
- `DEFAULT_PAGING_NUM`: **30**: API分页的默认分页数。 - `DEFAULT_PAGING_NUM`: **30**: API 分页的默认分页数。
- `DEFAULT_GIT_TREES_PER_PAGE`: **1000**: Git trees API的默认单页项目数。 - `DEFAULT_GIT_TREES_PER_PAGE`: **1000**: Git trees API 的默认单页项目数。
- `DEFAULT_MAX_BLOB_SIZE`: **10485760** (10MiB): blobs API的默认最大文件大小。 - `DEFAULT_MAX_BLOB_SIZE`: **10485760** (10MiB): blobs API 的默认最大文件大小。
## OAuth2 (`oauth2`) ## OAuth2 (`oauth2`)
- `ENABLED`: **true**: 启用OAuth2提供者。 - `ENABLED`: **true**: 启用 OAuth2 提供者。
- `ACCESS_TOKEN_EXPIRATION_TIME`**3600**: OAuth2访问令牌的生命周期以秒为单位。 - `ACCESS_TOKEN_EXPIRATION_TIME`**3600**: OAuth2 访问令牌的生命周期,以秒为单位。
- `REFRESH_TOKEN_EXPIRATION_TIME`**730**: OAuth2刷新令牌的生命周期以小时为单位。 - `REFRESH_TOKEN_EXPIRATION_TIME`**730**: OAuth2 刷新令牌的生命周期,以小时为单位。
- `INVALIDATE_REFRESH_TOKENS`**false**: 检查刷新令牌是否已被使用。 - `INVALIDATE_REFRESH_TOKENS`**false**: 检查刷新令牌是否已被使用。
- `JWT_SIGNING_ALGORITHM`**RS256**: 用于签署OAuth2令牌的算法。有效值[`HS256``HS384``HS512``RS256``RS384``RS512``ES256``ES384``ES512`]。 - `JWT_SIGNING_ALGORITHM`**RS256**: 用于签署 OAuth2 令牌的算法。有效值:[`HS256``HS384``HS512``RS256``RS384``RS512``ES256``ES384``ES512`]。
- `JWT_SECRET`**_empty_**: OAuth2访问和刷新令牌的身份验证密钥请将其更改为唯一的字符串。仅当`JWT_SIGNING_ALGORITHM`设置为`HS256``HS384``HS512`时才需要此设置。 - `JWT_SECRET`**_empty_**: OAuth2 访问和刷新令牌的身份验证密钥,请将其更改为唯一的字符串。仅当`JWT_SIGNING_ALGORITHM`设置为`HS256``HS384``HS512`时才需要此设置。
- `JWT_SECRET_URI`**_empty_**: 可以使用此配置选项,而不是在配置中定义`JWT_SECRET`以向Gitea提供包含密钥的文件的路径示例值`file:/etc/gitea/oauth2_jwt_secret`)。 - `JWT_SECRET_URI`**_empty_**: 可以使用此配置选项,而不是在配置中定义`JWT_SECRET`,以向 Gitea 提供包含密钥的文件的路径(示例值:`file:/etc/gitea/oauth2_jwt_secret`)。
- `JWT_SIGNING_PRIVATE_KEY_FILE`**jwt/private.pem**: 用于签署OAuth2令牌的私钥文件路径。路径相对于`APP_DATA_PATH`。仅当`JWT_SIGNING_ALGORITHM`设置为`RS256``RS384``RS512``ES256``ES384``ES512`时才需要此设置。文件必须包含PKCS8格式的RSAECDSA私钥。如果不存在密钥则将为您创建一个4096位密钥。 - `JWT_SIGNING_PRIVATE_KEY_FILE`**jwt/private.pem**: 用于签署 OAuth2 令牌的私钥文件路径。路径相对于`APP_DATA_PATH`。仅当`JWT_SIGNING_ALGORITHM`设置为`RS256``RS384``RS512``ES256``ES384``ES512`时才需要此设置。文件必须包含 PKCS8 格式的 RSAECDSA 私钥。如果不存在密钥,则将为您创建一个 4096 位密钥。
- `MAX_TOKEN_LENGTH`**32767**: 从OAuth2提供者接受的令牌/cookie的最大长度。 - `MAX_TOKEN_LENGTH`**32767**: 从 OAuth2 提供者接受的令牌/cookie 的最大长度。
- `DEFAULT_APPLICATIONS`**git-credential-oauthgit-credential-manager, tea**: 在启动时预注册用于某些服务的OAuth应用程序。有关可用选项列表请参阅[OAuth2文档](/development/oauth2-provider.md)。 - `DEFAULT_APPLICATIONS`**git-credential-oauthgit-credential-manager, tea**: 在启动时预注册用于某些服务的 OAuth 应用程序。有关可用选项列表,请参阅[OAuth2 文档](/development/oauth2-provider.md)。
## i18n (`i18n`) ## i18n (`i18n`)
@@ -1079,9 +1076,9 @@ Gitea 创建以下非唯一队列:
## Markup (`markup`) ## Markup (`markup`)
- `MERMAID_MAX_SOURCE_CHARACTERS`: **5000**: 设置Mermaid源的最大大小。(设为-1代表禁止) - `MERMAID_MAX_SOURCE_CHARACTERS`: **5000**: 设置 Mermaid 源的最大大小。(设为-1 代表禁止)
gitea支持外部渲染工具你可以配置你熟悉的文档渲染工具. 比如一下将新增一个名字为 asciidoc 的渲染工具。 gitea 支持外部渲染工具,你可以配置你熟悉的文档渲染工具. 比如一下将新增一个名字为 asciidoc 的渲染工具。
```ini ```ini
[markup.asciidoc] [markup.asciidoc]
@@ -1093,21 +1090,21 @@ IS_INPUT_FILE = false
``` ```
- ENABLED**false** 设置是否启动渲染器 - ENABLED**false** 设置是否启动渲染器
- NEED_POSTPROCESS**true** 设置为**true**以替换链接/SHA1等。 - NEED_POSTPROCESS**true** 设置为**true**以替换链接/SHA1 等。
- FILE_EXTENSIONS**_empty_** 要由外部命令渲染的文件扩展名列表。多个扩展名需要用逗号分隔。 - FILE*EXTENSIONS\*\*\_empty*\*\* 要由外部命令渲染的文件扩展名列表。多个扩展名需要用逗号分隔。
- RENDER_COMMAND用于渲染所有匹配的扩展名的外部命令。 - RENDER_COMMAND用于渲染所有匹配的扩展名的外部命令。
- IS_INPUT_FILE**false** 输入不是标准输入,而是一个在`RENDER_COMMAND`之后带有文件参数的文件。 - IS_INPUT_FILE**false** 输入不是标准输入,而是一个在`RENDER_COMMAND`之后带有文件参数的文件。
- RENDER_CONTENT_MODE**sanitized** 内容将如何呈现。 - RENDER_CONTENT_MODE**sanitized** 内容将如何呈现。
- sanitized对内容进行清理并在当前页面内呈现默认仅允许一些HTML标签和属性。可以在`[markup.sanitizer.*]`中定义自定义的清理规则。 - sanitized对内容进行清理并在当前页面内呈现默认仅允许一些 HTML 标签和属性。可以在`[markup.sanitizer.*]`中定义自定义的清理规则。
- no-sanitizer禁用清理程序在当前页面内呈现内容。这是**不安全**的如果内容包含恶意代码可能会导致XSS攻击。 - no-sanitizer禁用清理程序在当前页面内呈现内容。这是**不安全**的,如果内容包含恶意代码,可能会导致 XSS 攻击。
- iframe在单独的独立页面中呈现内容并通过iframe嵌入到当前页面中。iframe处于禁用同源策略的沙箱模式并且JS代码与父页面安全隔离。 - iframe在单独的独立页面中呈现内容并通过 iframe 嵌入到当前页面中。iframe 处于禁用同源策略的沙箱模式,并且 JS 代码与父页面安全隔离。
两个特殊的环境变量会传递给渲染命令: 两个特殊的环境变量会传递给渲染命令:
- `GITEA_PREFIX_SRC`,其中包含`src`路径树中的当前URL前缀。用作链接的前缀。 - `GITEA_PREFIX_SRC`,其中包含`src`路径树中的当前 URL 前缀。用作链接的前缀。
- `GITEA_PREFIX_RAW`,其中包含`raw`路径树中的当前URL前缀。用作图像路径的前缀。 - `GITEA_PREFIX_RAW`,其中包含`raw`路径树中的当前 URL 前缀。用作图像路径的前缀。
如果`RENDER_CONTENT_MODE``sanitized`Gitea支持自定义用于呈现的HTML的清理策略。下面的示例将支持来自pandocKaTeX输出。 如果`RENDER_CONTENT_MODE``sanitized`Gitea 支持自定义用于呈现的 HTML 的清理策略。下面的示例将支持来自 pandocKaTeX 输出。
```ini ```ini
[markup.sanitizer.TeX] [markup.sanitizer.TeX]
@@ -1122,18 +1119,18 @@ ALLOW_DATA_URI_IMAGES = true
- `ELEMENT`:此策略适用于的元素。必须非空。 - `ELEMENT`:此策略适用于的元素。必须非空。
- `ALLOW_ATTR`:此策略允许的属性。必须非空。 - `ALLOW_ATTR`:此策略允许的属性。必须非空。
- `REGEXP`:用于匹配属性内容的正则表达式。必须存在,但可以为空,以无条件允许此属性的白名单。 - `REGEXP`:用于匹配属性内容的正则表达式。必须存在,但可以为空,以无条件允许此属性的白名单。
- `ALLOW_DATA_URI_IMAGES`**false** 允许数据URI图像`<img src="data:image/png;base64,..."/>`)。 - `ALLOW_DATA_URI_IMAGES`**false** 允许数据 URI 图像(`<img src="data:image/png;base64,..."/>`)。
可以通过添加唯一的子节来定义多个清理规则,例如`[markup.sanitizer.TeX-2]` 可以通过添加唯一的子节来定义多个清理规则,例如`[markup.sanitizer.TeX-2]`
要仅为指定的外部渲染器应用清理规则,它们必须使用渲染器名称,例如`[markup.sanitizer.asciidoc.rule-1]` 要仅为指定的外部渲染器应用清理规则,它们必须使用渲染器名称,例如`[markup.sanitizer.asciidoc.rule-1]`
如果规则在渲染器ini节之上定义或者名称与渲染器不匹配则应用于每个渲染器。 如果规则在渲染器 ini 节之上定义,或者名称与渲染器不匹配,则应用于每个渲染器。
## 代码高亮映射 (`highlight.mapping`) ## 代码高亮映射 (`highlight.mapping`)
- `file_extension 比如 .toml`: **language 比如 ini**。文件扩展名到语言的映射覆盖。 - `file_extension 比如 .toml`: **language 比如 ini**。文件扩展名到语言的映射覆盖。
- Gitea 将使用 `.gitattributes` 文件中的 `linguist-language``gitlab-language` 属性来对文件进行高亮显示,如果可用。 - Gitea 将使用 `.gitattributes` 文件中的 `linguist-language``gitlab-language` 属性来对文件进行高亮显示,如果可用。
如果未设置此属性或语言不可用,则将查找文件扩展名在此映射中或使用启发式方法来确定文件类型。 如果未设置此属性或语言不可用,则将查找文件扩展名在此映射中或使用启发式方法来确定文件类型。
## 时间 (`time`) ## 时间 (`time`)
@@ -1213,11 +1210,11 @@ ALLOW_DATA_URI_IMAGES = true
- `MINIO_BASE_PATH`**lfs/**: 桶上的 Minio 基本路径,仅在 `STORAGE_TYPE``minio` 时可用。 - `MINIO_BASE_PATH`**lfs/**: 桶上的 Minio 基本路径,仅在 `STORAGE_TYPE``minio` 时可用。
- `MINIO_USE_SSL`**false**: Minio 启用 ssl仅在 `STORAGE_TYPE``minio` 时可用。 - `MINIO_USE_SSL`**false**: Minio 启用 ssl仅在 `STORAGE_TYPE``minio` 时可用。
- `MINIO_INSECURE_SKIP_VERIFY`**false**: Minio 跳过 SSL 验证,仅在 `STORAGE_TYPE``minio` 时可用。 - `MINIO_INSECURE_SKIP_VERIFY`**false**: Minio 跳过 SSL 验证,仅在 `STORAGE_TYPE``minio` 时可用。
- `MINIO_BUCKET_LOOKUP_TYPE`: **auto**: Miniobucket查找方式默认为`auto`模式,可将其设置为`dns`(虚拟托管样式)或`path`(路径样式),仅当`STORAGE_TYPE``minio`时可用。 - `MINIO_BUCKET_LOOKUP_TYPE`: **auto**: Miniobucket 查找方式默认为`auto`模式,可将其设置为`dns`(虚拟托管样式)或`path`(路径样式),仅当`STORAGE_TYPE``minio`时可用。
## 存储 (`storage`) ## 存储 (`storage`)
默认的附件、lfs、头像、仓库头像、仓库归档、软件包、操作日志、artifacts 的存储配置。推荐仅仅配置此 section 并让其它的section 从此配置项继承。 默认的附件、lfs、头像、仓库头像、仓库归档、软件包、操作日志、artifacts 的存储配置。推荐仅仅配置此 section 并让其它的 section 从此配置项继承。
- `STORAGE_TYPE`**local**: 存储类型,`local` 表示本地磁盘,`minio` 表示 S3`azureblob` 表示 azure 对象存储。 - `STORAGE_TYPE`**local**: 存储类型,`local` 表示本地磁盘,`minio` 表示 S3`azureblob` 表示 azure 对象存储。
- `SERVE_DIRECT`**false**: 允许存储驱动程序重定向到经过身份验证的 URL 以直接提供文件。目前,仅支持通过签名的 URL 提供 Minio/S3本地不执行任何操作。 - `SERVE_DIRECT`**false**: 允许存储驱动程序重定向到经过身份验证的 URL 以直接提供文件。目前,仅支持通过签名的 URL 提供 Minio/S3本地不执行任何操作。
@@ -1228,7 +1225,7 @@ ALLOW_DATA_URI_IMAGES = true
- `MINIO_LOCATION`**us-east-1**: 创建桶的 Minio 位置,仅在 `STORAGE_TYPE``minio` 时可用。 - `MINIO_LOCATION`**us-east-1**: 创建桶的 Minio 位置,仅在 `STORAGE_TYPE``minio` 时可用。
- `MINIO_USE_SSL`**false**: Minio 启用 ssl仅在 `STORAGE_TYPE``minio` 时可用。 - `MINIO_USE_SSL`**false**: Minio 启用 ssl仅在 `STORAGE_TYPE``minio` 时可用。
- `MINIO_INSECURE_SKIP_VERIFY`**false**: Minio 跳过 SSL 验证,仅在 `STORAGE_TYPE``minio` 时可用。 - `MINIO_INSECURE_SKIP_VERIFY`**false**: Minio 跳过 SSL 验证,仅在 `STORAGE_TYPE``minio` 时可用。
- `MINIO_BUCKET_LOOKUP_TYPE`: **auto**: Miniobucket查找方式默认为`auto`模式,可将其设置为`dns`(虚拟托管样式)或`path`(路径样式),仅当`STORAGE_TYPE``minio`时可用。 - `MINIO_BUCKET_LOOKUP_TYPE`: **auto**: Miniobucket 查找方式默认为`auto`模式,可将其设置为`dns`(虚拟托管样式)或`path`(路径样式),仅当`STORAGE_TYPE``minio`时可用。
- `AZURE_BLOB_ENDPOINT`: **_empty_**: Azure Blob 终端点,仅在 `STORAGE_TYPE``azureblob` 时可用。例如https://accountname.blob.core.windows.net 或 http://127.0.0.1:10000/devstoreaccount1 - `AZURE_BLOB_ENDPOINT`: **_empty_**: Azure Blob 终端点,仅在 `STORAGE_TYPE``azureblob` 时可用。例如https://accountname.blob.core.windows.net 或 http://127.0.0.1:10000/devstoreaccount1
- `AZURE_BLOB_ACCOUNT_NAME`: **_empty_**: Azure Blob 账号名,仅在 `STORAGE_TYPE``azureblob` 时可用。 - `AZURE_BLOB_ACCOUNT_NAME`: **_empty_**: Azure Blob 账号名,仅在 `STORAGE_TYPE``azureblob` 时可用。
@@ -1311,29 +1308,29 @@ MINIO_BUCKET_LOOKUP_TYPE = auto
存储库归档存储的配置。当将`STORAGE_TYPE`设置为`xxx`时,它将继承默认的 `[storage]``[storage.xxx]` 配置。`PATH`的默认值是`data/repo-archive``MINIO_BASE_PATH`的默认值是`repo-archive/` 存储库归档存储的配置。当将`STORAGE_TYPE`设置为`xxx`时,它将继承默认的 `[storage]``[storage.xxx]` 配置。`PATH`的默认值是`data/repo-archive``MINIO_BASE_PATH`的默认值是`repo-archive/`
- `STORAGE_TYPE`: **local**: 存储类型,`local`表示本地磁盘,`minio`表示与S3兼容的对象存储服务或者使用定义为`[storage.xxx]`的其他名称。 - `STORAGE_TYPE`: **local**: 存储类型,`local`表示本地磁盘,`minio`表示与 S3 兼容的对象存储服务,或者使用定义为`[storage.xxx]`的其他名称。
- `SERVE_DIRECT`: **false**: 允许存储驱动程序重定向到经过身份验证的URL以直接提供文件。目前只有Minio/S3支持通过签名URL本地不执行任何操作。 - `SERVE_DIRECT`: **false**: 允许存储驱动程序重定向到经过身份验证的 URL 以直接提供文件。目前,只有 Minio/S3 支持通过签名 URL本地不执行任何操作。
- `PATH`: **./data/repo-archive**: 用于存储归档文件的位置,仅在`STORAGE_TYPE``local`时可用。 - `PATH`: **./data/repo-archive**: 用于存储归档文件的位置,仅在`STORAGE_TYPE``local`时可用。
- `MINIO_ENDPOINT`: **localhost:9000**: Minio端点仅在`STORAGE_TYPE``minio`时可用。 - `MINIO_ENDPOINT`: **localhost:9000**: Minio 端点,仅在`STORAGE_TYPE``minio`时可用。
- `MINIO_ACCESS_KEY_ID`: MinioaccessKeyID仅在`STORAGE_TYPE``minio`时可用。 - `MINIO_ACCESS_KEY_ID`: MinioaccessKeyID仅在`STORAGE_TYPE``minio`时可用。
- `MINIO_SECRET_ACCESS_KEY`: MiniosecretAccessKey仅在`STORAGE_TYPE``minio`时可用。 - `MINIO_SECRET_ACCESS_KEY`: MiniosecretAccessKey仅在`STORAGE_TYPE``minio`时可用。
- `MINIO_BUCKET`: **gitea**: 用于存储归档的Minio存储桶仅在`STORAGE_TYPE``minio`时可用。 - `MINIO_BUCKET`: **gitea**: 用于存储归档的 Minio 存储桶,仅在`STORAGE_TYPE``minio`时可用。
- `MINIO_LOCATION`: **us-east-1**: 用于创建存储桶的Minio位置仅在`STORAGE_TYPE``minio`时可用。 - `MINIO_LOCATION`: **us-east-1**: 用于创建存储桶的 Minio 位置,仅在`STORAGE_TYPE``minio`时可用。
- `MINIO_BASE_PATH`: **repo-archive/**: 存储桶上的Minio基本路径仅在`STORAGE_TYPE``minio`时可用。 - `MINIO_BASE_PATH`: **repo-archive/**: 存储桶上的 Minio 基本路径,仅在`STORAGE_TYPE``minio`时可用。
- `MINIO_USE_SSL`: **false**: 启用MinioSSL仅在`STORAGE_TYPE``minio`时可用。 - `MINIO_USE_SSL`: **false**: 启用 MinioSSL仅在`STORAGE_TYPE``minio`时可用。
- `MINIO_INSECURE_SKIP_VERIFY`: **false**: 跳过MinioSSL验证仅在`STORAGE_TYPE``minio`时可用。 - `MINIO_INSECURE_SKIP_VERIFY`: **false**: 跳过 MinioSSL 验证,仅在`STORAGE_TYPE``minio`时可用。
- `MINIO_BUCKET_LOOKUP_TYPE`: **auto**: Miniobucket查找方式默认为`auto`模式,可将其设置为`dns`(虚拟托管样式)或`path`(路径样式),仅当`STORAGE_TYPE``minio`时可用。 - `MINIO_BUCKET_LOOKUP_TYPE`: **auto**: Miniobucket 查找方式默认为`auto`模式,可将其设置为`dns`(虚拟托管样式)或`path`(路径样式),仅当`STORAGE_TYPE``minio`时可用。
### 存储库归档 (`repo-archive`) ### 存储库归档 (`repo-archive`)
- `STORAGE_TYPE`: **local**: 存储类型,用于操作日志,`local`表示本地磁盘,`minio`表示与S3兼容的对象存储服务默认为`local`,或者使用定义为`[storage.xxx]`的其他名称。 - `STORAGE_TYPE`: **local**: 存储类型,用于操作日志,`local`表示本地磁盘,`minio`表示与 S3 兼容的对象存储服务,默认为`local`,或者使用定义为`[storage.xxx]`的其他名称。
- `MINIO_BASE_PATH`: **repo-archive/**: Minio存储桶上的基本路径仅在`STORAGE_TYPE``minio`时可用。 - `MINIO_BASE_PATH`: **repo-archive/**: Minio 存储桶上的基本路径,仅在`STORAGE_TYPE``minio`时可用。
## 代理 (`proxy`) ## 代理 (`proxy`)
- `PROXY_ENABLED`: **false**: 启用代理如果为true所有通过HTTP向外部的请求都将受到影响如果为false即使环境设置了http_proxy/https_proxy也不会使用 - `PROXY_ENABLED`: **false**: 启用代理,如果为 true所有通过 HTTP 向外部的请求都将受到影响,如果为 false即使环境设置了 http_proxy/https_proxy 也不会使用
- `PROXY_URL`: **_empty_**: 代理服务器地址,支持 http://, https//, socks://,为空则不启用代理而使用环境变量中的 http_proxy/https_proxy - `PROXY_URL`: **_empty_**: 代理服务器地址,支持 http://, https//, socks://,为空则不启用代理而使用环境变量中的 http_proxy/https_proxy
- `PROXY_HOSTS`: **_empty_**: 逗号分隔的多个需要代理的网址,支持 * 号匹配符号, ** 表示匹配所有网站 - `PROXY_HOSTS`: **_empty_**: 逗号分隔的多个需要代理的网址,支持 \* 号匹配符号, \*\* 表示匹配所有网站
i.e. i.e.
@@ -1347,8 +1344,8 @@ PROXY_HOSTS = *.github.com
- `ENABLED`: **true**: 启用/禁用操作功能 - `ENABLED`: **true**: 启用/禁用操作功能
- `DEFAULT_ACTIONS_URL`: **github**: 获取操作插件的默认平台,`github`表示`https://github.com``self`表示当前的 Gitea 实例。 - `DEFAULT_ACTIONS_URL`: **github**: 获取操作插件的默认平台,`github`表示`https://github.com``self`表示当前的 Gitea 实例。
- `STORAGE_TYPE`: **local**: 用于操作日志的存储类型,`local`表示本地磁盘,`minio`表示与S3兼容的对象存储服务默认为`local`,或者使用定义为`[storage.xxx]`的其他名称。 - `STORAGE_TYPE`: **local**: 用于操作日志的存储类型,`local`表示本地磁盘,`minio`表示与 S3 兼容的对象存储服务,默认为`local`,或者使用定义为`[storage.xxx]`的其他名称。
- `MINIO_BASE_PATH`: **actions_log/**: Minio存储桶上的基本路径仅在`STORAGE_TYPE``minio`时可用。 - `MINIO_BASE_PATH`: **actions_log/**: Minio 存储桶上的基本路径,仅在`STORAGE_TYPE``minio`时可用。
- `LOG_RETENTION_DAYS`: **365**: 日志保留时间(天)。此期限后将删除旧日志。 - `LOG_RETENTION_DAYS`: **365**: 日志保留时间(天)。此期限后将删除旧日志。
- `LOG_COMPRESSION`: **zstd**: 日志压缩方式,`none`表示不压缩,`zstd`表示 zstd 压缩。 - `LOG_COMPRESSION`: **zstd**: 日志压缩方式,`none`表示不压缩,`zstd`表示 zstd 压缩。
其它的压缩方式如`gzip`是不支持的,因为查看日志需要可寻址流。 其它的压缩方式如`gzip`是不支持的,因为查看日志需要可寻址流。
@@ -1376,8 +1373,8 @@ PROXY_HOSTS = *.github.com
## 其他 (`other`) ## 其他 (`other`)
- `SHOW_FOOTER_VERSION`: **true**: 在页面底部显示Gitea的版本。 - `SHOW_FOOTER_VERSION`: **true**: 在页面底部显示 Gitea 的版本。
- `SHOW_FOOTER_TEMPLATE_LOAD_TIME`: **true**: 在页脚显示模板执行的时间。 - `SHOW_FOOTER_TEMPLATE_LOAD_TIME`: **true**: 在页脚显示模板执行的时间。
- `SHOW_FOOTER_POWERED_BY`: **true**: 在页脚显示“由...提供动力”的文本。 - `SHOW_FOOTER_POWERED_BY`: **true**: 在页脚显示“由...提供动力”的文本。
- `ENABLE_SITEMAP`: **true**: 生成sitemap. - `ENABLE_SITEMAP`: **true**: 生成 sitemap.
- `ENABLE_FEED`: **true**: 是否启用RSS/Atom - `ENABLE_FEED`: **true**: 是否启用 RSS/Atom

View File

@@ -5,14 +5,13 @@ sidebar_position: 100
aliases: aliases:
- /zh-cn/customizing-gitea - /zh-cn/customizing-gitea
--- ---
# 自定义 Gitea 配置 # 自定义 Gitea 配置
Gitea 引用 `custom` 目录中的自定义配置文件来覆盖配置、模板等默认配置。 Gitea 引用 `custom` 目录中的自定义配置文件来覆盖配置、模板等默认配置。
如果从二进制部署 Gitea ,则所有默认路径都将相对于该 gitea 二进制文件如果从发行版安装则可能会将这些路径修改为Linux文件系统标准。Gitea 如果从二进制部署 Gitea ,则所有默认路径都将相对于该 gitea 二进制文件;如果从发行版安装,则可能会将这些路径修改为 Linux 文件系统标准。Gitea
将会自动创建包括 `custom/` 在内的必要应用目录,应用本身的配置存放在 将会自动创建包括 `custom/` 在内的必要应用目录,应用本身的配置存放在
`custom/conf/app.ini` 当中。在发行版中可能会以 `/etc/gitea/` 的形式为 `custom` 设置一个符号链接,查看配置详情请移步: `custom/conf/app.ini` 当中。在发行版中可能会以 `/etc/gitea/` 的形式为 `custom` 设置一个符号链接,查看配置详情请移步:
@@ -66,7 +65,7 @@ Gitea 引用 `custom` 目录中的自定义配置文件来覆盖配置、模板
除了 `extra_links.tmpl``extra_tabs.tmpl`,您可以在您的 `custom/templates/custom/` 目录中存放一些其他有用的模板,例如: 除了 `extra_links.tmpl``extra_tabs.tmpl`,您可以在您的 `custom/templates/custom/` 目录中存放一些其他有用的模板,例如:
- `header.tmpl`,在 `<head>` 标记结束之前的模板例如添加自定义CSS文件 - `header.tmpl`,在 `<head>` 标记结束之前的模板,例如添加自定义 CSS 文件
- `body_outer_pre.tmpl`,在 `<body>` 标记开始处的模板 - `body_outer_pre.tmpl`,在 `<body>` 标记开始处的模板
- `body_inner_pre.tmpl`,在顶部导航栏之前,但在主 container 内部的模板,例如添加一个 `<div class="full height">` - `body_inner_pre.tmpl`,在顶部导航栏之前,但在主 container 内部的模板,例如添加一个 `<div class="full height">`
- `body_inner_post.tmpl`,在主 container 结束处的模板 - `body_inner_post.tmpl`,在主 container 结束处的模板

View File

@@ -5,7 +5,6 @@ sidebar_position: 12
aliases: aliases:
- /zh-cn/email-setup - /zh-cn/email-setup
--- ---
# Email 设置 # Email 设置
@@ -16,9 +15,9 @@ Gitea 具有邮件功能,用于发送事务性邮件(例如注册确认邮
使用 `sendmail` 命令作为邮件传输代理mailer 使用 `sendmail` 命令作为邮件传输代理mailer
注意对于在官方Gitea Docker镜像中使用请使用SMTP版本进行配置请参考下一节 注意:对于在官方 Gitea Docker 镜像中使用,请使用 SMTP 版本进行配置(请参考下一节)。
注意:对于面向互联网的网站,请查阅您的 MTA 文档以了解通过TLS发送邮件的说明。同时设置 SPF、DMARC 和 DKIM DNS 记录,以使发送的邮件被各个电子邮件提供商接受为合法邮件。 注意:对于面向互联网的网站,请查阅您的 MTA 文档以了解通过 TLS 发送邮件的说明。同时设置 SPF、DMARC 和 DKIM DNS 记录,以使发送的邮件被各个电子邮件提供商接受为合法邮件。
```ini title="app.ini" ```ini title="app.ini"
[mailer] [mailer]
@@ -55,9 +54,9 @@ PASSWD = `password`
- 通过端口 587 的 STARTTLS也称为 Opportunistic TLS。初始连接是明文的但如果服务器支持则可以升级为 TLS。 - 通过端口 587 的 STARTTLS也称为 Opportunistic TLS。初始连接是明文的但如果服务器支持则可以升级为 TLS。
- 通过默认端口 465 的 SMTPS 连接。连接到服务器从一开始就使用 TLS。 - 通过默认端口 465 的 SMTPS 连接。连接到服务器从一开始就使用 TLS。
- 使用 `PROTOCOL=smtps` 进行强制的 SMTPS 连接。(这两种方式都被称为 Implicit TLS - 使用 `PROTOCOL=smtps` 进行强制的 SMTPS 连接。(这两种方式都被称为 Implicit TLS
这是由于 Go 内部库对 STRIPTLS 攻击的保护机制。 这是由于 Go 内部库对 STRIPTLS 攻击的保护机制。
请注意自2018年起[RFC8314](https://tools.ietf.org/html/rfc8314#section-3) 推荐使用 Implicit TLS。 请注意,自 2018 年起,[RFC8314](https://tools.ietf.org/html/rfc8314#section-3) 推荐使用 Implicit TLS。
### Gmail ### Gmail

View File

@@ -5,7 +5,6 @@ sidebar_position: 10
aliases: aliases:
- /zh-cn/environment-variables - /zh-cn/environment-variables
--- ---
# 环境变量清单 # 环境变量清单
@@ -20,31 +19,31 @@ GITEA_CUSTOM=/home/gitea/custom ./gitea web
因为 Gitea 使用 Go 语言编写,因此它使用了一些相关的 Go 的配置参数: 因为 Gitea 使用 Go 语言编写,因此它使用了一些相关的 Go 的配置参数:
* `GOOS` - `GOOS`
* `GOARCH` - `GOARCH`
* [`GOPATH`](https://go.dev/cmd/go/#hdr-GOPATH_environment_variable) - [`GOPATH`](https://go.dev/cmd/go/#hdr-GOPATH_environment_variable)
您可以在[官方文档](https://go.dev/cmd/go/#hdr-Environment_variables)中查阅这些配置参数的详细信息。 您可以在[官方文档](https://go.dev/cmd/go/#hdr-Environment_variables)中查阅这些配置参数的详细信息。
## Gitea 的文件目录 ## Gitea 的文件目录
* `GITEA_WORK_DIR`:工作目录的绝对路径 - `GITEA_WORK_DIR`:工作目录的绝对路径
* `GITEA_CUSTOM`:默认情况下 Gitea 使用默认目录 `GITEA_WORK_DIR`/custom您可以使用这个参数来配置 *custom* 目录 - `GITEA_CUSTOM`:默认情况下 Gitea 使用默认目录 `GITEA_WORK_DIR`/custom您可以使用这个参数来配置 _custom_ 目录
* `GOGS_WORK_DIR` 已废弃,请使用 `GITEA_WORK_DIR` 替代 - `GOGS_WORK_DIR` 已废弃,请使用 `GITEA_WORK_DIR` 替代
* `GOGS_CUSTOM` 已废弃,请使用 `GITEA_CUSTOM` 替代 - `GOGS_CUSTOM` 已废弃,请使用 `GITEA_CUSTOM` 替代
## 操作系统配置 ## 操作系统配置
* `USER`Gitea 运行时使用的系统用户,它将作为一些 repository 的访问地址的一部分 - `USER`Gitea 运行时使用的系统用户,它将作为一些 repository 的访问地址的一部分
* `USERNAME` 如果没有配置 `USER` Gitea 将使用 `USERNAME` - `USERNAME` 如果没有配置 `USER` Gitea 将使用 `USERNAME`
* `HOME` 用户的 home 目录,在 Windows 中会使用 `USERPROFILE` 环境变量 - `HOME` 用户的 home 目录,在 Windows 中会使用 `USERPROFILE` 环境变量
### 仅限于 Windows 的配置 ### 仅限于 Windows 的配置
* `USERPROFILE` 用户的主目录,如果未配置则会使用 `HOMEDRIVE` + `HOMEPATH` - `USERPROFILE` 用户的主目录,如果未配置则会使用 `HOMEDRIVE` + `HOMEPATH`
* `HOMEDRIVE`: 用于访问 home 目录的主驱动器路径C盘 - `HOMEDRIVE`: 用于访问 home 目录的主驱动器路径C 盘)
* `HOMEPATH`:在指定主驱动器下的 home 目录相对路径 - `HOMEPATH`:在指定主驱动器下的 home 目录相对路径
## Miscellaneous ## Miscellaneous
* `SKIP_MINWINSVC`:如果设置为 1在 Windows 上不会以 service 的形式运行。 - `SKIP_MINWINSVC`:如果设置为 1在 Windows 上不会以 service 的形式运行。

View File

@@ -5,7 +5,6 @@ sidebar_position: 60
aliases: aliases:
- /zh-cn/external-renderers - /zh-cn/external-renderers
--- ---
# 外部渲染器 # 外部渲染器
@@ -171,7 +170,8 @@ ALLOW_DATA_URI_IMAGES = true
.markup.XXXXX body { .markup.XXXXX body {
color: #444; color: #444;
font-family: Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Roman', serif; font-family: Georgia, Palatino, "Palatino Linotype", Times, "Times New Roman",
serif;
font-size: 12px; font-size: 12px;
line-height: 1.7; line-height: 1.7;
padding: 1em; padding: 1em;

View File

@@ -5,7 +5,6 @@ sidebar_position: 16
aliases: aliases:
- /zh-cn/fail2ban-setup - /zh-cn/fail2ban-setup
--- ---
# 设置 Fail2ban # 设置 Fail2ban

View File

@@ -5,7 +5,6 @@ sidebar_position: 12
aliases: aliases:
- /zh-cn/git-lfs-setup - /zh-cn/git-lfs-setup
--- ---
# Git LFS 设置 # Git LFS 设置

View File

@@ -18,7 +18,7 @@ aliases:
目前,以下通知事件使用模板: 目前,以下通知事件使用模板:
| 操作名称 | 用途 | | 操作名称 | 用途 |
| ----------- | ------------------------------------------------------------------------------------------------------------ | | ---------- | ---------------------------------------------------------------------- |
| `new` | 创建了新的工单或合并请求。 | | `new` | 创建了新的工单或合并请求。 |
| `comment` | 在现有工单或合并请求中创建了新的评论。 | | `comment` | 在现有工单或合并请求中创建了新的评论。 |
| `close` | 关闭了工单或合并请求。 | | `close` | 关闭了工单或合并请求。 |
@@ -72,10 +72,10 @@ custom/templates/mail/pull/comment.tmpl
指定 _主题_ 部分是可选的因此也是虚线分隔符。在使用时_主题_ 和 _邮件正文_ 模板之间的分隔符需要至少三个虚线;分隔符行中不允许使用其他字符。 指定 _主题_ 部分是可选的因此也是虚线分隔符。在使用时_主题_ 和 _邮件正文_ 模板之间的分隔符需要至少三个虚线;分隔符行中不允许使用其他字符。
_主题__邮件正文_ 由 [Golang的模板引擎](https://go.dev/pkg/text/template/) 解析,并提供了为每个通知组装的 _元数据上下文_。上下文包含以下元素: _主题__邮件正文_ 由 [Golang 的模板引擎](https://go.dev/pkg/text/template/) 解析,并提供了为每个通知组装的 _元数据上下文_。上下文包含以下元素:
| 名称 | 类型 | 可用性 | 用途 | | 名称 | 类型 | 可用性 | 用途 |
| -------------------- | ------------------ | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ------------------ | ---------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `.FallbackSubject` | string | 始终可用 | 默认主题行。参见下文。 | | `.FallbackSubject` | string | 始终可用 | 默认主题行。参见下文。 |
| `.Subject` | string | 仅在正文中可用 | 解析后的 _主题_。 | | `.Subject` | string | 仅在正文中可用 | 解析后的 _主题_。 |
| `.Body` | string | 始终可用 | 工单、合并请求或评论的消息,从 Markdown 解析为 HTML 并进行了清理。请勿与 _邮件正文_ 混淆。 | | `.Body` | string | 始终可用 | 工单、合并请求或评论的消息,从 Markdown 解析为 HTML 并进行了清理。请勿与 _邮件正文_ 混淆。 |
@@ -107,7 +107,7 @@ _主题_ 和 _邮件正文_ 由 [Golang的模板引擎](https://go.dev/pkg/text/
- 删除所有前导、尾随和多余的空格。 - 删除所有前导、尾随和多余的空格。
- 将字符串截断为前 256 个字母(字符)。 - 将字符串截断为前 256 个字母(字符)。
如果最终结果为空字符串,**或者**没有可用的主题模板即所选模板不包含主题部分将使用Gitea的**内部默认值**。 如果最终结果为空字符串,**或者**没有可用的主题模板(即所选模板不包含主题部分),将使用 Gitea 的**内部默认值**。
内部默认(回退)主题相当于: 内部默认(回退)主题相当于:
@@ -117,7 +117,7 @@ _主题_ 和 _邮件正文_ 由 [Golang的模板引擎](https://go.dev/pkg/text/
例如:`Re: [mike/stuff] New color palette (#38)` 例如:`Re: [mike/stuff] New color palette (#38)`
即使存在有效的主题模板Gitea的默认主题也可以在模板的元数据中作为 `.FallbackSubject` 找到。 即使存在有效的主题模板Gitea 的默认主题也可以在模板的元数据中作为 `.FallbackSubject` 找到。
### 模板中的邮件正文部分 ### 模板中的邮件正文部分
@@ -139,7 +139,7 @@ _主题_ 和 _邮件正文_ 由 [Golang的模板引擎](https://go.dev/pkg/text/
如果模板无法呈现,则只有在发送邮件时才会注意到。 如果模板无法呈现,则只有在发送邮件时才会注意到。
如果主题模板失败,将使用默认主题,如果从 _邮件正文_ 中成功呈现了任何内容,则将使用该内容,忽略其他内容。 如果主题模板失败,将使用默认主题,如果从 _邮件正文_ 中成功呈现了任何内容,则将使用该内容,忽略其他内容。
如果遇到问题,请检查 [Gitea的日志](../administration/logging-config.md) 以获取错误消息。 如果遇到问题,请检查 [Gitea 的日志](../administration/logging-config.md) 以获取错误消息。
## 示例 ## 示例
@@ -221,11 +221,11 @@ _主题_ 和 _邮件正文_ 由 [Golang的模板引擎](https://go.dev/pkg/text/
> >
> #### 消息内容 > #### 消息内容
> >
> \_********************************\_******************************** > \_******\*\*******\*\*\*\*******\*\*******\_******\*\*******\*\*\*\*******\*\*******
> >
> Mike, I think we should tone down the blues a little. > Mike, I think we should tone down the blues a little.
> >
> \_********************************\_******************************** > \_******\*\*******\*\*\*\*******\*\*******\_******\*\*******\*\*\*\*******\*\*******
> >
> [在 Gitea 上查看](#)。 > [在 Gitea 上查看](#)。
@@ -234,7 +234,7 @@ _主题_ 和 _邮件正文_ 由 [Golang的模板引擎](https://go.dev/pkg/text/
模板系统包含一些函数,可用于进一步处理和格式化消息。以下是其中一些函数的列表: 模板系统包含一些函数,可用于进一步处理和格式化消息。以下是其中一些函数的列表:
| 函数名 | 参数 | 可用于 | 用法 | | 函数名 | 参数 | 可用于 | 用法 |
|------------------| ----------- | ------------ | ------------------------------ | | ---------------- | ----------- | ---------- | ------------------------------------------------ |
| `AppUrl` | - | 任何地方 | Gitea 的 URL | | `AppUrl` | - | 任何地方 | Gitea 的 URL |
| `AppName` | - | 任何地方 | 从 `app.ini` 中设置,通常为 "Gitea" | | `AppName` | - | 任何地方 | 从 `app.ini` 中设置,通常为 "Gitea" |
| `AppDomain` | - | 任何地方 | Gitea 的主机名 | | `AppDomain` | - | 任何地方 | Gitea 的主机名 |
@@ -245,8 +245,10 @@ _主题_ 和 _邮件正文_ 由 [Golang的模板引擎](https://go.dev/pkg/text/
这些都是 _函数_,而不是元数据,因此必须按以下方式使用: 这些都是 _函数_,而不是元数据,因此必须按以下方式使用:
```html ```html
像这样使用: {{SanitizeHTML "Escape<my>text"}} 像这样使用: {{SanitizeHTML "Escape<my
或者这样使用: {{"Escape<my>text" | SanitizeHTML}} >text"}} 或者这样使用: {{"Escape<my
或者这样使用: {{AppUrl}} >text" | SanitizeHTML}} 或者这样使用: {{AppUrl}} 但不要像这样使用:
但不要像这样使用: {{.AppUrl}} {{.AppUrl}}</my
></my
>
``` ```

View File

@@ -30,7 +30,7 @@ REPO_INDEXER_EXCLUDE = resources/bin/**
### 按路径选择要索引的文件 ### 按路径选择要索引的文件
Gitea使用 [`gobwas/glob` 库](https://github.com/gobwas/glob) 中的 glob 模式匹配来选择要包含在索引中的文件。 Gitea 使用 [`gobwas/glob` 库](https://github.com/gobwas/glob) 中的 glob 模式匹配来选择要包含在索引中的文件。
限制文件列表可以防止索引被派生或无关的文件(例如 lss、sym、map 等)污染,从而使搜索结果更相关。这还有助于减小索引的大小。 限制文件列表可以防止索引被派生或无关的文件(例如 lss、sym、map 等)污染,从而使搜索结果更相关。这还有助于减小索引的大小。

View File

@@ -229,7 +229,7 @@ git.example.com {
1. 在 IIS 中设置一个空网页,比如命名为 `Gitea Proxy` 1. 在 IIS 中设置一个空网页,比如命名为 `Gitea Proxy`
2. 根据[微软社区中为 IIS 设置 URL 重写的指南](https://techcommunity.microsoft.com/t5/iis-support-blog/setup-iis-with-url-rewrite-as-a-reverse-proxy-for-real-world/ba-p/846222#M343)的前两步进行配置,也就是: 2. 根据[微软社区中为 IIS 设置 URL 重写的指南](https://techcommunity.microsoft.com/t5/iis-support-blog/setup-iis-with-url-rewrite-as-a-reverse-proxy-for-real-world/ba-p/846222#M343)的前两步进行配置,也就是:
- 使用 Microsoft Web Platform Installer 5.1 (WebPI) 安装 Application Request Routing简称ARR或者在 [IIS.net](https://www.iis.net/downloads/microsoft/application-request-routing) 下载这个插件。 - 使用 Microsoft Web Platform Installer 5.1 (WebPI) 安装 Application Request Routing简称 ARR或者在 [IIS.net](https://www.iis.net/downloads/microsoft/application-request-routing) 下载这个插件。
- 一但这个模块被安装到 IIS 上,你将会在 IIS 管理控制台看到一个叫做 URL Rewrite 的新图标。 - 一但这个模块被安装到 IIS 上,你将会在 IIS 管理控制台看到一个叫做 URL Rewrite 的新图标。
- 打开 IIS 管理控制台,在左边的列表中点击 `Gitea Proxy` 网页。在中间选中并且双击 URL Rewrite 的图标来加载 URL 重写的面板。 - 打开 IIS 管理控制台,在左边的列表中点击 `Gitea Proxy` 网页。在中间选中并且双击 URL Rewrite 的图标来加载 URL 重写的面板。
- 在管理控制台的右边选择 `Add Rule` 操作,并且在 `Inbound and Outbound Rules` 分类中选择 `Reverse Proxy Rule` - 在管理控制台的右边选择 `Add Rule` 操作,并且在 `Inbound and Outbound Rules` 分类中选择 `Reverse Proxy Rule`

View File

@@ -22,7 +22,7 @@ User-agent: *
Disallow: / Disallow: /
``` ```
如果您将Gitea安装在子目录中则需要在顶级目录中创建或编辑 `robots.txt` 如果您将 Gitea 安装在子目录中,则需要在顶级目录中创建或编辑 `robots.txt`
```txt ```txt
User-agent: * User-agent: *

View File

@@ -69,7 +69,7 @@ MERGES = pubkey, twofa, basesigned, commitssigned
如果您有自己定制的 Gitea git 配置,您应该将这些配置设置在系统 git 配置文件中(例如 `/etc/gitconfig`)或者 Gitea 的内部 git 配置文件 `{[git].HOME_PATH}/.gitconfig` 中。 如果您有自己定制的 Gitea git 配置,您应该将这些配置设置在系统 git 配置文件中(例如 `/etc/gitconfig`)或者 Gitea 的内部 git 配置文件 `{[git].HOME_PATH}/.gitconfig` 中。
与 git 命令相关的主目录文件(如 `.gnupg`)也应该放在 Gitea 的 git 主目录 `[git].HOME_PATH` 中。 与 git 命令相关的主目录文件(如 `.gnupg`)也应该放在 Gitea 的 git 主目录 `[git].HOME_PATH` 中。
如果您希望将 `.gnupg` 目录放在 `{[git].HOME_PATH}/` 之外的位置,请考虑设置 `$GNUPGHOME` 环境变量为您首选的位置否则Gitea将会从 `{[git].HOME_PATH}/.gnupg` 查找私钥。 如果您希望将 `.gnupg` 目录放在 `{[git].HOME_PATH}/` 之外的位置,请考虑设置 `$GNUPGHOME` 环境变量为您首选的位置,否则 Gitea 将会从 `{[git].HOME_PATH}/.gnupg` 查找私钥。
::: :::
### `INITIAL_COMMIT` ### `INITIAL_COMMIT`

View File

@@ -10,40 +10,40 @@ aliases:
## 背景 ## 背景
Gitea使用Golang作为后端编程语言。它使用了许多第三方包并且自己也编写了一些包。 Gitea 使用 Golang 作为后端编程语言。它使用了许多第三方包,并且自己也编写了一些包。
例如Gitea使用[Chi](https://github.com/go-chi/chi)作为基本的Web框架。[Xorm](https://xorm.io)是一个用于与数据库交互的ORM框架。 例如Gitea 使用[Chi](https://github.com/go-chi/chi)作为基本的 Web 框架。[Xorm](https://xorm.io)是一个用于与数据库交互的 ORM 框架。
因此,管理这些包非常重要。在开始编写后端代码之前,请参考以下准则。 因此,管理这些包非常重要。在开始编写后端代码之前,请参考以下准则。
## 包设计准则 ## 包设计准则
### 包列表 ### 包列表
为了保持易于理解的代码并避免循环依赖拥有良好的代码结构是很重要的。Gitea后端分为以下几个部分 为了保持易于理解的代码并避免循环依赖拥有良好的代码结构是很重要的。Gitea 后端分为以下几个部分:
- `build`帮助构建Gitea的脚本。 - `build`:帮助构建 Gitea 的脚本。
- `cmd`包含所有Gitea的实际子命令包括web、doctor、serv、hooks、admin等。`web`将启动Web服务。`serv``hooks`将被GitOpenSSH调用。其他子命令可以帮助维护Gitea。 - `cmd`:包含所有 Gitea 的实际子命令,包括 web、doctor、serv、hooks、admin 等。`web`将启动 Web 服务。`serv``hooks`将被 GitOpenSSH 调用。其他子命令可以帮助维护 Gitea。
- `tests`:常用的测试函数 - `tests`:常用的测试函数
- `tests/integration`:集成测试,用于测试后端回归。 - `tests/integration`:集成测试,用于测试后端回归。
- `tests/e2e`:端到端测试,用于测试前端和后端的兼容性和视觉回归。 - `tests/e2e`:端到端测试,用于测试前端和后端的兼容性和视觉回归。
- `models`包含由xorm用于构建数据库表的数据结构。它还包含查询和更新数据库的函数。应避免与其他Gitea代码的依赖关系。在某些情况下比如日志记录时可以例外。 - `models`:包含由 xorm 用于构建数据库表的数据结构。它还包含查询和更新数据库的函数。应避免与其他 Gitea 代码的依赖关系。在某些情况下,比如日志记录时可以例外。
- `models/db`:基本的数据库操作。所有其他`models/xxx`包都应依赖于此包。`GetEngine`函数只能从models/中调用。 - `models/db`:基本的数据库操作。所有其他`models/xxx`包都应依赖于此包。`GetEngine`函数只能从 models/中调用。
- `models/fixtures`:单元测试和集成测试中使用的示例数据。一个`yml`文件表示一个将在测试开始时加载到数据库中的表。 - `models/fixtures`:单元测试和集成测试中使用的示例数据。一个`yml`文件表示一个将在测试开始时加载到数据库中的表。
- `models/migrations`存储不同版本之间的数据库迁移。修改数据库结构的PR**必须**包含一个迁移步骤。 - `models/migrations`:存储不同版本之间的数据库迁移。修改数据库结构的 PR**必须**包含一个迁移步骤。
- `modules`在Gitea中处理特定功能的不同模块。工作正在进行中其中一些模块应该移到`services`特别是那些依赖于models的模块因为它们依赖于数据库。 - `modules`:在 Gitea 中处理特定功能的不同模块。工作正在进行中:其中一些模块应该移到`services`中,特别是那些依赖于 models 的模块,因为它们依赖于数据库。
- `modules/setting`存储从ini文件中读取的所有系统配置并在各处引用。但是在可能的情况下应将其作为函数参数使用。 - `modules/setting`:存储从 ini 文件中读取的所有系统配置,并在各处引用。但是在可能的情况下,应将其作为函数参数使用。
- `modules/git`:用于与`Git`命令行或Gogit包交互的包。 - `modules/git`:用于与`Git`命令行或 Gogit 包交互的包。
- `public`编译后的前端文件JavaScript、图像、CSS等 - `public`编译后的前端文件JavaScript、图像、CSS 等)
- `routers`处理服务器请求。由于它使用其他Gitea包来处理请求因此其他包models、modulesservices不能依赖于routers。 - `routers`:处理服务器请求。由于它使用其他 Gitea 包来处理请求因此其他包models、modulesservices不能依赖于 routers。
- `routers/api`:包含`/api/v1`相关路由用于处理RESTful API请求。 - `routers/api`:包含`/api/v1`相关路由,用于处理 RESTful API 请求。
- `routers/install`只能在系统处于安装模式INSTALL_LOCK=false时响应。 - `routers/install`只能在系统处于安装模式INSTALL_LOCK=false时响应。
- `routers/private`:仅由内部子命令调用,特别是`serv``hooks` - `routers/private`:仅由内部子命令调用,特别是`serv``hooks`
- `routers/web`处理来自Web浏览器或Git SMART HTTP协议的HTTP请求。 - `routers/web`:处理来自 Web 浏览器或 Git SMART HTTP 协议的 HTTP 请求。
- `services`:用于常见路由操作或命令执行的支持函数。使用`models``modules`来处理请求。 - `services`:用于常见路由操作或命令执行的支持函数。使用`models``modules`来处理请求。
- `templates`用于生成HTML输出的Golang模板。 - `templates`:用于生成 HTML 输出的 Golang 模板。
### 包依赖关系 ### 包依赖关系
由于Golang不支持导入循环我们必须仔细决定包之间的依赖关系。这些包之间有一些级别。以下是理想的包依赖关系方向。 由于 Golang 不支持导入循环,我们必须仔细决定包之间的依赖关系。这些包之间有一些级别。以下是理想的包依赖关系方向。
`cmd` -> `routers` -> `services` -> `models` -> `modules` `cmd` -> `routers` -> `services` -> `models` -> `modules`
@@ -88,18 +88,18 @@ func UpdateIssue(ctx context.Context, repoID int64) error {
### 导入别名 ### 导入别名
由于有一些使用相同包名的包,例如`modules/user``models/user``services/user`当这些包在一个Go文件中被导入时很难知道我们使用的是哪个包以及它是变量名还是导入名。因此我们始终建议使用导入别名。为了与常见的驼峰命名法的包变量区分开建议使用**snake_case**作为导入别名的命名规则。 由于有一些使用相同包名的包,例如`modules/user``models/user``services/user`,当这些包在一个 Go 文件中被导入时,很难知道我们使用的是哪个包以及它是变量名还是导入名。因此,我们始终建议使用导入别名。为了与常见的驼峰命名法的包变量区分开,建议使用**snake_case**作为导入别名的命名规则。
例如:`import user_service "code.gitea.io/gitea/services/user"` 例如:`import user_service "code.gitea.io/gitea/services/user"`
### 重要注意事项 ### 重要注意事项
- 永远不要写成`x.Update(exemplar)`,而没有明确的`WHERE`子句: - 永远不要写成`x.Update(exemplar)`,而没有明确的`WHERE`子句:
- 这将导致表中的所有行都被使用exemplar的非零值进行更新包括ID。 - 这将导致表中的所有行都被使用 exemplar 的非零值进行更新,包括 ID。
- 通常应该写成`x.ID(id).Update(exemplar)` - 通常应该写成`x.ID(id).Update(exemplar)`
- 如果在迁移过程中使用`x.Insert(exemplar)`向表中插入记录而ID是预设的 - 如果在迁移过程中使用`x.Insert(exemplar)`向表中插入记录,而 ID 是预设的:
- 对于MSSQL变体你将需要执行``SET IDENTITY_INSERT `table` ON``(否则迁移将失败) - 对于 MSSQL 变体,你将需要执行`` SET IDENTITY_INSERT `table` ON ``(否则迁移将失败)
- 对于PostgreSQL你还需要更新ID序列否则迁移将悄无声息地通过但后续的插入将失败 - 对于 PostgreSQL你还需要更新 ID 序列,否则迁移将悄无声息地通过,但后续的插入将失败:
``SELECT setval('table_name_id_seq', COALESCE((SELECT MAX(id)+1 FROM `table_name`), 1), false)`` `` SELECT setval('table_name_id_seq', COALESCE((SELECT MAX(id)+1 FROM `table_name`), 1), false) ``
### 未来的任务 ### 未来的任务

View File

@@ -16,10 +16,10 @@ HTML 页面由[Go HTML Template](https://pkg.go.dev/html/template)渲染。
源文件可以在以下目录中找到: 源文件可以在以下目录中找到:
* **CSS 样式** `web_src/css/` - **CSS 样式** `web_src/css/`
* **JavaScript 文件** `web_src/js/` - **JavaScript 文件** `web_src/js/`
* **Vue 组件** `web_src/js/components/` - **Vue 组件** `web_src/js/components/`
* **Go HTML 模板** `templates/` - **Go HTML 模板** `templates/`
## 通用准则 ## 通用准则
@@ -28,9 +28,9 @@ HTML 页面由[Go HTML Template](https://pkg.go.dev/html/template)渲染。
## Gitea 特定准则 ## Gitea 特定准则
1. 每个功能Fomantic-UI/jQuery 模块)应放在单独的文件/目录中。 1. 每个功能Fomantic-UI/jQuery 模块)应放在单独的文件/目录中。
2. HTML 的 id 和 class 应使用 kebab-case最好包含2-3个与功能相关的关键词。 2. HTML 的 id 和 class 应使用 kebab-case最好包含 2-3 个与功能相关的关键词。
3. 在 JavaScript 中使用的 HTML 的 id 和 class 应在整个项目中是唯一的并且应包含2-3个与功能相关的关键词。建议在仅在 JavaScript 中使用的 class 中使用 `js-` 前缀。 3. 在 JavaScript 中使用的 HTML 的 id 和 class 应在整个项目中是唯一的,并且应包含 2-3 个与功能相关的关键词。建议在仅在 JavaScript 中使用的 class 中使用 `js-` 前缀。
4. 不应覆盖框架提供的 class 的 CSS 样式。始终使用具有2-3个与功能相关的关键词的新 class 名称来覆盖框架样式。Gitea 中的帮助 CSS 类在 `helpers.less` 中。 4. 不应覆盖框架提供的 class 的 CSS 样式。始终使用具有 2-3 个与功能相关的关键词的新 class 名称来覆盖框架样式。Gitea 中的帮助 CSS 类在 `helpers.less` 中。
5. 后端可以通过使用`ctx.PageData["myModuleData"] = map[]{}`将复杂数据传递给前端,但不要将整个模型暴露给前端,以避免泄露敏感数据。 5. 后端可以通过使用`ctx.PageData["myModuleData"] = map[]{}`将复杂数据传递给前端,但不要将整个模型暴露给前端,以避免泄露敏感数据。
6. 简单页面和与 SEO 相关的页面使用 Go HTML 模板渲染生成静态的 Fomantic-UI HTML 输出。复杂页面可以使用 Vue3。 6. 简单页面和与 SEO 相关的页面使用 Go HTML 模板渲染生成静态的 Fomantic-UI HTML 输出。复杂页面可以使用 Vue3。
7. 明确变量类型,优先使用`elem.disabled = true`而不是`elem.setAttribute('disabled', 'anything')`,优先使用`$el.prop('checked', var === 'yes')`而不是`$el.prop('checked', var)` 7. 明确变量类型,优先使用`elem.disabled = true`而不是`elem.setAttribute('disabled', 'anything')`,优先使用`$el.prop('checked', var === 'yes')`而不是`$el.prop('checked', var)`
@@ -39,11 +39,11 @@ HTML 页面由[Go HTML Template](https://pkg.go.dev/html/template)渲染。
10. 避免在一个事件监听器中混合不同的事件,优先为每个事件使用独立的事件监听器。 10. 避免在一个事件监听器中混合不同的事件,优先为每个事件使用独立的事件监听器。
11. 推荐使用自定义事件名称前缀`ce-` 11. 推荐使用自定义事件名称前缀`ce-`
12. 建议使用 Tailwind CSS它可以通过 `tw-` 前缀获得,例如 `tw-relative`. Gitea 自身的助手类 CSS 使用 `gt-` 前缀(`gt-ellipsis`Gitea 自身的私有框架级 CSS 类使用 `g-` 前缀(`g-modal-confirm`)。 12. 建议使用 Tailwind CSS它可以通过 `tw-` 前缀获得,例如 `tw-relative`. Gitea 自身的助手类 CSS 使用 `gt-` 前缀(`gt-ellipsis`Gitea 自身的私有框架级 CSS 类使用 `g-` 前缀(`g-modal-confirm`)。
13. 尽量避免内联脚本和样式建议将JS代码放入JS文件中并使用CSS类。如果内联脚本和样式不可避免请解释无法避免的原因。 13. 尽量避免内联脚本和样式,建议将 JS 代码放入 JS 文件中并使用 CSS 类。如果内联脚本和样式不可避免,请解释无法避免的原因。
### 可访问性 / ARIA ### 可访问性 / ARIA
在历史上Gitea大量使用了可访问性不友好的框架 Fomantic UI。 在历史上Gitea 大量使用了可访问性不友好的框架 Fomantic UI。
Gitea 使用一些补丁使 Fomantic UI 更具可访问性(参见 `aria.md` Gitea 使用一些补丁使 Fomantic UI 更具可访问性(参见 `aria.md`
但仍然存在许多问题需要大量的工作和时间来修复。 但仍然存在许多问题需要大量的工作和时间来修复。
@@ -54,16 +54,16 @@ Gitea 使用一些补丁使 Fomantic UI 更具可访问性(参见 `aria.md`
推荐的实现方式: 推荐的实现方式:
* Vue + Vanilla JS - Vue + Vanilla JS
* Fomantic-UIjQuery - Fomantic-UIjQuery
* htmx (部分页面重新加载其他静态组件) - htmx (部分页面重新加载其他静态组件)
* Vanilla JS - Vanilla JS
不推荐的实现方式: 不推荐的实现方式:
* Vue + Fomantic-UIjQuery - Vue + Fomantic-UIjQuery
* jQuery + Vanilla JS - jQuery + Vanilla JS
* htmx + 任何其他需要大量 JavaScript 代码或不必要的功能,如 htmx 脚本 (`hx-on`) - htmx + 任何其他需要大量 JavaScript 代码或不必要的功能,如 htmx 脚本 (`hx-on`)
为了保持界面一致Vue 组件可以使用 Fomantic-UI 的 CSS 类。 为了保持界面一致Vue 组件可以使用 Fomantic-UI 的 CSS 类。
尽管不建议混合使用不同的框架, 尽管不建议混合使用不同的框架,
@@ -83,7 +83,7 @@ Gitea 使用一些补丁使 Fomantic UI 更具可访问性(参见 `aria.md`
如果我们想在非异步上下文中调用`async`函数, 如果我们想在非异步上下文中调用`async`函数,
建议使用`const _promise = asyncFoo()`来告诉读者 建议使用`const _promise = asyncFoo()`来告诉读者
这是有意为之的我们想调用异步函数并忽略Promise。 这是有意为之的,我们想调用异步函数并忽略 Promise。
一些 lint 规则和 IDE 也会在未处理返回的 Promise 时发出警告。 一些 lint 规则和 IDE 也会在未处理返回的 Promise 时发出警告。
### 获取数据 ### 获取数据
@@ -97,31 +97,41 @@ Gitea 使用一些补丁使 Fomantic UI 更具可访问性(参见 `aria.md`
禁止使用`dataset`,它的驼峰命名行为使得搜索属性变得困难。 禁止使用`dataset`,它的驼峰命名行为使得搜索属性变得困难。
然而,仍然存在一些特殊情况,因此当前的准则是: 然而,仍然存在一些特殊情况,因此当前的准则是:
* 对于旧代码: - 对于旧代码:
* 应将`$.data()`重构为`$.attr()`
* 在极少数情况下,可以使用`$.data()`将一些非字符串数据绑定到元素上,但强烈不推荐使用。
* 对于新代码: - 应将`$.data()`重构为`$.attr()`
* 不应使用`node.dataset`,而应使用`node.getAttribute` - 在极少数情况下,可以使用`$.data()`将一些非字符串数据绑定到元素上,但强烈不推荐使用
* 不要将任何用户数据绑定到 DOM 节点上,使用合适的设计模式描述节点和数据之间的关系。
- 对于新代码:
- 不应使用`node.dataset`,而应使用`node.getAttribute`
- 不要将任何用户数据绑定到 DOM 节点上,使用合适的设计模式描述节点和数据之间的关系。
### 显示/隐藏元素 ### 显示/隐藏元素
* 推荐在Vue组件中使用`v-if``v-show`来显示/隐藏元素。 - 推荐在 Vue 组件中使用`v-if``v-show`来显示/隐藏元素。
* Go 模板代码应使用 `.tw-hidden``showElem()/hideElem()/toggleElem()` 来显示/隐藏元素,请参阅`.tw-hidden`的注释以获取更多详细信息。 - Go 模板代码应使用 `.tw-hidden``showElem()/hideElem()/toggleElem()` 来显示/隐藏元素,请参阅`.tw-hidden`的注释以获取更多详细信息。
### Go HTML 模板中的样式和属性 ### Go HTML 模板中的样式和属性
建议使用以下方式: 建议使用以下方式:
```html ```html
<div class="gt-name1 gt-name2 {{if .IsFoo}}gt-foo{{end}}" {{if .IsFoo}}data-foo{{end}}></div> <div
class="gt-name1 gt-name2 {{if .IsFoo}}gt-foo{{end}}"
{{if
.IsFoo}}data-foo{{end}}
></div>
``` ```
而不是: 而不是:
```html ```html
<div class="gt-name1 gt-name2{{if .IsFoo}} gt-foo{{end}}"{{if .IsFoo}} data-foo{{end}}></div> <div
class="gt-name1 gt-name2{{if .IsFoo}} gt-foo{{end}}"
{{if
.IsFoo}}
data-foo{{end}}
></div>
``` ```
以使代码更易读。 以使代码更易读。
@@ -134,6 +144,6 @@ Gitea 使用一些补丁使 Fomantic UI 更具可访问性(参见 `aria.md`
Gitea 现在正在使用 Vue3。我们决定不引入 JSX以保持 HTML 代码和 JavaScript 代码分离。 Gitea 现在正在使用 Vue3。我们决定不引入 JSX以保持 HTML 代码和 JavaScript 代码分离。
### UI示例 ### UI 示例
Gitea 使用一些自制的 UI 元素并自定义其他元素,以将它们更好地集成到通用 UI 方法中。当在开发模式(`RUN_MODE=dev`)下运行 Gitea 时,在 `http(s)://your-gitea-url:port/devtest` 下会提供一个包含一些标准化 UI 示例的页面。 Gitea 使用一些自制的 UI 元素并自定义其他元素,以将它们更好地集成到通用 UI 方法中。当在开发模式(`RUN_MODE=dev`)下运行 Gitea 时,在 `http(s)://your-gitea-url:port/devtest` 下会提供一个包含一些标准化 UI 示例的页面。

View File

@@ -10,31 +10,31 @@ aliases:
## 背景 ## 背景
自2014年2月12日编写了第一行代码以来Gitea已经发展成为一个庞大的项目。 2014 年 2 月 12 日编写了第一行代码以来Gitea 已经发展成为一个庞大的项目。
因此,代码库变得越来越大。代码库越大,维护就越困难。 因此,代码库变得越来越大。代码库越大,维护就越困难。
存在许多过时的机制,许多框架混合在一起,一些遗留代码可能会导致错误并阻碍新功能的开发。 存在许多过时的机制,许多框架混合在一起,一些遗留代码可能会导致错误并阻碍新功能的开发。
为了使代码库更易于维护使Gitea变得更好开发人员应牢记使用现代机制来重构旧代码。 为了使代码库更易于维护,使 Gitea 变得更好,开发人员应牢记使用现代机制来重构旧代码。
本文档是关于重构代码库的指南集合。 本文档是关于重构代码库的指南集合。
## 重构建议 ## 重构建议
* 设计更多关于未来的内容,而不仅仅解决当前问题。 - 设计更多关于未来的内容,而不仅仅解决当前问题。
* 减少模糊性,减少冲突,提高可维护性。 - 减少模糊性,减少冲突,提高可维护性。
* 描述重构,例如: - 描述重构,例如:
* 为什么需要重构。 - 为什么需要重构。
* 如何解决旧问题。 - 如何解决旧问题。
* 重构的优点/缺点是什么。 - 重构的优点/缺点是什么。
* 只做必要的更改,尽量保留旧逻辑。 - 只做必要的更改,尽量保留旧逻辑。
* 引入一些中间步骤使重构更容易审查完整的重构计划可以在几个PR中完成。 - 引入一些中间步骤,使重构更容易审查,完整的重构计划可以在几个 PR 中完成。
* 如果存在分歧应该请TOC技术监督委员会参与决策。 - 如果存在分歧,应该请 TOC技术监督委员会参与决策。
* 添加必要的测试以确保重构的正确性。 - 添加必要的测试以确保重构的正确性。
* 非错误重构优先在里程碑的开始时进行,这样可以更容易地在发布之前发现问题。 - 非错误重构优先在里程碑的开始时进行,这样可以更容易地在发布之前发现问题。
## 审查和合并建议 ## 审查和合并建议
* 重构的PR不应该长时间保持打开状态通常为7天),应尽快进行审查。 - 重构的 PR 不应该长时间保持打开状态(通常为 7 天),应尽快进行审查。
* 重构的PR应尽快合并不应被其他PR阻塞。 - 重构的 PR 应尽快合并,不应被其他 PR 阻塞。
* 如果TOC没有异议重构的PR可以在7天后由一名核心成员(非作者)批准后合并。 - 如果 TOC 没有异议,重构的 PR 可以在 7 天后由一名核心成员(非作者)批准后合并。
* 如果最终结果良好,容忍一些不完美/临时的步骤。 - 如果最终结果良好,容忍一些不完美/临时的步骤。
* 如果重构是必要的,容忍一些回归错误,并尽快修复错误。 - 如果重构是必要的,容忍一些回归错误,并尽快修复错误。

View File

@@ -8,9 +8,9 @@ aliases:
# 本地化 # 本地化
Gitea的本地化是通过我们的[Crowdin项目](https://crowdin.com/project/gitea)进行的。 Gitea 的本地化是通过我们的[Crowdin 项目](https://crowdin.com/project/gitea)进行的。
对于对**英语翻译**的更改可以发出pull-request来更改[英语语言环境](https://github.com/go-gitea/gitea/blob/main/options/locale/locale_en-US.ini)中合适的关键字。 对于对**英语翻译**的更改,可以发出 pull-request来更改[英语语言环境](https://github.com/go-gitea/gitea/blob/main/options/locale/locale_en-US.ini)中合适的关键字。
有关对**非英语**翻译的更改,请参阅上面的 Crowdin 项目。 有关对**非英语**翻译的更改,请参阅上面的 Crowdin 项目。

View File

@@ -16,7 +16,7 @@ aliases:
## 安装 Golang ## 安装 Golang
您需要 [安装 go]( https://go.dev/doc/install ) 并设置您的 go 环境。 您需要 [安装 go](https://go.dev/doc/install) 并设置您的 go 环境。
接下来,[使用 npm 安装 Node.js](https://nodejs.org/en/download/) ,这是构建 接下来,[使用 npm 安装 Node.js](https://nodejs.org/en/download/) ,这是构建
JavaScript 和 CSS 文件的必要工具。最低支持的 Node.js 版本是 @minNodeVersion@ JavaScript 和 CSS 文件的必要工具。最低支持的 Node.js 版本是 @minNodeVersion@
@@ -24,12 +24,12 @@ JavaScript 和 CSS 文件的必要工具。最低支持的 Node.js 版本是 @mi
**注意** :当执行需要外部工具的 make 任务时,比如 **注意** :当执行需要外部工具的 make 任务时,比如
`make watch-backend`Gitea 会自动下载并构建这些必要的组件。为了能够使用这些,你必须 `make watch-backend`Gitea 会自动下载并构建这些必要的组件。为了能够使用这些,你必须
`"$GOPATH"/bin` 目录加入到可执行路径上。如果你不把go bin目录添加到可执行路径你必须手动 `"$GOPATH"/bin` 目录加入到可执行路径上。如果你不把 go bin 目录添加到可执行路径你必须手动
指定可执行程序路径。 指定可执行程序路径。
**注意2** Go版本 @minGoVersion@ 或更高版本是必须的。Gitea 使用 `gofmt` **注意 2** Go 版本 @minGoVersion@ 或更高版本是必须的。Gitea 使用 `gofmt`
格式化源代码。然而,`gofmt` 的结果可能因 `go` 的版本而有差异。因此推荐安装我们持续集成使用 格式化源代码。然而,`gofmt` 的结果可能因 `go` 的版本而有差异。因此推荐安装我们持续集成使用
的 Go版本。截至上次更新Go 版本应该是 @goVersion@。 的 Go 版本。截至上次更新Go 版本应该是 @goVersion@。
## 安装 Make ## 安装 Make
@@ -55,15 +55,15 @@ sudo yum install make
Make 的这三个发行版都可以在 Windows 上运行: Make 的这三个发行版都可以在 Windows 上运行:
- [单个二进制构建]( http://www.equation.com/servlet/equation.cmd?fa=make )。复制到某处并添加到 `PATH` - [单个二进制构建](http://www.equation.com/servlet/equation.cmd?fa=make)。复制到某处并添加到 `PATH`
- [32 位版本](http://www.equation.com/ftpdir/make/32/make.exe) - [32 位版本](http://www.equation.com/ftpdir/make/32/make.exe)
- [64 位版本](http://www.equation.com/ftpdir/make/64/make.exe) - [64 位版本](http://www.equation.com/ftpdir/make/64/make.exe)
- [MinGW-w64](https://www.mingw-w64.org) / [MSYS2](https://www.msys2.org/)。 - [MinGW-w64](https://www.mingw-w64.org) / [MSYS2](https://www.msys2.org/)。
- MSYS2 是一个工具和库的集合,为您提供一个易于使用的环境来构建、安装和运行本机 Windows 软件,它包括 MinGW-w64。 - MSYS2 是一个工具和库的集合,为您提供一个易于使用的环境来构建、安装和运行本机 Windows 软件,它包括 MinGW-w64。
- 在 MingGW-w64 中,二进制文件称为 `mingw32-make.exe` 而不是 `make.exe`。将 `bin` 文件夹添加到 `PATH` - 在 MingGW-w64 中,二进制文件称为 `mingw32-make.exe` 而不是 `make.exe`。将 `bin` 文件夹添加到 `PATH`
- 在 MSYS2 中,您可以直接使用 `make`。请参阅 [MSYS2 移植](https://www.msys2.org/wiki/Porting/)。 - 在 MSYS2 中,您可以直接使用 `make`。请参阅 [MSYS2 移植](https://www.msys2.org/wiki/Porting/)。
- 要使用 CGO_ENABLED例如SQLite3编译 Gitea您可能需要使用 [tdm-gcc](https://jmeubank.github.io/tdm-gcc/) 而不是 MSYS2 gcc因为 MSYS2 gcc 标头缺少一些 Windows -只有 CRT 函数像 _beginthread 一样。 - 要使用 CGO_ENABLED例如SQLite3编译 Gitea您可能需要使用 [tdm-gcc](https://jmeubank.github.io/tdm-gcc/) 而不是 MSYS2 gcc因为 MSYS2 gcc 标头缺少一些 Windows -只有 CRT 函数像 \_beginthread 一样。
- [Chocolatey包管理器]( https://chocolatey.org/packages/make )。运行`choco install make` - [Chocolatey 包管理器](https://chocolatey.org/packages/make)。运行`choco install make`
**注意** :如果您尝试在 Windows 命令提示符下使用 make 进行构建您可能会遇到问题。建议使用上述提示Git bash 或 MinGW但是如果您只有命令提示符或可能是 PowerShell则可以使用 [set](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/set_1) 命令,例如 `set TAGS=bindata` **注意** :如果您尝试在 Windows 命令提示符下使用 make 进行构建您可能会遇到问题。建议使用上述提示Git bash 或 MinGW但是如果您只有命令提示符或可能是 PowerShell则可以使用 [set](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/set_1) 命令,例如 `set TAGS=bindata`
@@ -75,7 +75,7 @@ Make 的这三个发行版都可以在 Windows 上运行:
git clone https://github.com/go-gitea/gitea git clone https://github.com/go-gitea/gitea
``` ```
自从go modules出现后不再需要构建 go 项目从 `$GOPATH` 中获取,因此不再推荐使用 `go get` 方法。) (自从 go modules 出现后,不再需要构建 go 项目从 `$GOPATH` 中获取,因此不再推荐使用 `go get` 方法。)
## 派生 Gitea ## 派生 Gitea
@@ -196,7 +196,7 @@ SVG 图标是使用 `make svg` 命令构建的,该命令将图标资源编译
### 构建 Logo ### 构建 Logo
Gitea Logo的 PNG 和 SVG 版本是使用 `TAGS="gitea" make generate-images` 目标从单个 SVG 源文件 assets/logo.svg 构建的。要运行它Node.js 和 npm 必须可用。 Gitea Logo 的 PNG 和 SVG 版本是使用 `TAGS="gitea" make generate-images` 目标从单个 SVG 源文件 assets/logo.svg 构建的。要运行它Node.js 和 npm 必须可用。
通过更新 `assets/logo.svg` 并运行 `make generate-images`,同样的过程也可用于从 SVG 源文件生成自定义 Logo PNG。忽略 gitea 编译选项将仅更新用户指定的 LOGO 文件。 通过更新 `assets/logo.svg` 并运行 `make generate-images`,同样的过程也可用于从 SVG 源文件生成自定义 Logo PNG。忽略 gitea 编译选项将仅更新用户指定的 LOGO 文件。
@@ -205,7 +205,7 @@ Gitea Logo的 PNG 和 SVG 版本是使用 `TAGS="gitea" make generate-images`
创建新的 API 路由或修改现有的 API 路由时,您**必须** 创建新的 API 路由或修改现有的 API 路由时,您**必须**
更新和/或创建 [Swagger](https://swagger.io/docs/specification/2-0/what-is-swagger/) 更新和/或创建 [Swagger](https://swagger.io/docs/specification/2-0/what-is-swagger/)
这些使用 [go-swagger](https://goswagger.io/) 评论的文档。 这些使用 [go-swagger](https://goswagger.io/) 评论的文档。
[规范]( https://goswagger.io/use/spec.html#annotation-syntax )中描述了这些注释的结构。 [规范](https://goswagger.io/use/spec.html#annotation-syntax)中描述了这些注释的结构。
如果您想了解更多有关 Swagger 结构的信息,可以查看 如果您想了解更多有关 Swagger 结构的信息,可以查看
[Swagger 2.0 文档](https://swagger.io/docs/specification/2-0/basic-structure/) [Swagger 2.0 文档](https://swagger.io/docs/specification/2-0/basic-structure/)
或与添加新 API 端点的先前 PR 进行比较,例如 [PR #5483](https://github.com/go-gitea/gitea/pull/5843/files#diff-2e0a7b644cf31e1c8ef7d76b444fe3aaR20) 或与添加新 API 端点的先前 PR 进行比较,例如 [PR #5483](https://github.com/go-gitea/gitea/pull/5843/files#diff-2e0a7b644cf31e1c8ef7d76b444fe3aaR20)
@@ -239,7 +239,7 @@ make swagger-check
并到[配置备忘单](../administration/config-cheat-sheet.md) 并到[配置备忘单](../administration/config-cheat-sheet.md)
`docs/content/doc/advanced/config-cheat-sheet.zh-cn.md` 中找到 `docs/content/doc/advanced/config-cheat-sheet.zh-cn.md` 中找到
### 更改Logo ### 更改 Logo
更改 Gitea Logo SVG 时,您将需要运行并提交结果的: 更改 Gitea Logo SVG 时,您将需要运行并提交结果的:
@@ -291,7 +291,7 @@ TAGS="bindata sqlite sqlite_unlock_notify" make build test-sqlite
我们的持续集成将测试代码是否通过了单元测试,并且所有支持的数据库都将在 Docker 环境中通过集成测试。 我们的持续集成将测试代码是否通过了单元测试,并且所有支持的数据库都将在 Docker 环境中通过集成测试。
还将测试从几个最新版本的 Gitea 迁移。 还将测试从几个最新版本的 Gitea 迁移。
请在PR中附带提交适当的单元测试和集成测试。 请在 PR 中附带提交适当的单元测试和集成测试。
## 网站文档 ## 网站文档

View File

@@ -8,7 +8,7 @@ aliases:
# 集成 # 集成
Gitea拥有一个出色的第三方集成社区以及在其他各种项目中的一流支持。 Gitea 拥有一个出色的第三方集成社区,以及在其他各种项目中的一流支持。
我们正在[awesome-gitea](https://gitea.com/gitea/awesome-gitea)上整理一个列表来跟踪这些集成! 我们正在[awesome-gitea](https://gitea.com/gitea/awesome-gitea)上整理一个列表来跟踪这些集成!

View File

@@ -8,24 +8,24 @@ aliases:
# 迁移接口 # 迁移接口
完整迁移功能在Gitea 1.9.0版本中引入。它定义了两个接口用于支持从其他Git托管平台迁移存储库数据到Gitea或者在将来将Gitea数据迁移到其他Git托管平台。 完整迁移功能在 Gitea 1.9.0 版本中引入。它定义了两个接口,用于支持从其他 Git 托管平台迁移存储库数据到 Gitea或者在将来将 Gitea 数据迁移到其他 Git 托管平台。
目前已实现了从GitHub、GitLab和其他Gitea实例的迁移。 目前已实现了从 GitHub、GitLab 和其他 Gitea 实例的迁移。
首先Gitea在包[modules/migration](https://github.com/go-gitea/gitea/tree/main/modules/migration)中定义了一些标准对象。它们是`Repository``Milestone``Release``ReleaseAsset``Label``Issue``Comment``PullRequest``Reaction``Review``ReviewComment` 首先Gitea 在包[modules/migration](https://github.com/go-gitea/gitea/tree/main/modules/migration)中定义了一些标准对象。它们是`Repository``Milestone``Release``ReleaseAsset``Label``Issue``Comment``PullRequest``Reaction``Review``ReviewComment`
## 下载器接口 ## 下载器接口
要从新的Git托管平台迁移需要进行两个步骤的更新。 要从新的 Git 托管平台迁移,需要进行两个步骤的更新。
- 您应该实现一个`Downloader`,用于获取存储库信息。 - 您应该实现一个`Downloader`,用于获取存储库信息。
- 您应该实现一个`DownloaderFactory`用于检测URL是否匹配并创建上述的`Downloader` - 您应该实现一个`DownloaderFactory`,用于检测 URL 是否匹配,并创建上述的`Downloader`
- 您需要在`init()`中通过`RegisterDownloaderFactory`注册`DownloaderFactory` - 您需要在`init()`中通过`RegisterDownloaderFactory`注册`DownloaderFactory`
您可以在[downloader.go](https://github.com/go-gitea/gitea/blob/main/modules/migration/downloader.go)中找到这些接口。 您可以在[downloader.go](https://github.com/go-gitea/gitea/blob/main/modules/migration/downloader.go)中找到这些接口。
## 上传器接口 ## 上传器接口
目前,只实现了`GiteaLocalUploader`因此我们只能通过此Uploader将下载的数据保存到本地的Gitea实例。目前不支持其他上传器。 目前,只实现了`GiteaLocalUploader`,因此我们只能通过此 Uploader 将下载的数据保存到本地的 Gitea 实例。目前不支持其他上传器。
您可以在[uploader.go](https://github.com/go-gitea/gitea/blob/main/modules/migration/uploader.go)中找到这些接口。 您可以在[uploader.go](https://github.com/go-gitea/gitea/blob/main/modules/migration/uploader.go)中找到这些接口。

View File

@@ -34,7 +34,7 @@ Gitea 支持作为 OAuth2 提供者,允许第三方应用程序在用户同意
Gitea 支持以下令牌范围: Gitea 支持以下令牌范围:
| 名称 | 介绍 | | 名称 | 介绍 |
| ---- | ----------- | | ---------------------------------------- | --------------------------------------------------------------- |
| **(no scope)** | 授予对公共用户配置文件和公共存储库的只读访问权限 | | **(no scope)** | 授予对公共用户配置文件和公共存储库的只读访问权限 |
| **repo** | 完全控制所有存储库 | | **repo** | 完全控制所有存储库 |
| &nbsp;&nbsp;&nbsp; **repo:status** | 授予对所有存储库中提交状态的读/写访问权限 | | &nbsp;&nbsp;&nbsp; **repo:status** | 授予对所有存储库中提交状态的读/写访问权限 |

View File

@@ -12,90 +12,90 @@ aliases:
有关更多帮助资源,请查看所有[支持选项](help/support.md)。 有关更多帮助资源,请查看所有[支持选项](help/support.md)。
## 1.x1.x.x下载之间的区别 ## 1.x1.x.x 下载之间的区别
以1.7.x版本为例。 1.7.x 版本为例。
**注意:**此示例也适用于Docker镜像 **注意:**此示例也适用于 Docker 镜像!
在我们的[下载页面](https://dl.gitea.com/gitea/)上您会看到一个1.7目录以及1.7.0、1.7.1、1.7.2、1.7.3、1.7.4、1.7.51.7.6的目录。 在我们的[下载页面](https://dl.gitea.com/gitea/)上,您会看到一个 1.7 目录,以及 1.7.0、1.7.1、1.7.2、1.7.3、1.7.4、1.7.51.7.6 的目录。
1.7目录和1.7.0目录是**不同**的。1.7目录是在每个合并到[`release/v1.7`](https://github.com/go-gitea/gitea/tree/release/v1.7)分支的提交上构建的。 1.7 目录和 1.7.0 目录是**不同**的。1.7 目录是在每个合并到[`release/v1.7`](https://github.com/go-gitea/gitea/tree/release/v1.7)分支的提交上构建的。
然而1.7.0目录是在创建[`v1.7.0`](https://github.com/go-gitea/gitea/releases/tag/v1.7.0)标签时创建的构建。 然而1.7.0 目录是在创建[`v1.7.0`](https://github.com/go-gitea/gitea/releases/tag/v1.7.0)标签时创建的构建。
这意味着1.x的下载会随着提交合并到各自的分支而改变将其视为每个版本的单独的“main”分支 这意味着 1.x 的下载会随着提交合并到各自的分支而改变将其视为每个版本的单独的“main”分支
另一方面1.x.x的下载应该永远不会改变。 另一方面1.x.x 的下载应该永远不会改变。
## 如何从Gogs/GitHub等迁移到Gitea ## 如何从 Gogs/GitHub 等迁移到 Gitea
要从Gogs迁移到Gitea 要从 Gogs 迁移到 Gitea
- [Gogs版本0.11.46.0418](https://github.com/go-gitea/gitea/issues/4286) - [Gogs 版本 0.11.46.0418](https://github.com/go-gitea/gitea/issues/4286)
要从GitHub迁移到Gitea您可以使用Gitea内置的迁移表单。 要从 GitHub 迁移到 Gitea您可以使用 Gitea 内置的迁移表单。
为了迁移诸如问题、拉取请求等项目,您需要至少输入您的用户名。 为了迁移诸如问题、拉取请求等项目,您需要至少输入您的用户名。
[Example (requires login)](https://demo.gitea.com/repo/migrate) [Example (requires login)](https://demo.gitea.com/repo/migrate)
要从GitLab迁移到Gitea您可以使用这个非关联的工具 要从 GitLab 迁移到 Gitea您可以使用这个非关联的工具
https://github.com/loganinak/MigrateGitlabToGogs https://github.com/loganinak/MigrateGitlabToGogs
## Gitea存储文件的位置 ## Gitea 存储文件的位置
- _`AppWorkPath`_ - _`AppWorkPath`_
- `--work-path`标志 - `--work-path`标志
- 或者环境变量`GITEA_WORK_DIR` - 或者环境变量`GITEA_WORK_DIR`
- 或者在构建时设置的内置值 - 或者在构建时设置的内置值
- 或者包含Gitea二进制文件的目录 - 或者包含 Gitea 二进制文件的目录
- `%(APP_DATA_PATH)`(数据库、索引器等的默认路径) - `%(APP_DATA_PATH)`(数据库、索引器等的默认路径)
- `app.ini`中的`APP_DATA_PATH` - `app.ini`中的`APP_DATA_PATH`
- 或者_`AppWorkPath`_`/data` - 或者*`AppWorkPath`*`/data`
- _`CustomPath`_自定义模板 - _`CustomPath`_自定义模板
- `--custom-path`标志 - `--custom-path`标志
- 或者环境变量`GITEA_CUSTOM` - 或者环境变量`GITEA_CUSTOM`
- 或者在构建时设置的内置值 - 或者在构建时设置的内置值
- 或者_`AppWorkPath`_`/custom` - 或者*`AppWorkPath`*`/custom`
- HomeDir - HomeDir
- Unix环境变量`HOME` - Unix环境变量`HOME`
- Windows环境变量`USERPROFILE`,或者环境变量`HOMEDRIVE`+`HOMEPATH` - Windows环境变量`USERPROFILE`,或者环境变量`HOMEDRIVE`+`HOMEPATH`
- RepoRootPath - RepoRootPath
- `app.ini`中\[repository]部分的`ROOT`(如果是绝对路径) - `app.ini`中\[repository]部分的`ROOT`(如果是绝对路径)
- 否则_`AppWorkPath`_`/ROOT`(如果`app.ini`中\[repository]部分的`ROOT`是相对路径) - 否则*`AppWorkPath`*`/ROOT`(如果`app.ini`中\[repository]部分的`ROOT`是相对路径)
- 默认值为`%(APP_DATA_PATH)/gitea-repositories` - 默认值为`%(APP_DATA_PATH)/gitea-repositories`
- INI配置文件 - INI配置文件
- `--config`标志 - `--config`标志
- 或者在构建时设置的可能内置值 - 或者在构建时设置的可能内置值
- 或者 _`CustomPath`_`/conf/app.ini` - 或者 _`CustomPath`_`/conf/app.ini`
- SQLite数据库 - SQLite 数据库
- app.inidatabase部分的PATH - app.inidatabase 部分的 PATH
- 或者`%(APP_DATA_PATH)/gitea.db` - 或者`%(APP_DATA_PATH)/gitea.db`
## 看不到克隆URL或克隆URL不正确 ## 看不到克隆 URL 或克隆 URL 不正确
有几个地方可能会导致显示不正确。 有几个地方可能会导致显示不正确。
1. 如果使用反向代理,请确保按照[反向代理指南](../administration/reverse-proxies.md)中的正确说明进行设置。 1. 如果使用反向代理,请确保按照[反向代理指南](../administration/reverse-proxies.md)中的正确说明进行设置。
2. 确保在`app.ini``server`部分中正确设置了`ROOT_URL` 2. 确保在`app.ini``server`部分中正确设置了`ROOT_URL`
如果某些克隆选项未显示HTTP/SSSH可以在`app.ini中` 如果某些克隆选项未显示HTTP/SSSH可以在`app.ini中`
- `DISABLE_HTTP_GIT`: 如果设为true, 将会没有HTTP/HTTPS链接 - `DISABLE_HTTP_GIT`: 如果设为 true, 将会没有 HTTP/HTTPS 链接
- `DISABLE_SSH`: 如果设为true, 将会没有SSH链接 - `DISABLE_SSH`: 如果设为 true, 将会没有 SSH 链接
- `SSH_EXPOSE_ANONYMOUS`: 如果设为false, SSH链接将会对匿名用户隐藏 - `SSH_EXPOSE_ANONYMOUS`: 如果设为 false, SSH 链接将会对匿名用户隐藏
## 文件上传失败413 Request Entity Too Large ## 文件上传失败413 Request Entity Too Large
当反向代理限制文件上传大小时,会出现此错误。 当反向代理限制文件上传大小时,会出现此错误。
有关使用nginx解决此问题请参阅[反向代理指南](../administration/reverse-proxies.md)。 有关使用 nginx 解决此问题,请参阅[反向代理指南](../administration/reverse-proxies.md)。
## 自定义模板无法加载或运行错误 ## 自定义模板无法加载或运行错误
Gitea的自定义模板必须将其添加到正确的位置否则Gitea将无法找到并使用自定义模板。 Gitea 的自定义模板必须将其添加到正确的位置,否则 Gitea 将无法找到并使用自定义模板。
模板的正确路径应该相对于`CustomPath` 模板的正确路径应该相对于`CustomPath`
@@ -104,35 +104,35 @@ Gitea的自定义模板必须将其添加到正确的位置否则Gitea将无
如果找不到,请尝试`echo $GITEA_CUSTOM` 如果找不到,请尝试`echo $GITEA_CUSTOM`
2. 如果仍然找不到,默认值可以被[计算](faq.md#Gitea存储文件的位置) 2. 如果仍然找不到,默认值可以被[计算](faq.md#Gitea存储文件的位置)
3. 如果仍然找不到路径,则可以参考[自定义Gitea](../administration/customizing-gitea.md)页面,将模板添加到正确的位置。 3. 如果仍然找不到路径,则可以参考[自定义 Gitea](../administration/customizing-gitea.md)页面,将模板添加到正确的位置。
## Gitea是否有"GitHub/GitLab Pages"功能? ## Gitea 是否有"GitHub/GitLab Pages"功能?
Gitea不提供内置的Pages服务器。您需要一个专用的域名来提供静态页面以避免CSRF安全风险。 Gitea 不提供内置的 Pages 服务器。您需要一个专用的域名来提供静态页面,以避免 CSRF 安全风险。
对于简单的用法您可以使用反向代理来重写和提供Gitea的原始文件URL中的静态内容。 对于简单的用法,您可以使用反向代理来重写和提供 Gitea 的原始文件 URL 中的静态内容。
还有一些已经可用的第三方服务,比如独立[pages server](https://codeberg.org/Codeberg/pages-server)的或[caddy plugin](https://github.com/42wim/caddy-gitea),可以提供所需的功能。 还有一些已经可用的第三方服务,比如独立[pages server](https://codeberg.org/Codeberg/pages-server)的或[caddy plugin](https://github.com/42wim/caddy-gitea),可以提供所需的功能。
## 活跃用户与禁止登录用户 ## 活跃用户与禁止登录用户
在Gitea中"活跃用户"是指通过电子邮件激活其帐户的用户。 Gitea 中,"活跃用户"是指通过电子邮件激活其帐户的用户。
"禁止登录用户"是指不允许再登录到Gitea的用户。 "禁止登录用户"是指不允许再登录到 Gitea 的用户。
## 设置日志记录 ## 设置日志记录
- [官方文档](../administration/logging-config.md) - [官方文档](../administration/logging-config.md)
## 什么是Swagger ## 什么是 Swagger
[Swagger](https://swagger.io/) 是Gitea用于其API文档的工具。 [Swagger](https://swagger.io/) 是 Gitea 用于其 API 文档的工具。
所有Gitea实例都有内置的API无法完全禁用它。 所有 Gitea 实例都有内置的 API无法完全禁用它。
但是您可以在app.iniapi部分将ENABLE_SWAGGER设置为false以禁用其文档显示。 但是,您可以在 app.iniapi 部分将 ENABLE_SWAGGER 设置为 false以禁用其文档显示。
有关更多信息请参阅Gitea的[API文档](development/api-usage.md)。 有关更多信息,请参阅 Gitea 的[API 文档](development/api-usage.md)。
您可以在上查看最新的API例如https://gitea.com/api/swagger 您可以在上查看最新的 API例如https://gitea.com/api/swagger
您还可以在上查看`swagger.json`文件的示例 https://gitea.com/swagger.v1.json 您还可以在上查看`swagger.json`文件的示例 https://gitea.com/swagger.v1.json
@@ -143,7 +143,7 @@ Gitea不提供内置的Pages服务器。您需要一个专用的域名来提供
有多种方法可以组合使用来防止垃圾邮件发送者: 有多种方法可以组合使用来防止垃圾邮件发送者:
1. 通过设置电子邮件域名的白名单或黑名单。 1. 通过设置电子邮件域名的白名单或黑名单。
2. 通过设置一些域名或者OpenID白名单见下文 2. 通过设置一些域名或者 OpenID 白名单(见下文)。
3. 在您的`app.ini`中将`ENABLE_CAPTCHA`设置为`true`,并正确配置`RECAPTCHA_SECRET``RECAPTCHA_SITEKEY` 3. 在您的`app.ini`中将`ENABLE_CAPTCHA`设置为`true`,并正确配置`RECAPTCHA_SECRET``RECAPTCHA_SITEKEY`
4.`DISABLE_REGISTRATION`设置为`true`,并通过 [CLI](../administration/command-line.md)、[API](development/api-usage.md) 或 Gitea 的管理界面创建新用户。 4.`DISABLE_REGISTRATION`设置为`true`,并通过 [CLI](../administration/command-line.md)、[API](development/api-usage.md) 或 Gitea 的管理界面创建新用户。
@@ -173,13 +173,13 @@ Gitea不提供内置的Pages服务器。您需要一个专用的域名来提供
使用 [Fail2Ban](../administration/fail2ban-setup.md) 监视并阻止基于日志模式的自动登录尝试或其他恶意行为。 使用 [Fail2Ban](../administration/fail2ban-setup.md) 监视并阻止基于日志模式的自动登录尝试或其他恶意行为。
## SSHD vs 内建SSH ## SSHD vs 内建 SSH
SSHD是大多数Unix系统上内建的SSH服务器。 SSHD 是大多数 Unix 系统上内建的 SSH 服务器。
Gitea还提供了自己的SSH服务器用于在SSHD不可用时使用。 Gitea 还提供了自己的 SSH 服务器,用于在 SSHD 不可用时使用。
## Gitea运行缓慢 ## Gitea 运行缓慢
导致此问题的最常见原因是加载联合头像。 导致此问题的最常见原因是加载联合头像。
@@ -189,21 +189,21 @@ Gitea还提供了自己的SSH服务器用于在SSHD不可用时使用。
## 无法创建仓库/文件 ## 无法创建仓库/文件
请确保Gitea具有足够的权限来写入其主目录和数据目录。 请确保 Gitea 具有足够的权限来写入其主目录和数据目录。
参见[AppDataPath 和 RepoRootPath](faq.md#Gitea存储文件的位置) 参见[AppDataPath 和 RepoRootPath](faq.md#Gitea存储文件的位置)
**适用于Arch用户的注意事项**在撰写本文时Arch软件包的systemd文件包含了以下行 **适用于 Arch 用户的注意事项:**在撰写本文时Arch 软件包的 systemd 文件包含了以下行:
`ReadWritePaths=/etc/gitea/app.ini` `ReadWritePaths=/etc/gitea/app.ini`
这将使得Gitea无法写入其他路径。 这将使得 Gitea 无法写入其他路径。
## 翻译不正确/如何添加更多翻译 ## 翻译不正确/如何添加更多翻译
我们当前的翻译是在我们的[Crowdin项目](https://crowdin.com/project/gitea)上众包进行的 我们当前的翻译是在我们的[Crowdin 项目](https://crowdin.com/project/gitea)上众包进行的
无论您想要更改翻译还是添加新的翻译都需要在Crowdin集成中进行因为所有翻译都会被CI覆盖。 无论您想要更改翻译还是添加新的翻译,都需要在 Crowdin 集成中进行,因为所有翻译都会被 CI 覆盖。
## 推送钩子/ Webhook / Actions 未运行 ## 推送钩子/ Webhook / Actions 未运行
@@ -211,15 +211,15 @@ Gitea还提供了自己的SSH服务器用于在SSHD不可用时使用。
这可能是由于以下原因: 这可能是由于以下原因:
1. Git钩子不同步在站点管理面板上运行“重新同步所有仓库的pre-receive、updatepost-receive钩子” 1. Git 钩子不同步:在站点管理面板上运行“重新同步所有仓库的 pre-receive、updatepost-receive 钩子”
2. Git仓库和钩子存储在一些不支持脚本执行的文件系统上例如由NAS挂载请确保文件系统支持`chmod a+x any-script` 2. Git 仓库(和钩子)存储在一些不支持脚本执行的文件系统上(例如由 NAS 挂载),请确保文件系统支持`chmod a+x any-script`
3. 如果您使用的是Docker请确保Docker Server而不是客户端的版本 >= 20.10.6 3. 如果您使用的是 Docker请确保 Docker Server而不是客户端的版本 >= 20.10.6
## SSH问题 ## SSH 问题
如果无法通过`ssh`访问仓库,但`https`正常工作,请考虑以下情况。 如果无法通过`ssh`访问仓库,但`https`正常工作,请考虑以下情况。
首先请确保您可以通过SSH访问Gitea。 首先,请确保您可以通过 SSH 访问 Gitea。
`ssh git@myremote.example` `ssh git@myremote.example`
@@ -247,16 +247,18 @@ fatal: Could not read from remote repository.
- 在客户端: - 在客户端:
- 确保公钥和私钥已添加到正确的 Gitea 用户。 - 确保公钥和私钥已添加到正确的 Gitea 用户。
- 确保远程 URL 中没有任何问题。特别是,请确保∂ - 确保远程 URL 中没有任何问题。特别是,请确保
Git 用户(@ 之前的部分)的名称拼写正确。 Git 用户(@ 之前的部分)的名称拼写正确。
- 确保客户端机器上的公钥和私钥正确无误。 - 确保客户端机器上的公钥和私钥正确无误。
- 在服务器上: - 在服务器上:
- 确保存储库存在并且命名正确。 - 确保存储库存在并且命名正确。
- 检查系统用户主目录中的 `.ssh` 目录的权限。 - 检查系统用户主目录中的 `.ssh` 目录的权限。
- 验证正确的公钥是否已添加到 `.ssh/authorized_keys` 中。 - 验证正确的公钥是否已添加到 `.ssh/authorized_keys` 中。
尝试在 Gitea 管理面板上运行 尝试在 Gitea 管理面板上运行
`Rewrite '.ssh/authorized_keys' file (for Gitea SSH keys)` `Rewrite '.ssh/authorized_keys' file (for Gitea SSH keys)`
- 查看 Gitea 日志。 - 查看 Gitea 日志。
- 查看 /var/log/auth或类似的文件 - 查看 /var/log/auth或类似的文件
- 检查存储库的权限。 - 检查存储库的权限。
@@ -328,7 +330,9 @@ Gitea 提供了一个子命令`gitea migrate`来初始化数据库,然后您
- 使用[管理 CLI 命令](../administration/command-line.md#admin)。 - 使用[管理 CLI 命令](../administration/command-line.md#admin)。
请注意,大多数命令还需要一个[全局标志](../administration/command-line.md#全局选项)来指向正确的配置。 请注意,大多数命令还需要一个[全局标志](../administration/command-line.md#全局选项)来指向正确的配置。
- 作为**用户**,您可以更改密码... - 作为**用户**,您可以更改密码...
- 在您的账户的`设置 -> 账户`页面(此方法**需要**您知道当前密码)。 - 在您的账户的`设置 -> 账户`页面(此方法**需要**您知道当前密码)。
- 使用`忘记密码`链接。 - 使用`忘记密码`链接。
@@ -338,7 +342,7 @@ Gitea 提供了一个子命令`gitea migrate`来初始化数据库,然后您
在 Gitea 版本 `1.11` 中,我们转换为使用[goldmark](https://github.com/yuin/goldmark)进行 Markdown 渲染,它符合[CommonMark](https://commonmark.org/)标准。 在 Gitea 版本 `1.11` 中,我们转换为使用[goldmark](https://github.com/yuin/goldmark)进行 Markdown 渲染,它符合[CommonMark](https://commonmark.org/)标准。
如果您在版本`1.11`之前的Markdown正常工作但在升级后无法正常工作请仔细阅读CommonMark规范看看问题是由错误还是非兼容的语法引起的。 如果您在版本`1.11`之前的 Markdown 正常工作,但在升级后无法正常工作,请仔细阅读 CommonMark 规范,看看问题是由错误还是非兼容的语法引起的。
如果是后者,通常规范中会列出一种符合标准的替代方法。 如果是后者,通常规范中会列出一种符合标准的替代方法。

View File

@@ -65,5 +65,5 @@ Gitea 可以使用 Golang 的 pprof 处理程序和工具链来收集堆栈跟
2. 重新启动 Gitea 2. 重新启动 Gitea
3. 尝试触发bug当请求卡住一段时间使用或浏览器访问获取堆栈跟踪。 3. 尝试触发 bug当请求卡住一段时间使用或浏览器访问获取堆栈跟踪。
`curl http://127.0.0.1:6060/debug/pprof/goroutine?debug=1` `curl http://127.0.0.1:6060/debug/pprof/goroutine?debug=1`

View File

@@ -14,18 +14,18 @@ aliases:
_表格中的符号含义:_ _表格中的符号含义:_
* _✓ - 支持_ - _✓ - 支持_
* _ - 部分支持_ - _ - 部分支持_
* _✘ - 不支持_ - _✘ - 不支持_
* _⚙ - 由第三方服务或插件支持_ - _⚙ - 由第三方服务或插件支持_
#### 主要特性 #### 主要特性
| 特性 | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE | | 特性 | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
| ------------------------------- | -------------------------------------------------- | ---- | --------- | --------- | --------- | -------------- | ------------ | | -------------------------------- | --------------------------------------------------- | ---- | --------- | --------- | --------- | -------------- | ------------ |
| 开源免费 | ✓ | ✓ | ✘ | ✓ | ✘ | ✘ | ✓ | | 开源免费 | ✓ | ✓ | ✘ | ✓ | ✘ | ✘ | ✓ |
| 低资源开销 (RAM/CPU) | ✓ | ✓ | ✘ | ✘ | ✘ | ✘ | ✘ | | 低资源开销 (RAM/CPU) | ✓ | ✓ | ✘ | ✘ | ✘ | ✘ | ✘ |
| 支持多种数据库 | ✓ | ✓ | ✘ | | | ✓ | ✓ | | 支持多种数据库 | ✓ | ✓ | ✘ | | | ✓ | ✓ |
@@ -50,13 +50,13 @@ _表格中的符号含义:_
| 内置 CI/CD | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ | | 内置 CI/CD | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 子组织:组织内的组织 | [](https://github.com/go-gitea/gitea/issues/1872) | ✘ | ✘ | ✓ | ✓ | ✘ | ✓ | | 子组织:组织内的组织 | [](https://github.com/go-gitea/gitea/issues/1872) | ✘ | ✘ | ✓ | ✓ | ✘ | ✓ |
| 多实例交互 | [/](https://github.com/go-gitea/gitea/issues/18240) | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | | 多实例交互 | [/](https://github.com/go-gitea/gitea/issues/18240) | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
| Markdown绘图 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ | | Markdown 绘图 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| Markdown数学公式 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ | | Markdown 数学公式 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
#### 代码管理 #### 代码管理
| 特性 | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE | | 特性 | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
| ------------------------------------ | --------------------------------------------------- | ---- | --------- | --------- | --------- | --------- | ------------ | | -------------------- | --------------------------------------------------- | ---- | --------- | --------- | --------- | --------- | ------------ |
| 仓库主题描述 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ | | 仓库主题描述 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| 仓库内代码搜索 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ | | 仓库内代码搜索 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 全局代码搜索 | ✓ | ✘ | ✓ | ✘ | ✓ | ✓ | ✓ | | 全局代码搜索 | ✓ | ✘ | ✓ | ✘ | ✓ | ✓ | ✓ |

View File

@@ -187,7 +187,7 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
- `/path/to/postgresql.crt`: 数据库实例证书 - `/path/to/postgresql.crt`: 数据库实例证书
- `/path/to/postgresql.key`: 数据库实例私钥 - `/path/to/postgresql.key`: 数据库实例私钥
- `/path/to/root.crt`: 用于验证客户端证书的CA证书链 - `/path/to/root.crt`: 用于验证客户端证书的 CA 证书链
2. 在 `postgresql.conf` 中添加以下选项: 2. 在 `postgresql.conf` 中添加以下选项:
@@ -206,15 +206,15 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
chmod 0600 /path/to/root.crt /path/to/postgresql.crt /path/to/postgresql.key chmod 0600 /path/to/root.crt /path/to/postgresql.crt /path/to/postgresql.key
``` ```
4. 编辑 `pg_hba.conf` 规则,仅允许 Gitea 数据库用户通过SSL连接并要求客户端证书验证。 4. 编辑 `pg_hba.conf` 规则,仅允许 Gitea 数据库用户通过 SSL 连接,并要求客户端证书验证。
对于PostgreSQL 12 对于 PostgreSQL 12
```ini ```ini
hostssl giteadb gitea 192.0.2.10/32 scram-sha-256 clientcert=verify-full hostssl giteadb gitea 192.0.2.10/32 scram-sha-256 clientcert=verify-full
``` ```
对于PostgreSQL 11及更早版本 对于 PostgreSQL 11 及更早版本:
```ini ```ini
hostssl giteadb gitea 192.0.2.10/32 scram-sha-256 clientcert=1 hostssl giteadb gitea 192.0.2.10/32 scram-sha-256 clientcert=1
@@ -228,7 +228,7 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
- `~/.postgresql/postgresql.crt`: 数据库客户端证书 - `~/.postgresql/postgresql.crt`: 数据库客户端证书
- `~/.postgresql/postgresql.key`: 数据库客户端私钥 - `~/.postgresql/postgresql.key`: 数据库客户端私钥
- `~/.postgresql/root.crt`: 用于验证服务器证书的CA证书链 - `~/.postgresql/root.crt`: 用于验证服务器证书的 CA 证书链
注意:上述文件名在 PostgreSQL 中是硬编码的,无法更改。 注意:上述文件名在 PostgreSQL 中是硬编码的,无法更改。
@@ -249,15 +249,15 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
### MySQL/MariaDB TLS ### MySQL/MariaDB TLS
虽然 Gitea 使用的MySQL驱动程序也支持双向 TLS但目前 Gitea 仅支持单向 TLS。有关详细信息请参见工单10828。 虽然 Gitea 使用的 MySQL 驱动程序也支持双向 TLS但目前 Gitea 仅支持单向 TLS。有关详细信息请参见工单10828。
在单向TLS中数据库客户端在连接握手期间验证服务器发送的证书而服务器则假定连接的客户端是合法的因为不进行客户端证书验证。 在单向 TLS 中,数据库客户端在连接握手期间验证服务器发送的证书,而服务器则假定连接的客户端是合法的,因为不进行客户端证书验证。
1. 在数据库实例上放置以下凭据: 1. 在数据库实例上放置以下凭据:
- `/path/to/mysql.crt`: 数据库实例证书 - `/path/to/mysql.crt`: 数据库实例证书
- `/path/to/mysql.key`: 数据库实例密钥 - `/path/to/mysql.key`: 数据库实例密钥
- `/path/to/ca.crt`: CA证书链。在单向TLS中不使用此文件但用于验证双向TLS中的客户端证书。 - `/path/to/ca.crt`: CA 证书链。在单向 TLS 中不使用此文件,但用于验证双向 TLS 中的客户端证书。
2. 将以下选项添加到 `my.cnf` 2. 将以下选项添加到 `my.cnf`
@@ -276,7 +276,7 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
chmod 0600 /path/to/ca.crt /path/to/mysql.crt /path/to/mysql.key chmod 0600 /path/to/ca.crt /path/to/mysql.crt /path/to/mysql.key
``` ```
4. 重新启动MySQL以应用设置。 4. 重新启动 MySQL 以应用设置。
5. Gitea 的数据库用户可能已经创建过,但只会对运行 Gitea 的服务器的 IP 地址进行身份验证。要对其域名进行身份验证,请重新创建用户,并设置其需要通过 TLS 连接到数据库: 5. Gitea 的数据库用户可能已经创建过,但只会对运行 Gitea 的服务器的 IP 地址进行身份验证。要对其域名进行身份验证,请重新创建用户,并设置其需要通过 TLS 连接到数据库:
@@ -289,9 +289,9 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
根据需要替换数据库用户名、密码和 Gitea 实例域名。 根据需要替换数据库用户名、密码和 Gitea 实例域名。
6. 确保用于验证数据库服务器证书的CA证书链位于数据库和 Gitea 服务器的系统证书存储中。请参考系统文档中有关将 CA 证书添加到证书存储的说明。 6. 确保用于验证数据库服务器证书的 CA 证书链位于数据库和 Gitea 服务器的系统证书存储中。请参考系统文档中有关将 CA 证书添加到证书存储的说明。
7. 在运行Gitea的服务器上测试与数据库的连接 7. 在运行 Gitea 的服务器上,测试与数据库的连接:
``` ```
mysql -u gitea -h example.db -p --ssl mysql -u gitea -h example.db -p --ssl

View File

@@ -35,7 +35,7 @@ chmod +x gitea
## 验证 GPG 签名 ## 验证 GPG 签名
Gitea 对打包的二进制文件使用 [GPG密钥](https://keys.openpgp.org/search?q=teabot%40gitea.io) 签名以防止篡改。 Gitea 对打包的二进制文件使用 [GPG 密钥](https://keys.openpgp.org/search?q=teabot%40gitea.io) 签名以防止篡改。
请根据对应文件名 `.asc` 中包含的校验码检验文件的一致性。 请根据对应文件名 `.asc` 中包含的校验码检验文件的一致性。
```sh ```sh
@@ -166,7 +166,7 @@ GITEA_WORK_DIR=/var/lib/gitea/ /usr/local/bin/gitea web -c /etc/gitea/app.ini
**提示:** 我们不建议使用 SIGKILL 信号(`-9`),这会强制停止 Gitea 程序,但不会正确关闭队列、索引器等任务。 **提示:** 我们不建议使用 SIGKILL 信号(`-9`),这会强制停止 Gitea 程序,但不会正确关闭队列、索引器等任务。
请参阅下面的疑难解答说明以在Gitea版本更新后修复损坏的仓库。 请参阅下面的疑难解答说明,以在 Gitea 版本更新后修复损坏的仓库。
## 排查故障 ## 排查故障

View File

@@ -8,7 +8,7 @@ aliases:
# 使用源代码安装 # 使用源代码安装
你需要 [安装Go](https://golang.google.cn/doc/install) 并正确设置Go环境。特别的建议设置`$GOPATH`环境变量,并将 Go 的二进制目录或目录`${GOPATH//://bin:}/bin`添加到`$PATH`中。请参阅 Go 百科上关于 [GOPATH](https://github.com/golang/go/wiki/GOPATH) 的词条。 你需要 [安装 Go](https://golang.google.cn/doc/install) 并正确设置 Go 环境。特别的,建议设置`$GOPATH`环境变量,并将 Go 的二进制目录或目录`${GOPATH//://bin:}/bin`添加到`$PATH`中。请参阅 Go 百科上关于 [GOPATH](https://github.com/golang/go/wiki/GOPATH) 的词条。
接下来,[安装 Node.js 和 npm](https://nodejs.org/zh-cn/download/) 这是构建 JavaScript 和 CSS 文件所需的。最低支持的 Node.js 版本是 @minNodeVersion@,建议使用最新的 LTS 版本。 接下来,[安装 Node.js 和 npm](https://nodejs.org/zh-cn/download/) 这是构建 JavaScript 和 CSS 文件所需的。最低支持的 Node.js 版本是 @minNodeVersion@,建议使用最新的 LTS 版本。
@@ -33,7 +33,7 @@ git branch -a
git checkout @sourceBranch@ git checkout @sourceBranch@
``` ```
要验证一个拉取请求Pull Request, PR要先启用新的分支其中 `xyz` 是 PR 的 ID例如对于 [#2663](https://github.com/go-gitea/gitea/pull/2663)ID是 `2663 ` 要验证一个拉取请求Pull Request, PR要先启用新的分支其中 `xyz` 是 PR 的 ID例如对于 [#2663](https://github.com/go-gitea/gitea/pull/2663)ID `2663 `
```bash ```bash
git fetch origin pull/xyz/head:pr-xyz git fetch origin pull/xyz/head:pr-xyz
@@ -55,7 +55,7 @@ git checkout @sourceVersion@ # or git checkout pr-xyz
- `node` @minNodeVersion@ 或更高版本,并且安装 `npm`, 请参阅 [这里](https://nodejs.org/zh-cn/download/) - `node` @minNodeVersion@ 或更高版本,并且安装 `npm`, 请参阅 [这里](https://nodejs.org/zh-cn/download/)
- `make`, 请参阅 [这里](development/hacking-on-gitea.md) - `make`, 请参阅 [这里](development/hacking-on-gitea.md)
为了尽可能简化编译过程,提供了各种 [make任务](https://github.com/go-gitea/gitea/blob/main/Makefile)。 为了尽可能简化编译过程,提供了各种 [make 任务](https://github.com/go-gitea/gitea/blob/main/Makefile)。
根据你的构建需求,以下 tags 可以使用: 根据你的构建需求,以下 tags 可以使用:
@@ -103,7 +103,7 @@ Gitea 将从`CustomPath`中查找许多信息。默认的,这会在运行 Gite
尽管在开发时这些值很有用,但可能与下游用户的偏好冲突。 尽管在开发时这些值很有用,但可能与下游用户的偏好冲突。
一种选择是使用脚本文件来隐藏`gitea`二进制文件并在运行Gitea之前创建适当的环境。然而在构建时可以使用`make``LDFLAGS`环境变量来更改这些默认值。适当的设置如下: 一种选择是使用脚本文件来隐藏`gitea`二进制文件,并在运行 Gitea 之前创建适当的环境。然而,在构建时,可以使用`make``LDFLAGS`环境变量来更改这些默认值。适当的设置如下:
- 要设置`CustomPath`,请使用`LDFLAGS="-X \"code.gitea.io/gitea/modules/setting.CustomPath=custom-path\""` - 要设置`CustomPath`,请使用`LDFLAGS="-X \"code.gitea.io/gitea/modules/setting.CustomPath=custom-path\""`
- 对于`CustomConf`,应该使用`-X \"code.gitea.io/gitea/modules/setting.CustomConf=conf.ini\"` - 对于`CustomConf`,应该使用`-X \"code.gitea.io/gitea/modules/setting.CustomConf=conf.ini\"`
@@ -119,7 +119,7 @@ Gitea 将从`CustomPath`中查找许多信息。默认的,这会在运行 Gite
`go`编译器工具链支持将代码交叉编译到不同的目标架构上。请参考[`GOOS`和`GOARCH`环境变量](https://go.dev/doc/install/source#environment) 以获取支持的目标列表。如果您想为性能较弱的系统(如树莓派)构建 Gitea交叉编译非常有用。 `go`编译器工具链支持将代码交叉编译到不同的目标架构上。请参考[`GOOS`和`GOARCH`环境变量](https://go.dev/doc/install/source#environment) 以获取支持的目标列表。如果您想为性能较弱的系统(如树莓派)构建 Gitea交叉编译非常有用。
要使用构建标签(`TAGS`进行交叉编译Gitea您还需要一个 C 交叉编译器,该编译器的目标架构与`GOOS``GOARCH`变量选择的架构相同。例如,要为 Linux ARM64`GOOS=linux``GOARCH=arm64`)进行交叉编译,您需要`aarch64-unknown-linux-gnu-gcc`交叉编译器。这是因为 Gitea 构建标签使用了`cgo`的外部函数接口FFI 要使用构建标签(`TAGS`)进行交叉编译 Gitea您还需要一个 C 交叉编译器,该编译器的目标架构与`GOOS``GOARCH`变量选择的架构相同。例如,要为 Linux ARM64`GOOS=linux``GOARCH=arm64`)进行交叉编译,您需要`aarch64-unknown-linux-gnu-gcc`交叉编译器。这是因为 Gitea 构建标签使用了`cgo`的外部函数接口FFI
在没有任何标签的情况下,交叉编译的 Gitea 为 Linux ARM64 版本: 在没有任何标签的情况下,交叉编译的 Gitea 为 Linux ARM64 版本:
@@ -127,7 +127,7 @@ Gitea 将从`CustomPath`中查找许多信息。默认的,这会在运行 Gite
GOOS=linux GOARCH=arm64 make build GOOS=linux GOARCH=arm64 make build
``` ```
要交叉编译 Linux ARM64 下的Gitea这是推荐的构建标签 要交叉编译 Linux ARM64 下的 Gitea这是推荐的构建标签
``` ```
CC=aarch64-unknown-linux-gnu-gcc GOOS=linux GOARCH=arm64 TAGS="bindata sqlite sqlite_unlock_notify" make build CC=aarch64-unknown-linux-gnu-gcc GOOS=linux GOARCH=arm64 TAGS="bindata sqlite sqlite_unlock_notify" make build
@@ -213,6 +213,6 @@ make build
默认情况下gitea 会为前端文件生成精简的 Source Map 以节省空间。 这可以通过“ENABLE_SOURCEMAP”环境变量进行控制 默认情况下gitea 会为前端文件生成精简的 Source Map 以节省空间。 这可以通过“ENABLE_SOURCEMAP”环境变量进行控制
- `ENABLE_SOURCEMAP=true` 生成所有Source Map这是开发版本的默认设置 - `ENABLE_SOURCEMAP=true` 生成所有 Source Map这是开发版本的默认设置
- `ENABLE_SOURCEMAP=reduced` 生成有限的Source Map这是生产版本的默认设置 - `ENABLE_SOURCEMAP=reduced` 生成有限的 Source Map这是生产版本的默认设置
- `ENABLE_SOURCEMAP=false` 不生成Source Map - `ENABLE_SOURCEMAP=false` 不生成 Source Map

View File

@@ -15,9 +15,9 @@ Cloudron 使得在您的服务器上运行 Gitea并保持其更新和安全
[![Install](/cloudron.svg)](https://cloudron.io/button.html?app=io.gitea.cloudronapp) [![Install](/cloudron.svg)](https://cloudron.io/button.html?app=io.gitea.cloudronapp)
Gitea软件包的维护地址在[这里](https://git.cloudron.io/cloudron/gitea-app). Gitea 软件包的维护地址在[这里](https://git.cloudron.io/cloudron/gitea-app).
这里有一个[demo 实例](https://my.demo.cloudron.io) (用户名: cloudron 密码: cloudron) 您可以在其中尝试运行Gitea。 这里有一个[demo 实例](https://my.demo.cloudron.io) (用户名: cloudron 密码: cloudron) 您可以在其中尝试运行 Gitea。
## Linode ## Linode

View File

@@ -35,7 +35,7 @@ helm install gitea -f values.yaml gitea/gitea
Gitea 附带了一个运行状况检查接口 `/api/healthz`,你可以像这样在 Kubernetes 中配置它: Gitea 附带了一个运行状况检查接口 `/api/healthz`,你可以像这样在 Kubernetes 中配置它:
```yaml ```yaml
livenessProbe: livenessProbe:
httpGet: httpGet:
path: /api/healthz path: /api/healthz
port: http port: http

View File

@@ -6,7 +6,7 @@ aliases:
- /zh-cn/windows-service - /zh-cn/windows-service
--- ---
# 注册为Windows服务 # 注册为 Windows 服务
## 准备工作 ## 准备工作
@@ -29,9 +29,9 @@ COMPUTERNAME 是从命令行中运行 `echo %COMPUTERNAME%` 后得到的响应
PATH = c:/gitea/data/gitea.db PATH = c:/gitea/data/gitea.db
``` ```
## 注册为Windows服务 ## 注册为 Windows 服务
要注册为Windows服务首先以Administrator身份运行 `cmd`,然后执行以下命令: 要注册为 Windows 服务,首先以 Administrator 身份运行 `cmd`,然后执行以下命令:
``` ```
sc.exe create gitea start= auto binPath= "\"C:\gitea\gitea.exe\" web --config \"C:\gitea\custom\conf\app.ini\"" sc.exe create gitea start= auto binPath= "\"C:\gitea\gitea.exe\" web --config \"C:\gitea\custom\conf\app.ini\""
@@ -39,7 +39,7 @@ sc.exe create gitea start= auto binPath= "\"C:\gitea\gitea.exe\" web --config \"
别忘了将 `C:\gitea` 替换成你的 Gitea 安装目录。 别忘了将 `C:\gitea` 替换成你的 Gitea 安装目录。
之后在控制面板打开 "Windows Services",搜索 "gitea",右键选择 "Run"。在浏览器打开 `http://localhost:3000` 就可以访问了。如果你修改了端口请访问对应的端口3000是默认端口 之后在控制面板打开 "Windows Services",搜索 "gitea",右键选择 "Run"。在浏览器打开 `http://localhost:3000` 就可以访问了。如果你修改了端口请访问对应的端口3000 是默认端口)。
### 服务启动类型 ### 服务启动类型
@@ -60,9 +60,9 @@ sc.exe config gitea depend= mariadb
这将确保在 Windows 计算机重新启动时,将延迟自动启动 Gitea直到数据库准备就绪从而减少启动失败的情况。 这将确保在 Windows 计算机重新启动时,将延迟自动启动 Gitea直到数据库准备就绪从而减少启动失败的情况。
## 从Windows服务中删除 ## 从 Windows 服务中删除
以Administrator身份运行 `cmd`,然后执行以下命令: Administrator 身份运行 `cmd`,然后执行以下命令:
``` ```
sc.exe delete gitea sc.exe delete gitea

View File

@@ -45,7 +45,7 @@ services:
- "2222:2222" - "2222:2222"
``` ```
请注意卷应由在配置文件中指定的UID/GID的用户/组所有。默认情况下Docker中的Gitea将使用uid:1000 gid:1000。如果需要您可以使用以下命令设置这些文件夹的所有权 请注意,卷应由在配置文件中指定的 UID/GID 的用户/组所有。默认情况下Docker 中的 Gitea 将使用 uid:1000 gid:1000。如果需要您可以使用以下命令设置这些文件夹的所有权
```sh ```sh
sudo chown 1000:1000 config/ data/ sudo chown 1000:1000 config/ data/
@@ -53,11 +53,11 @@ sudo chown 1000:1000 config/ data/
> 如果未为卷设置正确的权限,容器可能无法启动。 > 如果未为卷设置正确的权限,容器可能无法启动。
对于稳定版本,您可以使用 `:latest-rootless``:1-rootless`,或指定特定的版本,如: `@dockerVersion@-rootless`。如果您想使用最新的开发版本,则可以使用 `:dev-rootless` 标签。如果您想运行发布分支的最新提交,可以使用 `:1.x-dev-rootless` 标签,其中 x是 Gitea 的次要版本号(例如:`1.16-dev-rootless`)。 对于稳定版本,您可以使用 `:latest-rootless``:1-rootless`,或指定特定的版本,如: `@dockerVersion@-rootless`。如果您想使用最新的开发版本,则可以使用 `:dev-rootless` 标签。如果您想运行发布分支的最新提交,可以使用 `:1.x-dev-rootless` 标签,其中 x 是 Gitea 的次要版本号(例如:`1.16-dev-rootless`)。
## 自定义端口 ## 自定义端口
要将集成的SSHWeb服务器绑定到不同的端口请调整端口部分。通常只需更改主机端口并保持容器内的端口不变。 要将集成的 SSHWeb 服务器绑定到不同的端口,请调整端口部分。通常只需更改主机端口并保持容器内的端口不变。
```diff ```diff
version: "2" version: "2"
@@ -258,7 +258,7 @@ docker-compose up -d
除了上述的环境变量外,`app.ini` 中的任何设置都可以通过形式为 `GITEA__SECTION_NAME__KEY_NAME` 的环境变量进行设置或覆盖。这些设置在每次 Docker 容器启动时都会生效。完整信息请参考[这里](https://github.com/go-gitea/gitea/tree/main/contrib/environment-to-ini). 除了上述的环境变量外,`app.ini` 中的任何设置都可以通过形式为 `GITEA__SECTION_NAME__KEY_NAME` 的环境变量进行设置或覆盖。这些设置在每次 Docker 容器启动时都会生效。完整信息请参考[这里](https://github.com/go-gitea/gitea/tree/main/contrib/environment-to-ini).
这些环境变量可以在 `docker-compose.yml` 中传递给 Docker 容器。以下示例将启用 SMTP 邮件服务器,如果主机上设置了所需的环境变量 GITEA__mailer__FROM、GITEA__mailer__HOST、GITEA__mailer__PASSWD或者在与 `docker-compose.yml` 相同目录中的 `.env` 文件中设置了这些环境变量: 这些环境变量可以在 `docker-compose.yml` 中传递给 Docker 容器。以下示例将启用 SMTP 邮件服务器,如果主机上设置了所需的环境变量 GITEA**mailer**FROM、GITEA**mailer**HOST、GITEA**mailer**PASSWD或者在与 `docker-compose.yml` 相同目录中的 `.env` 文件中设置了这些环境变量:
```bash ```bash
... ...

View File

@@ -296,7 +296,7 @@ docker run -it --rm docker.gitea.com/gitea:1 gitea generate secret INTERNAL_TOKE
``` ```
```yaml ```yaml
... ---
services: services:
server: server:
environment: environment:

View File

@@ -5,7 +5,6 @@ slug: "clone-filters"
sidebar_position: 25 sidebar_position: 25
aliases: aliases:
- /zh-cn/clone-filters - /zh-cn/clone-filters
--- ---
# 克隆过滤器 (部分克隆) # 克隆过滤器 (部分克隆)

View File

@@ -5,7 +5,6 @@ slug: "incoming-email"
sidebar_position: 13 sidebar_position: 13
aliases: aliases:
- /zh-cn/incoming-email - /zh-cn/incoming-email
--- ---
# 邮件接收 # 邮件接收

View File

@@ -100,16 +100,13 @@ Gitea 支持两种格式的模板Markdown 和 YAML。
```md ```md
--- ---
name: "Template Name" name: "Template Name"
about: "This template is for testing!" about: "This template is for testing!"
title: "[TEST] " title: "[TEST] "
ref: "main" ref: "main"
labels: labels:
- bug
- bug - "help needed"
- "help needed"
--- ---
This is the template! This is the template!

View File

@@ -90,11 +90,11 @@ aliases:
- `m` - 分钟 - `m` - 分钟
- `h` - 小时 - `h` - 小时
- `d` - 天(相当于8小时) - `d` - 天(相当于 8 小时)
- `w` - 周(相当于5天) - `w` - 周(相当于 5 天)
- `mo` - 月(相当于4周) - `mo` - 月(相当于 4 周)
用于指定时间的数字(`<number>`)也可以是小数,例如 `@1.5h` 表示一小时半。多个时间单位可以结合使用,例如 `@1h10m` 表示1小时10分钟。 用于指定时间的数字(`<number>`)也可以是小数,例如 `@1.5h` 表示一小时半。多个时间单位可以结合使用,例如 `@1h10m` 表示 1 小时 10 分钟。
提交消息示例: 提交消息示例:
@@ -116,7 +116,7 @@ Gitea 支持使用外部工单跟踪器,并可以在合并请求中创建对
下表说明了工单和合并请求的不同类型的交叉引用。在示例中,`User1/Repo1` 指的是使用引用的仓库,而 `UserZ/RepoZ` 表示另一个仓库。 下表说明了工单和合并请求的不同类型的交叉引用。在示例中,`User1/Repo1` 指的是使用引用的仓库,而 `UserZ/RepoZ` 表示另一个仓库。
| 在 User1/Repo1 中的引用 | Repo1 的工单是外部的 | RepoZ 的工单是外部的 | 渲染效果 | | 在 User1/Repo1 中的引用 | Repo1 的工单是外部的 | RepoZ 的工单是外部的 | 渲染效果 |
| ----------------------- | :-------------------: | :-------------------: | ------------------------------------------------ | | ----------------------- | :------------------: | :------------------: | --------------------------------------------- |
| `#1234` | 否 | - | 链接到 `User1/Repo1` 中的工单/合并请求 1234 | | `#1234` | 否 | - | 链接到 `User1/Repo1` 中的工单/合并请求 1234 |
| `!1234` | 否 | - | 链接到 `User1/Repo1` 中的工单/合并请求 1234 | | `!1234` | 否 | - | 链接到 `User1/Repo1` 中的工单/合并请求 1234 |
| `#1234` | 是 | - | 链接到 `User1/Repo1`_外部工单_ 1234 | | `#1234` | 是 | - | 链接到 `User1/Repo1`_外部工单_ 1234 |

View File

@@ -5,7 +5,6 @@ sidebar_position: 15
aliases: aliases:
- /zh-cn/merge-message-templates - /zh-cn/merge-message-templates
--- ---
# 合并消息模板 # 合并消息模板

View File

@@ -15,7 +15,7 @@ Gitea 支持对仓库进行权限管理,这样您就可以为不同的人员
在 Gitea 中,我们将仓库的子模块称为 `单元Unit`。现在我们有以下几个单元。 在 Gitea 中,我们将仓库的子模块称为 `单元Unit`。现在我们有以下几个单元。
| 名称 | 描述 | 权限 | | 名称 | 描述 | 权限 |
| ----------------- | --------------------------------------------------- | ------------ | | -------------- | ---------------------------------- | --------- |
| 代码 | 访问源代码、文件、提交和分支。 | 读取 写入 | | 代码 | 访问源代码、文件、提交和分支。 | 读取 写入 |
| 工单 | 组织缺陷报告、任务和里程碑。 | 读取 写入 | | 工单 | 组织缺陷报告、任务和里程碑。 | 读取 写入 |
| 合并请求 | 启用合并请求和代码审核。 | 读取 写入 | | 合并请求 | 启用合并请求和代码审核。 | 读取 写入 |
@@ -25,13 +25,13 @@ Gitea 支持对仓库进行权限管理,这样您就可以为不同的人员
| 外部工单跟踪器 | 链接到外部工单跟踪器。 | 读取 | | 外部工单跟踪器 | 链接到外部工单跟踪器。 | 读取 |
| 项目 | 模板仓库的 URL。 | 读取 写入 | | 项目 | 模板仓库的 URL。 | 读取 写入 |
| 包 | 链接到仓库 | 读取 写入 | | 包 | 链接到仓库 | 读取 写入 |
| Actions | 审查Actions日志或重启/取消工作流 | 读取 写入 | | Actions | 审查 Actions 日志或重启/取消工作流 | 读取 写入 |
| 设置 | 管理仓库。 | 管理员 | | 设置 | 管理仓库。 | 管理员 |
通过不同的权限,用户可以在这些单元上执行不同的操作。 通过不同的权限,用户可以在这些单元上执行不同的操作。
| 名称 | 读取 | 写入 | 管理员 | | 名称 | 读取 | 写入 | 管理员 |
| ----------------- | -------------------------------------------------- | ------------------------------ | ------------------------- | | -------------- | -------------------------------- | ------------------------------ | -------- |
| 代码 | 查看代码树、文件、提交、分支等。 | 推送代码。 | - | | 代码 | 查看代码树、文件、提交、分支等。 | 推送代码。 | - |
| 工单 | 查看工单并创建新工单。 | 添加标签、分配、关闭工单。 | - | | 工单 | 查看工单并创建新工单。 | 添加标签、分配、关闭工单。 | - |
| 合并请求 | 查看合并请求并创建新合并请求。 | 添加标签、分配、关闭合并请求。 | - | | 合并请求 | 查看合并请求并创建新合并请求。 | 添加标签、分配、关闭合并请求。 | - |
@@ -41,7 +41,7 @@ Gitea 支持对仓库进行权限管理,这样您就可以为不同的人员
| 外部工单跟踪器 | 链接到外部工单跟踪器。 | - | - | | 外部工单跟踪器 | 链接到外部工单跟踪器。 | - | - |
| 项目 | 查看面板。 | 在面板之间移动工单。 | - | | 项目 | 查看面板。 | 在面板之间移动工单。 | - |
| 包 | 查看包 | 上传/删除包 | - | | 包 | 查看包 | 上传/删除包 | - |
| Actions | 查看 Actions日志 | 同意 / 取消 / 重启 | - | | Actions | 查看 Actions 日志 | 同意 / 取消 / 重启 | - |
| 设置 | - | - | 管理仓库 | | 设置 | - | - | 管理仓库 |
个人仓库和组织仓库之间的权限存在一些差异。 个人仓库和组织仓库之间的权限存在一些差异。

View File

@@ -17,15 +17,15 @@ aliases:
要创建合并请求,您需要遵循以下步骤: 要创建合并请求,您需要遵循以下步骤:
1. **Fork 仓库** - 如果您没有直接对仓库进行更改的权限,您需要将仓库 fork 到您自己的账户中。 1. **Fork 仓库** - 如果您没有直接对仓库进行更改的权限,您需要将仓库 fork 到您自己的账户中。
这将创建一个您可以对其进行更改的仓库副本。 这将创建一个您可以对其进行更改的仓库副本。
2. **创建分支(可选)** - 在 fork 的仓库中创建一个新分支,该分支包含您要提出的更改。 2. **创建分支(可选)** - 在 fork 的仓库中创建一个新分支,该分支包含您要提出的更改。
给分支取一个描述性的名称,以指示更改的内容。 给分支取一个描述性的名称,以指示更改的内容。
3. **进行更改** - 进行您想要的更改,提交并将其推送到 fork 的仓库中。 3. **进行更改** - 进行您想要的更改,提交并将其推送到 fork 的仓库中。
4. **创建合并请求** - 转到原始仓库并转到“合并请求”选项卡。单击“新建合并请求”按钮,并将您的新分支选择为源分支。 4. **创建合并请求** - 转到原始仓库并转到“合并请求”选项卡。单击“新建合并请求”按钮,并将您的新分支选择为源分支。
为您的合并请求输入描述性标题和描述,然后单击“创建合并请求”。 为您的合并请求输入描述性标题和描述,然后单击“创建合并请求”。
## 评审合并请求 ## 评审合并请求

View File

@@ -53,7 +53,7 @@ aliases:
要从 Gitea 设置镜像到 GitHub您需要按照以下步骤进行操作 要从 Gitea 设置镜像到 GitHub您需要按照以下步骤进行操作
1. 创建一个具有选中 *public_repo* 选项的 [GitHub 个人访问令牌](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token)。 1. 创建一个具有选中 _public_repo_ 选项的 [GitHub 个人访问令牌](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token)。
2. 在 GitHub 上创建一个同名的仓库。与 Gitea 不同GitHub 不支持通过推送到远程来创建仓库。如果您的现有远程仓库与您的 Gitea 仓库具有相同的提交历史,您也可以使用现有的远程仓库。 2. 在 GitHub 上创建一个同名的仓库。与 Gitea 不同GitHub 不支持通过推送到远程来创建仓库。如果您的现有远程仓库与您的 Gitea 仓库具有相同的提交历史,您也可以使用现有的远程仓库。
3. 在您的 Gitea 仓库设置中,填写**Git 远程仓库 URL**`https://github.com/<your_github_group>/<your_github_project>.git` 3. 在您的 Gitea 仓库设置中,填写**Git 远程仓库 URL**`https://github.com/<your_github_group>/<your_github_project>.git`
4. 使用您的 GitHub 用户名填写**授权**字段,并将个人访问令牌作为**密码**。 4. 使用您的 GitHub 用户名填写**授权**字段,并将个人访问令牌作为**密码**。
@@ -66,7 +66,7 @@ aliases:
要从 Gitea 设置镜像到 GitLab您需要按照以下步骤进行操作 要从 Gitea 设置镜像到 GitLab您需要按照以下步骤进行操作
1. 创建具有 *write_repository* 作用域的 [GitLab 个人访问令牌](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html)。 1. 创建具有 _write_repository_ 作用域的 [GitLab 个人访问令牌](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html)。
2. 填写**Git 远程仓库 URL**`https://<destination host>/<your_gitlab_group_or_name>/<your_gitlab_project>.git` 2. 填写**Git 远程仓库 URL**`https://<destination host>/<your_gitlab_group_or_name>/<your_gitlab_project>.git`
3. 在**授权**字段中填写 `oauth2` 作为**用户名**,并将您的 GitLab 个人访问令牌作为**密码**。 3. 在**授权**字段中填写 `oauth2` 作为**用户名**,并将您的 GitLab 个人访问令牌作为**密码**。
4. 选择**添加推送镜像**以保存配置。 4. 选择**添加推送镜像**以保存配置。
@@ -77,7 +77,7 @@ aliases:
要从 Gitea 设置镜像到 Bitbucket您需要按照以下步骤进行操作 要从 Gitea 设置镜像到 Bitbucket您需要按照以下步骤进行操作
1. 创建一个具有选中 *Repository Write* 选项的 [Bitbucket 应用密码](https://support.atlassian.com/bitbucket-cloud/docs/app-passwords/)。 1. 创建一个具有选中 _Repository Write_ 选项的 [Bitbucket 应用密码](https://support.atlassian.com/bitbucket-cloud/docs/app-passwords/)。
2. 填写**Git 远程仓库 URL**`https://bitbucket.org/<your_bitbucket_group_or_name>/<your_bitbucket_project>.git` 2. 填写**Git 远程仓库 URL**`https://bitbucket.org/<your_bitbucket_group_or_name>/<your_bitbucket_project>.git`
3. 使用您的 Bitbucket 用户名填写**授权**字段,并将应用密码作为**密码**。 3. 使用您的 Bitbucket 用户名填写**授权**字段,并将应用密码作为**密码**。
4. 选择**添加推送镜像**以保存配置。 4. 选择**添加推送镜像**以保存配置。

View File

@@ -43,7 +43,7 @@ a/b/c/d.json
所有变量都必须采用`$VAR``${VAR}`的形式。要转义扩展,使用双重`$$`,例如`$$VAR``$${VAR}` 所有变量都必须采用`$VAR``${VAR}`的形式。要转义扩展,使用双重`$$`,例如`$$VAR``$${VAR}`
| 变量 | 扩展为 | 可转换 | | 变量 | 扩展为 | 可转换 |
| -------------------- | --------------------------------------------------- | ------------- | | -------------------- | ----------------------------- | ------ |
| REPO_NAME | 生成的仓库名称 | ✓ | | REPO_NAME | 生成的仓库名称 | ✓ |
| TEMPLATE_NAME | 模板仓库名称 | ✓ | | TEMPLATE_NAME | 模板仓库名称 | ✓ |
| REPO_DESCRIPTION | 生成的仓库描述 | ✘ | | REPO_DESCRIPTION | 生成的仓库描述 | ✘ |
@@ -66,7 +66,7 @@ Gitea `1.12.0` 添加了一些转换器以应用于上述适用的变量。
`go-sdk` 传递给可用的转换器的效果如下... `go-sdk` 传递给可用的转换器的效果如下...
| 转换器 | 效果 | | 转换器 | 效果 |
| ----------- | ------------ | | ------ | ------ |
| SNAKE | go_sdk | | SNAKE | go_sdk |
| KEBAB | go-sdk | | KEBAB | go-sdk |
| CAMEL | goSdk | | CAMEL | goSdk |

View File

@@ -8,7 +8,7 @@ aliases:
# Webhooks # Webhooks
Gitea支持用于仓库事件的Webhooks。这可以在仓库管理员在设置页面 `/:username/:reponame/settings/hooks` 中进行配置。Webhooks还可以基于组织和整个系统进行配置。 Gitea 支持用于仓库事件的 Webhooks。这可以在仓库管理员在设置页面 `/:username/:reponame/settings/hooks` 中进行配置。Webhooks 还可以基于组织和整个系统进行配置。
所有事件推送都是 POST 请求。目前支持: 所有事件推送都是 POST 请求。目前支持:
- Gitea (也可以是 GET 请求) - Gitea (也可以是 GET 请求)
@@ -26,7 +26,7 @@ Gitea支持用于仓库事件的Webhooks。这可以在仓库管理员在设置
**警告**:自 Gitea 1.13.0 版起payload 中的 `secret` 字段已被弃用,并将在 1.14.0 版中移除https://github.com/go-gitea/gitea/issues/11755 **警告**:自 Gitea 1.13.0 版起payload 中的 `secret` 字段已被弃用,并将在 1.14.0 版中移除https://github.com/go-gitea/gitea/issues/11755
以下是 Gitea 将发送给 payload URL的事件信息示例 以下是 Gitea 将发送给 payload URL 的事件信息示例:
```http ```http
X-GitHub-Delivery: f6266f16-1bf3-46a5-9ea4-602e06ead473 X-GitHub-Delivery: f6266f16-1bf3-46a5-9ea4-602e06ead473
@@ -182,4 +182,4 @@ if (json_last_error() !== JSON_ERROR_NONE) {
### 授权头Authorization header ### 授权头Authorization header
**从1.19版本开始**Gitea 的 Webhook 可以配置为向 Webhook 目标发送一个 [授权头authorization header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization)。 **从 1.19 版本开始**Gitea 的 Webhook 可以配置为向 Webhook 目标发送一个 [授权头authorization header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization)。

View File

@@ -59,7 +59,7 @@ aliases:
- 选项: - 选项:
- `--email`:要删除的用户的电子邮件。 - `--email`:要删除的用户的电子邮件。
- `--username`:要删除的用户的用户名。 - `--username`:要删除的用户的用户名。
- `--id`要删除的用户的ID。 - `--id`:要删除的用户的 ID。
- 必须提供 `--id``--username``--email` 中的一个。如果提供多个,则所有条件必须匹配。 - 必须提供 `--id``--username``--email` 中的一个。如果提供多个,则所有条件必须匹配。
- 示例: - 示例:
- `gitea admin user delete --id 1` - `gitea admin user delete --id 1`
@@ -281,12 +281,12 @@ aliases:
### cert ### cert
生成自签名的SSL证书。将输出到当前目录下的`cert.pem``key.pem`文件中,并且会覆盖任何现有文件。 生成自签名的 SSL 证书。将输出到当前目录下的`cert.pem``key.pem`文件中,并且会覆盖任何现有文件。
- 选项: - 选项:
- `--host value`逗号分隔的主机名和IP地址列表此证书适用于这些主机。支持使用通配符。必填。 - `--host value`:逗号分隔的主机名和 IP 地址列表,此证书适用于这些主机。支持使用通配符。必填。
- `--ecdsa-curve value`用于生成密钥的ECDSA曲线。可选。有效选项为P224、P256、P384、P521。 - `--ecdsa-curve value`:用于生成密钥的 ECDSA 曲线。可选。有效选项为 P224、P256、P384、P521。
- `--rsa-bits value`要生成的RSA密钥的大小。可选。如果设置了--ecdsa-curve则忽略此选项。默认值2048 - `--rsa-bits value`:要生成的 RSA 密钥的大小。可选。如果设置了--ecdsa-curve则忽略此选项。默认值2048
- `--start-date value`:证书的创建日期。可选。(格式:`Jan 1 15:04:05 2011`)。 - `--start-date value`:证书的创建日期。可选。(格式:`Jan 1 15:04:05 2011`)。
- `--duration value`证书有效期。可选。默认值8760h0m0s - `--duration value`证书有效期。可选。默认值8760h0m0s
- `--ca`:如果提供此选项,则证书将生成自己的证书颁发机构。可选。 - `--ca`:如果提供此选项,则证书将生成自己的证书颁发机构。可选。
@@ -295,18 +295,18 @@ aliases:
### dump ### dump
将所有文件和数据库导出到一个zip文件中。输出文件将保存在当前目录下类似于`gitea-dump-1482906742.zip` 将所有文件和数据库导出到一个 zip 文件中。输出文件将保存在当前目录下,类似于`gitea-dump-1482906742.zip`
- 选项: - 选项:
- `--file name``-f name`指定要创建的导出文件的名称。可选。默认值gitea-dump-[timestamp].zip - `--file name``-f name`指定要创建的导出文件的名称。可选。默认值gitea-dump-[timestamp].zip
- `--tempdir path``-t path`:指定临时目录的路径。可选。(默认值:/tmp - `--tempdir path``-t path`:指定临时目录的路径。可选。(默认值:/tmp
- `--skip-repository``-R`:跳过仓库的导出。可选。 - `--skip-repository``-R`:跳过仓库的导出。可选。
- `--skip-custom-dir`:跳过自定义目录的导出。可选。 - `--skip-custom-dir`:跳过自定义目录的导出。可选。
- `--skip-lfs-data`跳过LFS数据的导出。可选。 - `--skip-lfs-data`:跳过 LFS 数据的导出。可选。
- `--skip-attachment-data`:跳过附件数据的导出。可选。 - `--skip-attachment-data`:跳过附件数据的导出。可选。
- `--skip-package-data`:跳过包数据的导出。可选。 - `--skip-package-data`:跳过包数据的导出。可选。
- `--skip-log`:跳过日志数据的导出。可选。 - `--skip-log`:跳过日志数据的导出。可选。
- `--database``-d`指定数据库的SQL语法。可选。 - `--database``-d`:指定数据库的 SQL 语法。可选。
- `--verbose``-V`:如果提供此选项,显示附加详细信息。可选。 - `--verbose``-V`:如果提供此选项,显示附加详细信息。可选。
- `--type`设置导出的格式。可选。默认值zip - `--type`设置导出的格式。可选。默认值zip
- 示例: - 示例:
@@ -409,19 +409,19 @@ gitea doctor recreate-table
- 命令: - 命令:
- `shutdown`: 优雅地关闭运行中的进程 - `shutdown`: 优雅地关闭运行中的进程
- `restart`: 优雅地重新启动运行中的进程对于Windows服务器尚未实现 - `restart`: 优雅地重新启动运行中的进程(对于 Windows 服务器尚未实现)
- `flush-queues`: 刷新运行中的进程中的队列 - `flush-queues`: 刷新运行中的进程中的队列
- 选项: - 选项:
- `--timeout value`: 刷新过程的超时时间(默认值: 1m0s - `--timeout value`: 刷新过程的超时时间(默认值: 1m0s
- `--non-blocking`: 设置为true以在返回之前不等待刷新完成 - `--non-blocking`: 设置为 true以在返回之前不等待刷新完成
- `logging`: 调整日志命令 - `logging`: 调整日志命令
- 命令: - 命令:
- `pause`: 暂停日志记录 - `pause`: 暂停日志记录
- 注意: - 注意:
- 如果日志级别低于此级别日志级别将被临时提升为INFO。 - 如果日志级别低于此级别,日志级别将被临时提升为 INFO。
- Gitea将在一定程度上缓冲日志并在超过该点后丢弃日志。 - Gitea 将在一定程度上缓冲日志,并在超过该点后丢弃日志。
- `resume`: 恢复日志记录 - `resume`: 恢复日志记录
- `release-and-reopen`: 使Gitea释放和重新打开用于日志记录的文件和连接相当于向Gitea发送SIGUSR1信号 - `release-and-reopen`: 使 Gitea 释放和重新打开用于日志记录的文件和连接(相当于向 Gitea 发送 SIGUSR1 信号)。
- `remove name`: 删除指定的日志记录器 - `remove name`: 删除指定的日志记录器
- 选项: - 选项:
- `--group group`, `-g group`: 从中删除子记录器的组(默认为`default` - `--group group`, `-g group`: 从中删除子记录器的组(默认为`default`
@@ -437,7 +437,7 @@ gitea doctor recreate-table
- `--expression value`, `-e value`: 日志记录器的匹配表达式 - `--expression value`, `-e value`: 日志记录器的匹配表达式
- `--prefix value`, `-p value`: 日志记录器的前缀 - `--prefix value`, `-p value`: 日志记录器的前缀
- `--color`: 在日志中使用颜色 - `--color`: 在日志中使用颜色
- `--stderr`: 将控制台日志输出到stderr - 仅适用于控制台 - `--stderr`: 将控制台日志输出到 stderr - 仅适用于控制台
- `file`: 添加文件日志记录器 - `file`: 添加文件日志记录器
- 选项: - 选项:
- `--group value`, `-g value`: 要添加日志记录器的组 - 默认为"default" - `--group value`, `-g value`: 要添加日志记录器的组 - 默认为"default"
@@ -467,9 +467,9 @@ gitea doctor recreate-table
- `--color`: 在日志中使用颜色 - `--color`: 在日志中使用颜色
- `--reconnect-on-message`, `-R`: 对于每个消息重新连接主机 - `--reconnect-on-message`, `-R`: 对于每个消息重新连接主机
- `--reconnect`, `-r`: 连接中断时重新连接主机 - `--reconnect`, `-r`: 连接中断时重新连接主机
- `--protocol value`, `-P value`: 设置要使用的协议tcp、unixudp默认为tcp - `--protocol value`, `-P value`: 设置要使用的协议tcp、unixudp默认为 tcp
- `--address value`, `-a value`: 要连接到的主机地址和端口(默认为:7020 - `--address value`, `-a value`: 要连接到的主机地址和端口(默认为:7020
- `smtp`: 添加SMTP日志记录器 - `smtp`: 添加 SMTP 日志记录器
- 选项: - 选项:
- `--group value`, `-g value`: 要添加日志记录器的组 - 默认为"default" - `--group value`, `-g value`: 要添加日志记录器的组 - 默认为"default"
- `--name value`, `-n value`: 新日志记录器的名称 - 默认为模式 - `--name value`, `-n value`: 新日志记录器的名称 - 默认为模式

View File

@@ -14,9 +14,9 @@ Gitea 具有邮件功能,用于发送事务性邮件(例如注册确认邮
使用 `sendmail` 命令作为邮件传输代理mailer 使用 `sendmail` 命令作为邮件传输代理mailer
注意对于在官方Gitea Docker镜像中使用请使用SMTP版本进行配置请参考下一节 注意:对于在官方 Gitea Docker 镜像中使用,请使用 SMTP 版本进行配置(请参考下一节)。
注意:对于面向互联网的网站,请查阅您的 MTA 文档以了解通过TLS发送邮件的说明。同时设置 SPF、DMARC 和 DKIM DNS 记录,以使发送的邮件被各个电子邮件提供商接受为合法邮件。 注意:对于面向互联网的网站,请查阅您的 MTA 文档以了解通过 TLS 发送邮件的说明。同时设置 SPF、DMARC 和 DKIM DNS 记录,以使发送的邮件被各个电子邮件提供商接受为合法邮件。
```ini title="app.ini" ```ini title="app.ini"
[mailer] [mailer]
@@ -54,9 +54,9 @@ PASSWD = `password`
- 通过端口 587 的 STARTTLS也称为 Opportunistic TLS。初始连接是明文的但如果服务器支持则可以升级为 TLS。 - 通过端口 587 的 STARTTLS也称为 Opportunistic TLS。初始连接是明文的但如果服务器支持则可以升级为 TLS。
- 通过默认端口 465 的 SMTPS 连接。连接到服务器从一开始就使用 TLS。 - 通过默认端口 465 的 SMTPS 连接。连接到服务器从一开始就使用 TLS。
- 使用 `IS_TLS_ENABLED=true` 进行强制的 SMTPS 连接。(这两种方式都被称为 Implicit TLS - 使用 `IS_TLS_ENABLED=true` 进行强制的 SMTPS 连接。(这两种方式都被称为 Implicit TLS
这是由于 Go 内部库对 STRIPTLS 攻击的保护机制。 这是由于 Go 内部库对 STRIPTLS 攻击的保护机制。
请注意自2018年起[RFC8314](https://tools.ietf.org/html/rfc8314#section-3) 推荐使用 Implicit TLS。 请注意,自 2018 年起,[RFC8314](https://tools.ietf.org/html/rfc8314#section-3) 推荐使用 Implicit TLS。
### Gmail ### Gmail

View File

@@ -171,7 +171,8 @@ ALLOW_DATA_URI_IMAGES = true
.markup.XXXXX body { .markup.XXXXX body {
color: #444; color: #444;
font-family: Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Roman', serif; font-family: Georgia, Palatino, "Palatino Linotype", Times, "Times New Roman",
serif;
font-size: 12px; font-size: 12px;
line-height: 1.7; line-height: 1.7;
padding: 1em; padding: 1em;

View File

@@ -18,7 +18,7 @@ aliases:
目前,以下通知事件使用模板: 目前,以下通知事件使用模板:
| 操作名称 | 用途 | | 操作名称 | 用途 |
| ----------- | ------------------------------------------------------------------------------------------------------------ | | ---------- | ---------------------------------------------------------------------- |
| `new` | 创建了新的工单或合并请求。 | | `new` | 创建了新的工单或合并请求。 |
| `comment` | 在现有工单或合并请求中创建了新的评论。 | | `comment` | 在现有工单或合并请求中创建了新的评论。 |
| `close` | 关闭了工单或合并请求。 | | `close` | 关闭了工单或合并请求。 |
@@ -72,10 +72,10 @@ custom/templates/mail/pull/comment.tmpl
指定 _主题_ 部分是可选的因此也是虚线分隔符。在使用时_主题_ 和 _邮件正文_ 模板之间的分隔符需要至少三个虚线;分隔符行中不允许使用其他字符。 指定 _主题_ 部分是可选的因此也是虚线分隔符。在使用时_主题_ 和 _邮件正文_ 模板之间的分隔符需要至少三个虚线;分隔符行中不允许使用其他字符。
_主题__邮件正文_ 由 [Golang的模板引擎](https://golang.org/pkg/text/template/) 解析,并提供了为每个通知组装的 _元数据上下文_。上下文包含以下元素: _主题__邮件正文_ 由 [Golang 的模板引擎](https://golang.org/pkg/text/template/) 解析,并提供了为每个通知组装的 _元数据上下文_。上下文包含以下元素:
| 名称 | 类型 | 可用性 | 用途 | | 名称 | 类型 | 可用性 | 用途 |
| -------------------- | ------------------ | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ------------------ | ---------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `.FallbackSubject` | string | 始终可用 | 默认主题行。参见下文。 | | `.FallbackSubject` | string | 始终可用 | 默认主题行。参见下文。 |
| `.Subject` | string | 仅在正文中可用 | 解析后的 _主题_。 | | `.Subject` | string | 仅在正文中可用 | 解析后的 _主题_。 |
| `.Body` | string | 始终可用 | 工单、合并请求或评论的消息,从 Markdown 解析为 HTML 并进行了清理。请勿与 _邮件正文_ 混淆。 | | `.Body` | string | 始终可用 | 工单、合并请求或评论的消息,从 Markdown 解析为 HTML 并进行了清理。请勿与 _邮件正文_ 混淆。 |
@@ -107,7 +107,7 @@ _主题_ 和 _邮件正文_ 由 [Golang的模板引擎](https://golang.org/pkg/t
- 删除所有前导、尾随和多余的空格。 - 删除所有前导、尾随和多余的空格。
- 将字符串截断为前 256 个字母(字符)。 - 将字符串截断为前 256 个字母(字符)。
如果最终结果为空字符串,**或者**没有可用的主题模板即所选模板不包含主题部分将使用Gitea的**内部默认值**。 如果最终结果为空字符串,**或者**没有可用的主题模板(即所选模板不包含主题部分),将使用 Gitea 的**内部默认值**。
内部默认(回退)主题相当于: 内部默认(回退)主题相当于:
@@ -117,7 +117,7 @@ _主题_ 和 _邮件正文_ 由 [Golang的模板引擎](https://golang.org/pkg/t
例如:`Re: [mike/stuff] New color palette (#38)` 例如:`Re: [mike/stuff] New color palette (#38)`
即使存在有效的主题模板Gitea的默认主题也可以在模板的元数据中作为 `.FallbackSubject` 找到。 即使存在有效的主题模板Gitea 的默认主题也可以在模板的元数据中作为 `.FallbackSubject` 找到。
### 模板中的邮件正文部分 ### 模板中的邮件正文部分
@@ -139,7 +139,7 @@ _主题_ 和 _邮件正文_ 由 [Golang的模板引擎](https://golang.org/pkg/t
如果模板无法呈现,则只有在发送邮件时才会注意到。 如果模板无法呈现,则只有在发送邮件时才会注意到。
如果主题模板失败,将使用默认主题,如果从 _邮件正文_ 中成功呈现了任何内容,则将使用该内容,忽略其他内容。 如果主题模板失败,将使用默认主题,如果从 _邮件正文_ 中成功呈现了任何内容,则将使用该内容,忽略其他内容。
如果遇到问题,请检查 [Gitea的日志](https://docs.gitea.io/en-us/logging-configuration/) 以获取错误消息。 如果遇到问题,请检查 [Gitea 的日志](https://docs.gitea.io/en-us/logging-configuration/) 以获取错误消息。
## 示例 ## 示例
@@ -221,11 +221,11 @@ _主题_ 和 _邮件正文_ 由 [Golang的模板引擎](https://golang.org/pkg/t
> >
> #### 消息内容: > #### 消息内容:
> >
> \_********************************\_******************************** > \_******\*\*******\*\*\*\*******\*\*******\_******\*\*******\*\*\*\*******\*\*******
> >
> Mike, I think we should tone down the blues a little. > Mike, I think we should tone down the blues a little.
> >
> \_********************************\_******************************** > \_******\*\*******\*\*\*\*******\*\*******\_******\*\*******\*\*\*\*******\*\*******
> >
> [在 Gitea 上查看](#)。 > [在 Gitea 上查看](#)。
@@ -234,7 +234,7 @@ _主题_ 和 _邮件正文_ 由 [Golang的模板引擎](https://golang.org/pkg/t
模板系统包含一些函数,可用于进一步处理和格式化消息。以下是其中一些函数的列表: 模板系统包含一些函数,可用于进一步处理和格式化消息。以下是其中一些函数的列表:
| 函数名 | 参数 | 可用于 | 用法 | | 函数名 | 参数 | 可用于 | 用法 |
| ----------------- | ----------- | ------------ | --------------------------------------------------------------------------------- | | ---------------- | ----------- | ---------- | --------------------------------------------------------------------- |
| `AppUrl` | - | 任何地方 | Gitea 的 URL | | `AppUrl` | - | 任何地方 | Gitea 的 URL |
| `AppName` | - | 任何地方 | 从 `app.ini` 中设置,通常为 "Gitea" | | `AppName` | - | 任何地方 | 从 `app.ini` 中设置,通常为 "Gitea" |
| `AppDomain` | - | 任何地方 | Gitea 的主机名 | | `AppDomain` | - | 任何地方 | Gitea 的主机名 |
@@ -245,8 +245,10 @@ _主题_ 和 _邮件正文_ 由 [Golang的模板引擎](https://golang.org/pkg/t
这些都是 _函数_,而不是元数据,因此必须按以下方式使用: 这些都是 _函数_,而不是元数据,因此必须按以下方式使用:
```html ```html
像这样使用: {{Str2html "Escape<my>text"}} 像这样使用: {{Str2html "Escape<my
或者这样使用: {{"Escape<my>text" | Str2html}} >text"}} 或者这样使用: {{"Escape<my
或者这样使用: {{AppUrl}} >text" | Str2html}} 或者这样使用: {{AppUrl}} 但不要像这样使用:
但不要像这样使用: {{.AppUrl}} {{.AppUrl}}</my
></my
>
``` ```

View File

@@ -30,7 +30,7 @@ REPO_INDEXER_EXCLUDE = resources/bin/**
### 按路径选择要索引的文件 ### 按路径选择要索引的文件
Gitea使用 [`gobwas/glob` 库](https://github.com/gobwas/glob) 中的 glob 模式匹配来选择要包含在索引中的文件。 Gitea 使用 [`gobwas/glob` 库](https://github.com/gobwas/glob) 中的 glob 模式匹配来选择要包含在索引中的文件。
限制文件列表可以防止索引被派生或无关的文件(例如 lss、sym、map 等)污染,从而使搜索结果更相关。这还有助于减小索引的大小。 限制文件列表可以防止索引被派生或无关的文件(例如 lss、sym、map 等)污染,从而使搜索结果更相关。这还有助于减小索引的大小。

View File

@@ -22,7 +22,7 @@ User-agent: *
Disallow: / Disallow: /
``` ```
如果您将Gitea安装在子目录中则需要在顶级目录中创建或编辑 `robots.txt` 如果您将 Gitea 安装在子目录中,则需要在顶级目录中创建或编辑 `robots.txt`
```txt ```txt
User-agent: * User-agent: *

View File

@@ -69,7 +69,7 @@ MERGES = pubkey, twofa, basesigned, commitssigned
如果您有自己定制的 Gitea git 配置,您应该将这些配置设置在系统 git 配置文件中(例如 `/etc/gitconfig`)或者 Gitea 的内部 git 配置文件 `{[git].HOME_PATH}/.gitconfig` 中。 如果您有自己定制的 Gitea git 配置,您应该将这些配置设置在系统 git 配置文件中(例如 `/etc/gitconfig`)或者 Gitea 的内部 git 配置文件 `{[git].HOME_PATH}/.gitconfig` 中。
与 git 命令相关的主目录文件(如 `.gnupg`)也应该放在 Gitea 的 git 主目录 `[git].HOME_PATH` 中。 与 git 命令相关的主目录文件(如 `.gnupg`)也应该放在 Gitea 的 git 主目录 `[git].HOME_PATH` 中。
如果您希望将 `.gnupg` 目录放在 `{[git].HOME_PATH}/` 之外的位置,请考虑设置 `$GNUPGHOME` 环境变量为您首选的位置。否则Gitea将会从 `{[git].HOME_PATH}/.gnupg` 查找私钥。 如果您希望将 `.gnupg` 目录放在 `{[git].HOME_PATH}/` 之外的位置,请考虑设置 `$GNUPGHOME` 环境变量为您首选的位置。,否则 Gitea 将会从 `{[git].HOME_PATH}/.gnupg` 查找私钥。
::: :::
### `INITIAL_COMMIT` ### `INITIAL_COMMIT`

View File

@@ -10,40 +10,40 @@ aliases:
## 背景 ## 背景
Gitea使用Golang作为后端编程语言。它使用了许多第三方包并且自己也编写了一些包。 Gitea 使用 Golang 作为后端编程语言。它使用了许多第三方包,并且自己也编写了一些包。
例如Gitea使用[Chi](https://github.com/go-chi/chi)作为基本的Web框架。[Xorm](https://xorm.io)是一个用于与数据库交互的ORM框架。 例如Gitea 使用[Chi](https://github.com/go-chi/chi)作为基本的 Web 框架。[Xorm](https://xorm.io)是一个用于与数据库交互的 ORM 框架。
因此,管理这些包非常重要。在开始编写后端代码之前,请参考以下准则。 因此,管理这些包非常重要。在开始编写后端代码之前,请参考以下准则。
## 包设计准则 ## 包设计准则
### 包列表 ### 包列表
为了保持易于理解的代码并避免循环依赖拥有良好的代码结构是很重要的。Gitea后端分为以下几个部分 为了保持易于理解的代码并避免循环依赖拥有良好的代码结构是很重要的。Gitea 后端分为以下几个部分:
- `build`帮助构建Gitea的脚本。 - `build`:帮助构建 Gitea 的脚本。
- `cmd`包含所有Gitea的实际子命令包括web、doctor、serv、hooks、admin等。`web`将启动Web服务。`serv``hooks`将被GitOpenSSH调用。其他子命令可以帮助维护Gitea。 - `cmd`:包含所有 Gitea 的实际子命令,包括 web、doctor、serv、hooks、admin 等。`web`将启动 Web 服务。`serv``hooks`将被 GitOpenSSH 调用。其他子命令可以帮助维护 Gitea。
- `tests`:常用的测试函数 - `tests`:常用的测试函数
- `tests/integration`:集成测试,用于测试后端回归。 - `tests/integration`:集成测试,用于测试后端回归。
- `tests/e2e`:端到端测试,用于测试前端和后端的兼容性和视觉回归。 - `tests/e2e`:端到端测试,用于测试前端和后端的兼容性和视觉回归。
- `models`包含由xorm用于构建数据库表的数据结构。它还包含查询和更新数据库的函数。应避免与其他Gitea代码的依赖关系。在某些情况下比如日志记录时可以例外。 - `models`:包含由 xorm 用于构建数据库表的数据结构。它还包含查询和更新数据库的函数。应避免与其他 Gitea 代码的依赖关系。在某些情况下,比如日志记录时可以例外。
- `models/db`:基本的数据库操作。所有其他`models/xxx`包都应依赖于此包。`GetEngine`函数只能从models/中调用。 - `models/db`:基本的数据库操作。所有其他`models/xxx`包都应依赖于此包。`GetEngine`函数只能从 models/中调用。
- `models/fixtures`:单元测试和集成测试中使用的示例数据。一个`yml`文件表示一个将在测试开始时加载到数据库中的表。 - `models/fixtures`:单元测试和集成测试中使用的示例数据。一个`yml`文件表示一个将在测试开始时加载到数据库中的表。
- `models/migrations`存储不同版本之间的数据库迁移。修改数据库结构的PR**必须**包含一个迁移步骤。 - `models/migrations`:存储不同版本之间的数据库迁移。修改数据库结构的 PR**必须**包含一个迁移步骤。
- `modules`在Gitea中处理特定功能的不同模块。工作正在进行中其中一些模块应该移到`services`特别是那些依赖于models的模块因为它们依赖于数据库。 - `modules`:在 Gitea 中处理特定功能的不同模块。工作正在进行中:其中一些模块应该移到`services`中,特别是那些依赖于 models 的模块,因为它们依赖于数据库。
- `modules/setting`存储从ini文件中读取的所有系统配置并在各处引用。但是在可能的情况下应将其作为函数参数使用。 - `modules/setting`:存储从 ini 文件中读取的所有系统配置,并在各处引用。但是在可能的情况下,应将其作为函数参数使用。
- `modules/git`:用于与`Git`命令行或Gogit包交互的包。 - `modules/git`:用于与`Git`命令行或 Gogit 包交互的包。
- `public`编译后的前端文件JavaScript、图像、CSS等 - `public`编译后的前端文件JavaScript、图像、CSS 等)
- `routers`处理服务器请求。由于它使用其他Gitea包来处理请求因此其他包models、modulesservices不能依赖于routers。 - `routers`:处理服务器请求。由于它使用其他 Gitea 包来处理请求因此其他包models、modulesservices不能依赖于 routers。
- `routers/api`:包含`/api/v1`相关路由用于处理RESTful API请求。 - `routers/api`:包含`/api/v1`相关路由,用于处理 RESTful API 请求。
- `routers/install`只能在系统处于安装模式INSTALL_LOCK=false时响应。 - `routers/install`只能在系统处于安装模式INSTALL_LOCK=false时响应。
- `routers/private`:仅由内部子命令调用,特别是`serv``hooks` - `routers/private`:仅由内部子命令调用,特别是`serv``hooks`
- `routers/web`处理来自Web浏览器或Git SMART HTTP协议的HTTP请求。 - `routers/web`:处理来自 Web 浏览器或 Git SMART HTTP 协议的 HTTP 请求。
- `services`:用于常见路由操作或命令执行的支持函数。使用`models``modules`来处理请求。 - `services`:用于常见路由操作或命令执行的支持函数。使用`models``modules`来处理请求。
- `templates`用于生成HTML输出的Golang模板。 - `templates`:用于生成 HTML 输出的 Golang 模板。
### 包依赖关系 ### 包依赖关系
由于Golang不支持导入循环我们必须仔细决定包之间的依赖关系。这些包之间有一些级别。以下是理想的包依赖关系方向。 由于 Golang 不支持导入循环,我们必须仔细决定包之间的依赖关系。这些包之间有一些级别。以下是理想的包依赖关系方向。
`cmd` -> `routers` -> `services` -> `models` -> `modules` `cmd` -> `routers` -> `services` -> `models` -> `modules`
@@ -88,18 +88,18 @@ func UpdateIssue(ctx context.Context, repoID int64) error {
### 导入别名 ### 导入别名
由于有一些使用相同包名的包,例如`modules/user``models/user``services/user`当这些包在一个Go文件中被导入时很难知道我们使用的是哪个包以及它是变量名还是导入名。因此我们始终建议使用导入别名。为了与常见的驼峰命名法的包变量区分开建议使用**snake_case**作为导入别名的命名规则。 由于有一些使用相同包名的包,例如`modules/user``models/user``services/user`,当这些包在一个 Go 文件中被导入时,很难知道我们使用的是哪个包以及它是变量名还是导入名。因此,我们始终建议使用导入别名。为了与常见的驼峰命名法的包变量区分开,建议使用**snake_case**作为导入别名的命名规则。
例如:`import user_service "code.gitea.io/gitea/services/user"` 例如:`import user_service "code.gitea.io/gitea/services/user"`
### 重要注意事项 ### 重要注意事项
- 永远不要写成`x.Update(exemplar)`,而没有明确的`WHERE`子句: - 永远不要写成`x.Update(exemplar)`,而没有明确的`WHERE`子句:
- 这将导致表中的所有行都被使用exemplar的非零值进行更新包括ID。 - 这将导致表中的所有行都被使用 exemplar 的非零值进行更新,包括 ID。
- 通常应该写成`x.ID(id).Update(exemplar)` - 通常应该写成`x.ID(id).Update(exemplar)`
- 如果在迁移过程中使用`x.Insert(exemplar)`向表中插入记录而ID是预设的 - 如果在迁移过程中使用`x.Insert(exemplar)`向表中插入记录,而 ID 是预设的:
- 对于MSSQL变体你将需要执行``SET IDENTITY_INSERT `table` ON``(否则迁移将失败) - 对于 MSSQL 变体,你将需要执行`` SET IDENTITY_INSERT `table` ON ``(否则迁移将失败)
- 对于PostgreSQL你还需要更新ID序列否则迁移将悄无声息地通过但后续的插入将失败 - 对于 PostgreSQL你还需要更新 ID 序列,否则迁移将悄无声息地通过,但后续的插入将失败:
``SELECT setval('table_name_id_seq', COALESCE((SELECT MAX(id)+1 FROM `table_name`), 1), false)`` `` SELECT setval('table_name_id_seq', COALESCE((SELECT MAX(id)+1 FROM `table_name`), 1), false) ``
### 未来的任务 ### 未来的任务

View File

@@ -16,10 +16,10 @@ HTML 页面由[Go HTML Template](https://pkg.go.dev/html/template)渲染。
源文件可以在以下目录中找到: 源文件可以在以下目录中找到:
* **CSS 样式** `web_src/css/` - **CSS 样式** `web_src/css/`
* **JavaScript 文件** `web_src/js/` - **JavaScript 文件** `web_src/js/`
* **Vue 组件** `web_src/js/components/` - **Vue 组件** `web_src/js/components/`
* **Go HTML 模板** `templates/` - **Go HTML 模板** `templates/`
## 通用准则 ## 通用准则
@@ -28,9 +28,9 @@ HTML 页面由[Go HTML Template](https://pkg.go.dev/html/template)渲染。
## Gitea 特定准则: ## Gitea 特定准则:
1. 每个功能Fomantic-UI/jQuery 模块)应放在单独的文件/目录中。 1. 每个功能Fomantic-UI/jQuery 模块)应放在单独的文件/目录中。
2. HTML 的 id 和 class 应使用 kebab-case最好包含2-3个与功能相关的关键词。 2. HTML 的 id 和 class 应使用 kebab-case最好包含 2-3 个与功能相关的关键词。
3. 在 JavaScript 中使用的 HTML 的 id 和 class 应在整个项目中是唯一的并且应包含2-3个与功能相关的关键词。建议在仅在 JavaScript 中使用的 class 中使用 `js-` 前缀。 3. 在 JavaScript 中使用的 HTML 的 id 和 class 应在整个项目中是唯一的,并且应包含 2-3 个与功能相关的关键词。建议在仅在 JavaScript 中使用的 class 中使用 `js-` 前缀。
4. 不应覆盖框架提供的 class 的 CSS 样式。始终使用具有2-3个与功能相关的关键词的新 class 名称来覆盖框架样式。Gitea 中的帮助 CSS 类在 `helpers.less` 中。 4. 不应覆盖框架提供的 class 的 CSS 样式。始终使用具有 2-3 个与功能相关的关键词的新 class 名称来覆盖框架样式。Gitea 中的帮助 CSS 类在 `helpers.less` 中。
5. 后端可以通过使用`ctx.PageData["myModuleData"] = map[]{}`将复杂数据传递给前端,但不要将整个模型暴露给前端,以避免泄露敏感数据。 5. 后端可以通过使用`ctx.PageData["myModuleData"] = map[]{}`将复杂数据传递给前端,但不要将整个模型暴露给前端,以避免泄露敏感数据。
6. 简单页面和与 SEO 相关的页面使用 Go HTML 模板渲染生成静态的 Fomantic-UI HTML 输出。复杂页面可以使用 Vue3。 6. 简单页面和与 SEO 相关的页面使用 Go HTML 模板渲染生成静态的 Fomantic-UI HTML 输出。复杂页面可以使用 Vue3。
7. 明确变量类型,优先使用`elem.disabled = true`而不是`elem.setAttribute('disabled', 'anything')`,优先使用`$el.prop('checked', var === 'yes')`而不是`$el.prop('checked', var)` 7. 明确变量类型,优先使用`elem.disabled = true`而不是`elem.setAttribute('disabled', 'anything')`,优先使用`$el.prop('checked', var === 'yes')`而不是`$el.prop('checked', var)`
@@ -42,8 +42,8 @@ HTML 页面由[Go HTML Template](https://pkg.go.dev/html/template)渲染。
### 可访问性 / ARIA ### 可访问性 / ARIA
在历史上Gitea大量使用了可访问性不友好的框架 Fomantic UI。 在历史上Gitea 大量使用了可访问性不友好的框架 Fomantic UI。
Gitea使用一些补丁使Fomantic UI更具可访问性参见`aria.js``aria.md` Gitea 使用一些补丁使 Fomantic UI 更具可访问性(参见`aria.js``aria.md`
但仍然存在许多问题需要大量的工作和时间来修复。 但仍然存在许多问题需要大量的工作和时间来修复。
### 框架使用 ### 框架使用
@@ -53,14 +53,14 @@ Gitea使用一些补丁使Fomantic UI更具可访问性参见`aria.js`和`ari
推荐的实现方式: 推荐的实现方式:
* Vue + Vanilla JS - Vue + Vanilla JS
* Fomantic-UIjQuery - Fomantic-UIjQuery
* Vanilla JS - Vanilla JS
不推荐的实现方式: 不推荐的实现方式:
* Vue + Fomantic-UIjQuery - Vue + Fomantic-UIjQuery
* jQuery + Vanilla JS - jQuery + Vanilla JS
为了保持界面一致Vue 组件可以使用 Fomantic-UI 的 CSS 类。 为了保持界面一致Vue 组件可以使用 Fomantic-UI 的 CSS 类。
尽管不建议混合使用不同的框架, 尽管不建议混合使用不同的框架,
@@ -79,7 +79,7 @@ Gitea使用一些补丁使Fomantic UI更具可访问性参见`aria.js`和`ari
如果我们想在非异步上下文中调用`async`函数, 如果我们想在非异步上下文中调用`async`函数,
建议使用`const _promise = asyncFoo()`来告诉读者 建议使用`const _promise = asyncFoo()`来告诉读者
这是有意为之的我们想调用异步函数并忽略Promise。 这是有意为之的,我们想调用异步函数并忽略 Promise。
一些 lint 规则和 IDE 也会在未处理返回的 Promise 时发出警告。 一些 lint 规则和 IDE 也会在未处理返回的 Promise 时发出警告。
### HTML 属性和 dataset ### HTML 属性和 dataset
@@ -87,31 +87,41 @@ Gitea使用一些补丁使Fomantic UI更具可访问性参见`aria.js`和`ari
禁止使用`dataset`,它的驼峰命名行为使得搜索属性变得困难。 禁止使用`dataset`,它的驼峰命名行为使得搜索属性变得困难。
然而,仍然存在一些特殊情况,因此当前的准则是: 然而,仍然存在一些特殊情况,因此当前的准则是:
* 对于旧代码: - 对于旧代码:
* 应将`$.data()`重构为`$.attr()`
* 在极少数情况下,可以使用`$.data()`将一些非字符串数据绑定到元素上,但强烈不推荐使用。
* 对于新代码: - 应将`$.data()`重构为`$.attr()`
* 不应使用`node.dataset`,而应使用`node.getAttribute` - 在极少数情况下,可以使用`$.data()`将一些非字符串数据绑定到元素上,但强烈不推荐使用
* 不要将任何用户数据绑定到 DOM 节点上,使用合适的设计模式描述节点和数据之间的关系。
- 对于新代码:
- 不应使用`node.dataset`,而应使用`node.getAttribute`
- 不要将任何用户数据绑定到 DOM 节点上,使用合适的设计模式描述节点和数据之间的关系。
### 显示/隐藏元素 ### 显示/隐藏元素
* 推荐在Vue组件中使用`v-if``v-show`来显示/隐藏元素。 - 推荐在 Vue 组件中使用`v-if``v-show`来显示/隐藏元素。
* Go 模板代码应使用 Gitea 的 `.gt-hidden``showElem()/hideElem()/toggleElem()` 来显示/隐藏元素,请参阅`.gt-hidden`的注释以获取更多详细信息。 - Go 模板代码应使用 Gitea 的 `.gt-hidden``showElem()/hideElem()/toggleElem()` 来显示/隐藏元素,请参阅`.gt-hidden`的注释以获取更多详细信息。
### Go HTML 模板中的样式和属性 ### Go HTML 模板中的样式和属性
建议使用以下方式: 建议使用以下方式:
```html ```html
<div class="gt-name1 gt-name2 {{if .IsFoo}}gt-foo{{end}}" {{if .IsFoo}}data-foo{{end}}></div> <div
class="gt-name1 gt-name2 {{if .IsFoo}}gt-foo{{end}}"
{{if
.IsFoo}}data-foo{{end}}
></div>
``` ```
而不是: 而不是:
```html ```html
<div class="gt-name1 gt-name2{{if .IsFoo}} gt-foo{{end}}"{{if .IsFoo}} data-foo{{end}}></div> <div
class="gt-name1 gt-name2{{if .IsFoo}} gt-foo{{end}}"
{{if
.IsFoo}}
data-foo{{end}}
></div>
``` ```
以使代码更易读。 以使代码更易读。

View File

@@ -10,31 +10,31 @@ aliases:
## 背景 ## 背景
自2014年2月12日编写了第一行代码以来Gitea已经发展成为一个庞大的项目。 2014 年 2 月 12 日编写了第一行代码以来Gitea 已经发展成为一个庞大的项目。
因此,代码库变得越来越大。代码库越大,维护就越困难。 因此,代码库变得越来越大。代码库越大,维护就越困难。
存在许多过时的机制,许多框架混合在一起,一些遗留代码可能会导致错误并阻碍新功能的开发。 存在许多过时的机制,许多框架混合在一起,一些遗留代码可能会导致错误并阻碍新功能的开发。
为了使代码库更易于维护使Gitea变得更好开发人员应牢记使用现代机制来重构旧代码。 为了使代码库更易于维护,使 Gitea 变得更好,开发人员应牢记使用现代机制来重构旧代码。
本文档是关于重构代码库的指南集合。 本文档是关于重构代码库的指南集合。
## 重构建议 ## 重构建议
* 设计更多关于未来的内容,而不仅仅解决当前问题。 - 设计更多关于未来的内容,而不仅仅解决当前问题。
* 减少模糊性,减少冲突,提高可维护性。 - 减少模糊性,减少冲突,提高可维护性。
* 描述重构,例如: - 描述重构,例如:
* 为什么需要重构。 - 为什么需要重构。
* 如何解决旧问题。 - 如何解决旧问题。
* 重构的优点/缺点是什么。 - 重构的优点/缺点是什么。
* 只做必要的更改,尽量保留旧逻辑。 - 只做必要的更改,尽量保留旧逻辑。
* 引入一些中间步骤使重构更容易审查完整的重构计划可以在几个PR中完成。 - 引入一些中间步骤,使重构更容易审查,完整的重构计划可以在几个 PR 中完成。
* 如果存在分歧应该请TOC技术监督委员会参与决策。 - 如果存在分歧,应该请 TOC技术监督委员会参与决策。
* 添加必要的测试以确保重构的正确性。 - 添加必要的测试以确保重构的正确性。
* 非错误重构优先在里程碑的开始时进行,这样可以更容易地在发布之前发现问题。 - 非错误重构优先在里程碑的开始时进行,这样可以更容易地在发布之前发现问题。
## 审查和合并建议 ## 审查和合并建议
* 重构的PR不应该长时间保持打开状态通常为7天),应尽快进行审查。 - 重构的 PR 不应该长时间保持打开状态(通常为 7 天),应尽快进行审查。
* 重构的PR应尽快合并不应被其他PR阻塞。 - 重构的 PR 应尽快合并,不应被其他 PR 阻塞。
* 如果TOC没有异议重构的PR可以在7天后由一名核心成员(非作者)批准后合并。 - 如果 TOC 没有异议,重构的 PR 可以在 7 天后由一名核心成员(非作者)批准后合并。
* 如果最终结果良好,容忍一些不完美/临时的步骤。 - 如果最终结果良好,容忍一些不完美/临时的步骤。
* 如果重构是必要的,容忍一些回归错误,并尽快修复错误。 - 如果重构是必要的,容忍一些回归错误,并尽快修复错误。

View File

@@ -8,9 +8,9 @@ aliases:
# 本地化 # 本地化
Gitea的本地化是通过我们的[Crowdin项目](https://crowdin.com/project/gitea)进行的。 Gitea 的本地化是通过我们的[Crowdin 项目](https://crowdin.com/project/gitea)进行的。
对于对**英语翻译**的更改可以发出pull-request来更改[英语语言环境](https://github.com/go-gitea/gitea/blob/main/options/locale/locale_en-US.ini)中合适的关键字。 对于对**英语翻译**的更改,可以发出 pull-request来更改[英语语言环境](https://github.com/go-gitea/gitea/blob/main/options/locale/locale_en-US.ini)中合适的关键字。
有关对**非英语**翻译的更改,请参阅上面的 Crowdin 项目。 有关对**非英语**翻译的更改,请参阅上面的 Crowdin 项目。

View File

@@ -8,7 +8,7 @@ aliases:
# 集成 # 集成
Gitea拥有一个出色的第三方集成社区以及在其他各种项目中的一流支持。 Gitea 拥有一个出色的第三方集成社区,以及在其他各种项目中的一流支持。
我们正在[awesome-gitea](https://gitea.com/gitea/awesome-gitea)上整理一个列表来跟踪这些集成! 我们正在[awesome-gitea](https://gitea.com/gitea/awesome-gitea)上整理一个列表来跟踪这些集成!

View File

@@ -8,24 +8,24 @@ aliases:
# 迁移接口 # 迁移接口
完整迁移功能在Gitea 1.9.0版本中引入。它定义了两个接口用于支持从其他Git托管平台迁移存储库数据到Gitea或者在将来将Gitea数据迁移到其他Git托管平台。 完整迁移功能在 Gitea 1.9.0 版本中引入。它定义了两个接口,用于支持从其他 Git 托管平台迁移存储库数据到 Gitea或者在将来将 Gitea 数据迁移到其他 Git 托管平台。
目前已实现了从GitHub、GitLab和其他Gitea实例的迁移。 目前已实现了从 GitHub、GitLab 和其他 Gitea 实例的迁移。
首先Gitea在包[modules/migration](https://github.com/go-gitea/gitea/tree/main/modules/migration)中定义了一些标准对象。它们是`Repository``Milestone``Release``ReleaseAsset``Label``Issue``Comment``PullRequest``Reaction``Review``ReviewComment` 首先Gitea 在包[modules/migration](https://github.com/go-gitea/gitea/tree/main/modules/migration)中定义了一些标准对象。它们是`Repository``Milestone``Release``ReleaseAsset``Label``Issue``Comment``PullRequest``Reaction``Review``ReviewComment`
## 下载器接口 ## 下载器接口
要从新的Git托管平台迁移需要进行两个步骤的更新。 要从新的 Git 托管平台迁移,需要进行两个步骤的更新。
- 您应该实现一个`Downloader`,用于获取存储库信息。 - 您应该实现一个`Downloader`,用于获取存储库信息。
- 您应该实现一个`DownloaderFactory`用于检测URL是否匹配并创建上述的`Downloader` - 您应该实现一个`DownloaderFactory`,用于检测 URL 是否匹配,并创建上述的`Downloader`
- 您需要在`init()`中通过`RegisterDownloaderFactory`注册`DownloaderFactory` - 您需要在`init()`中通过`RegisterDownloaderFactory`注册`DownloaderFactory`
您可以在[downloader.go](https://github.com/go-gitea/gitea/blob/main/modules/migration/downloader.go)中找到这些接口。 您可以在[downloader.go](https://github.com/go-gitea/gitea/blob/main/modules/migration/downloader.go)中找到这些接口。
## 上传器接口 ## 上传器接口
目前,只实现了`GiteaLocalUploader`因此我们只能通过此Uploader将下载的数据保存到本地的Gitea实例。目前不支持其他上传器。 目前,只实现了`GiteaLocalUploader`,因此我们只能通过此 Uploader 将下载的数据保存到本地的 Gitea 实例。目前不支持其他上传器。
您可以在[uploader.go](https://github.com/go-gitea/gitea/blob/main/modules/migration/uploader.go)中找到这些接口。 您可以在[uploader.go](https://github.com/go-gitea/gitea/blob/main/modules/migration/uploader.go)中找到这些接口。

View File

@@ -34,7 +34,7 @@ Gitea 支持作为 OAuth2 提供者,允许第三方应用程序在用户同意
Gitea 支持以下令牌范围: Gitea 支持以下令牌范围:
| 名称 | 介绍 | | 名称 | 介绍 |
| ---- | ----------- | | ---------------------------------------- | --------------------------------------------------------------- |
| **(no scope)** | 授予对公共用户配置文件和公共存储库的只读访问权限 | | **(no scope)** | 授予对公共用户配置文件和公共存储库的只读访问权限 |
| **repo** | 完全控制所有存储库 | | **repo** | 完全控制所有存储库 |
| &nbsp;&nbsp;&nbsp; **repo:status** | 授予对所有存储库中提交状态的读/写访问权限 | | &nbsp;&nbsp;&nbsp; **repo:status** | 授予对所有存储库中提交状态的读/写访问权限 |

View File

@@ -4,7 +4,6 @@ slug: "faq"
sidebar_position: 5 sidebar_position: 5
aliases: aliases:
- /zh-cn/faq - /zh-cn/faq
--- ---
# 常见问题 # 常见问题
@@ -13,91 +12,91 @@ aliases:
有关更多帮助资源,请查看所有[支持选项](seek-help.md)。 有关更多帮助资源,请查看所有[支持选项](seek-help.md)。
## 1.x1.x.x下载之间的区别 ## 1.x1.x.x 下载之间的区别
以1.7.x版本为例。 1.7.x 版本为例。
**注意:**此示例也适用于Docker镜像 **注意:**此示例也适用于 Docker 镜像!
在我们的[下载页面](https://dl.gitea.io/gitea/)上您会看到一个1.7目录以及1.7.0、1.7.1、1.7.2、1.7.3、1.7.4、1.7.51.7.6的目录。 在我们的[下载页面](https://dl.gitea.io/gitea/)上,您会看到一个 1.7 目录,以及 1.7.0、1.7.1、1.7.2、1.7.3、1.7.4、1.7.51.7.6 的目录。
1.7目录和1.7.0目录是**不同**的。1.7目录是在每个合并到[`release/v1.7`](https://github.com/go-gitea/gitea/tree/release/v1.7)分支的提交上构建的。 1.7 目录和 1.7.0 目录是**不同**的。1.7 目录是在每个合并到[`release/v1.7`](https://github.com/go-gitea/gitea/tree/release/v1.7)分支的提交上构建的。
然而1.7.0目录是在创建[`v1.7.0`](https://github.com/go-gitea/gitea/releases/tag/v1.7.0)标签时创建的构建。 然而1.7.0 目录是在创建[`v1.7.0`](https://github.com/go-gitea/gitea/releases/tag/v1.7.0)标签时创建的构建。
这意味着1.x的下载会随着提交合并到各自的分支而改变将其视为每个版本的单独的“main”分支 这意味着 1.x 的下载会随着提交合并到各自的分支而改变将其视为每个版本的单独的“main”分支
另一方面1.x.x的下载应该永远不会改变。 另一方面1.x.x 的下载应该永远不会改变。
## 如何从Gogs/GitHub等迁移到Gitea ## 如何从 Gogs/GitHub 等迁移到 Gitea
要从Gogs迁移到Gitea 要从 Gogs 迁移到 Gitea
- [Gogs版本0.9.146或更低](installation/upgrade-from-gogs.md) - [Gogs 版本 0.9.146 或更低](installation/upgrade-from-gogs.md)
- [Gogs版本0.11.46.0418](https://github.com/go-gitea/gitea/issues/4286) - [Gogs 版本 0.11.46.0418](https://github.com/go-gitea/gitea/issues/4286)
要从GitHub迁移到Gitea您可以使用Gitea内置的迁移表单。 要从 GitHub 迁移到 Gitea您可以使用 Gitea 内置的迁移表单。
为了迁移诸如问题、拉取请求等项目,您需要至少输入您的用户名。 为了迁移诸如问题、拉取请求等项目,您需要至少输入您的用户名。
[Example (requires login)](https://try.gitea.io/repo/migrate) [Example (requires login)](https://try.gitea.io/repo/migrate)
要从GitLab迁移到Gitea您可以使用这个非关联的工具 要从 GitLab 迁移到 Gitea您可以使用这个非关联的工具
https://github.com/loganinak/MigrateGitlabToGogs https://github.com/loganinak/MigrateGitlabToGogs
## Gitea存储文件的位置 ## Gitea 存储文件的位置
- _`AppWorkPath`_ - _`AppWorkPath`_
- `--work-path`标志 - `--work-path`标志
- 或者环境变量`GITEA_WORK_DIR` - 或者环境变量`GITEA_WORK_DIR`
- 或者在构建时设置的内置值 - 或者在构建时设置的内置值
- 或者包含Gitea二进制文件的目录 - 或者包含 Gitea 二进制文件的目录
- `%(APP_DATA_PATH)`(数据库、索引器等的默认路径) - `%(APP_DATA_PATH)`(数据库、索引器等的默认路径)
- `app.ini`中的`APP_DATA_PATH` - `app.ini`中的`APP_DATA_PATH`
- 或者_`AppWorkPath`_`/data` - 或者*`AppWorkPath`*`/data`
- _`CustomPath`_自定义模板 - _`CustomPath`_自定义模板
- `--custom-path`标志 - `--custom-path`标志
- 或者环境变量`GITEA_CUSTOM` - 或者环境变量`GITEA_CUSTOM`
- 或者在构建时设置的内置值 - 或者在构建时设置的内置值
- 或者_`AppWorkPath`_`/custom` - 或者*`AppWorkPath`*`/custom`
- HomeDir - HomeDir
- Unix环境变量`HOME` - Unix环境变量`HOME`
- Windows环境变量`USERPROFILE`,或者环境变量`HOMEDRIVE`+`HOMEPATH` - Windows环境变量`USERPROFILE`,或者环境变量`HOMEDRIVE`+`HOMEPATH`
- RepoRootPath - RepoRootPath
- `app.ini`中\[repository]部分的`ROOT`(如果是绝对路径) - `app.ini`中\[repository]部分的`ROOT`(如果是绝对路径)
- 否则_`AppWorkPath`_`/ROOT`(如果`app.ini`中\[repository]部分的`ROOT`是相对路径) - 否则*`AppWorkPath`*`/ROOT`(如果`app.ini`中\[repository]部分的`ROOT`是相对路径)
- 默认值为`%(APP_DATA_PATH)/gitea-repositories` - 默认值为`%(APP_DATA_PATH)/gitea-repositories`
- INI配置文件 - INI配置文件
- `--config`标志 - `--config`标志
- 或者在构建时设置的可能内置值 - 或者在构建时设置的可能内置值
- 或者 _`CustomPath`_`/conf/app.ini` - 或者 _`CustomPath`_`/conf/app.ini`
- SQLite数据库 - SQLite 数据库
- app.inidatabase部分的PATH - app.inidatabase 部分的 PATH
- 或者`%(APP_DATA_PATH)/gitea.db` - 或者`%(APP_DATA_PATH)/gitea.db`
## 看不到克隆URL或克隆URL不正确 ## 看不到克隆 URL 或克隆 URL 不正确
有几个地方可能会导致显示不正确。 有几个地方可能会导致显示不正确。
1. 如果使用反向代理,请确保按照[反向代理指南](../administration/reverse-proxies.md)中的正确说明进行设置。 1. 如果使用反向代理,请确保按照[反向代理指南](../administration/reverse-proxies.md)中的正确说明进行设置。
2. 确保在`app.ini``server`部分中正确设置了`ROOT_URL` 2. 确保在`app.ini``server`部分中正确设置了`ROOT_URL`
如果某些克隆选项未显示HTTP/SSSH可以在`app.ini中` 如果某些克隆选项未显示HTTP/SSSH可以在`app.ini中`
- `DISABLE_HTTP_GIT`: 如果设为true, 将会没有HTTP/HTTPS链接 - `DISABLE_HTTP_GIT`: 如果设为 true, 将会没有 HTTP/HTTPS 链接
- `DISABLE_SSH`: 如果设为true, 将会没有SSH链接 - `DISABLE_SSH`: 如果设为 true, 将会没有 SSH 链接
- `SSH_EXPOSE_ANONYMOUS`: 如果设为false, SSH链接将会对匿名用户隐藏 - `SSH_EXPOSE_ANONYMOUS`: 如果设为 false, SSH 链接将会对匿名用户隐藏
## 文件上传失败413 Request Entity Too Large ## 文件上传失败413 Request Entity Too Large
当反向代理限制文件上传大小时,会出现此错误。 当反向代理限制文件上传大小时,会出现此错误。
有关使用nginx解决此问题请参阅[反向代理指南](../administration/reverse-proxies.md)。 有关使用 nginx 解决此问题,请参阅[反向代理指南](../administration/reverse-proxies.md)。
## 自定义模板无法加载或运行错误 ## 自定义模板无法加载或运行错误
Gitea的自定义模板必须将其添加到正确的位置否则Gitea将无法找到并使用自定义模板。 Gitea 的自定义模板必须将其添加到正确的位置,否则 Gitea 将无法找到并使用自定义模板。
模板的正确路径应该相对于`CustomPath` 模板的正确路径应该相对于`CustomPath`
@@ -106,35 +105,35 @@ Gitea的自定义模板必须将其添加到正确的位置否则Gitea将无
如果找不到,请尝试`echo $GITEA_CUSTOM` 如果找不到,请尝试`echo $GITEA_CUSTOM`
2. 如果仍然找不到,默认值可以被[计算](faq.md#Gitea存储文件的位置) 2. 如果仍然找不到,默认值可以被[计算](faq.md#Gitea存储文件的位置)
3. 如果仍然找不到路径,则可以参考[自定义Gitea](../administration/customizing-gitea.md)页面,将模板添加到正确的位置。 3. 如果仍然找不到路径,则可以参考[自定义 Gitea](../administration/customizing-gitea.md)页面,将模板添加到正确的位置。
## Gitea是否有"GitHub/GitLab Pages"功能? ## Gitea 是否有"GitHub/GitLab Pages"功能?
Gitea不提供内置的Pages服务器。您需要一个专用的域名来提供静态页面以避免CSRF安全风险。 Gitea 不提供内置的 Pages 服务器。您需要一个专用的域名来提供静态页面,以避免 CSRF 安全风险。
对于简单的用法您可以使用反向代理来重写和提供Gitea的原始文件URL中的静态内容。 对于简单的用法,您可以使用反向代理来重写和提供 Gitea 的原始文件 URL 中的静态内容。
还有一些已经可用的第三方服务,比如独立[pages server](https://codeberg.org/Codeberg/pages-server)的或[caddy plugin](https://github.com/42wim/caddy-gitea),可以提供所需的功能。 还有一些已经可用的第三方服务,比如独立[pages server](https://codeberg.org/Codeberg/pages-server)的或[caddy plugin](https://github.com/42wim/caddy-gitea),可以提供所需的功能。
## 活跃用户与禁止登录用户 ## 活跃用户与禁止登录用户
在Gitea中"活跃用户"是指通过电子邮件激活其帐户的用户。 Gitea 中,"活跃用户"是指通过电子邮件激活其帐户的用户。
"禁止登录用户"是指不允许再登录到Gitea的用户。 "禁止登录用户"是指不允许再登录到 Gitea 的用户。
## 设置日志记录 ## 设置日志记录
- [官方文档](../administration/logging-documentation.md) - [官方文档](../administration/logging-documentation.md)
## 什么是Swagger ## 什么是 Swagger
[Swagger](https://swagger.io/) 是Gitea用于其API文档的工具。 [Swagger](https://swagger.io/) 是 Gitea 用于其 API 文档的工具。
所有Gitea实例都有内置的API无法完全禁用它。 所有 Gitea 实例都有内置的 API无法完全禁用它。
但是您可以在app.iniapi部分将ENABLE_SWAGGER设置为false以禁用其文档显示。 但是,您可以在 app.iniapi 部分将 ENABLE_SWAGGER 设置为 false以禁用其文档显示。
有关更多信息请参阅Gitea的[API文档](development/api-usage.md)。 有关更多信息,请参阅 Gitea 的[API 文档](development/api-usage.md)。
您可以在上查看最新的API例如https://try.gitea.io/api/swagger 您可以在上查看最新的 API例如https://try.gitea.io/api/swagger
您还可以在上查看`swagger.json`文件的示例 https://try.gitea.io/swagger.v1.json 您还可以在上查看`swagger.json`文件的示例 https://try.gitea.io/swagger.v1.json
@@ -145,7 +144,7 @@ Gitea不提供内置的Pages服务器。您需要一个专用的域名来提供
有多种方法可以组合使用来防止垃圾邮件发送者: 有多种方法可以组合使用来防止垃圾邮件发送者:
1. 通过设置电子邮件域名的白名单或黑名单。 1. 通过设置电子邮件域名的白名单或黑名单。
2. 通过设置一些域名或者OpenID白名单见下文 2. 通过设置一些域名或者 OpenID 白名单(见下文)。
3. 在您的`app.ini`中将`ENABLE_CAPTCHA`设置为`true`,并正确配置`RECAPTCHA_SECRET``RECAPTCHA_SITEKEY` 3. 在您的`app.ini`中将`ENABLE_CAPTCHA`设置为`true`,并正确配置`RECAPTCHA_SECRET``RECAPTCHA_SITEKEY`
4.`DISABLE_REGISTRATION`设置为`true`,并通过 [CLI](../administration/command-line.md)、[API](../development/api-usage.md) 或 Gitea 的管理界面创建新用户。 4.`DISABLE_REGISTRATION`设置为`true`,并通过 [CLI](../administration/command-line.md)、[API](../development/api-usage.md) 或 Gitea 的管理界面创建新用户。
@@ -186,13 +185,13 @@ Gitea 目前支持三个官方主题,分别是 `gitea`(亮色)、`arc-gree
通过将`arc-blue`添加到`app.ini`中的`THEMES`列表中,允许用户使用该主题 通过将`arc-blue`添加到`app.ini`中的`THEMES`列表中,允许用户使用该主题
## SSHD vs 内建SSH ## SSHD vs 内建 SSH
SSHD是大多数Unix系统上内建的SSH服务器。 SSHD 是大多数 Unix 系统上内建的 SSH 服务器。
Gitea还提供了自己的SSH服务器用于在SSHD不可用时使用。 Gitea 还提供了自己的 SSH 服务器,用于在 SSHD 不可用时使用。
## Gitea运行缓慢 ## Gitea 运行缓慢
导致此问题的最常见原因是加载联合头像。 导致此问题的最常见原因是加载联合头像。
@@ -202,35 +201,35 @@ Gitea还提供了自己的SSH服务器用于在SSHD不可用时使用。
## 无法创建仓库/文件 ## 无法创建仓库/文件
请确保Gitea具有足够的权限来写入其主目录和数据目录。 请确保 Gitea 具有足够的权限来写入其主目录和数据目录。
参见[AppDataPath 和 RepoRootPath](faq.md#Gitea存储文件的位置) 参见[AppDataPath 和 RepoRootPath](faq.md#Gitea存储文件的位置)
**适用于Arch用户的注意事项**在撰写本文时Arch软件包的systemd文件包含了以下行 **适用于 Arch 用户的注意事项:**在撰写本文时Arch 软件包的 systemd 文件包含了以下行:
`ReadWritePaths=/etc/gitea/app.ini` `ReadWritePaths=/etc/gitea/app.ini`
这将使得Gitea无法写入其他路径。 这将使得 Gitea 无法写入其他路径。
## 翻译不正确/如何添加更多翻译 ## 翻译不正确/如何添加更多翻译
我们当前的翻译是在我们的[Crowdin项目](https://crowdin.com/project/gitea)上众包进行的 我们当前的翻译是在我们的[Crowdin 项目](https://crowdin.com/project/gitea)上众包进行的
无论您想要更改翻译还是添加新的翻译都需要在Crowdin集成中进行因为所有翻译都会被CI覆盖。 无论您想要更改翻译还是添加新的翻译,都需要在 Crowdin 集成中进行,因为所有翻译都会被 CI 覆盖。
## 推送钩子/ Webhook未运行 ## 推送钩子/ Webhook 未运行
如果您可以推送但无法在主页仪表板上看到推送活动或者推送不触发Webhook有几种可能性 如果您可以推送但无法在主页仪表板上看到推送活动,或者推送不触发 Webhook有几种可能性
1. Git钩子不同步在站点管理面板上运行“重新同步所有仓库的pre-receive、updatepost-receive钩子” 1. Git 钩子不同步:在站点管理面板上运行“重新同步所有仓库的 pre-receive、updatepost-receive 钩子”
2. Git仓库和钩子存储在一些不支持脚本执行的文件系统上例如由NAS挂载请确保文件系统支持`chmod a+x any-script` 2. Git 仓库(和钩子)存储在一些不支持脚本执行的文件系统上(例如由 NAS 挂载),请确保文件系统支持`chmod a+x any-script`
3. 如果您使用的是Docker请确保Docker Server而不是客户端的版本 >= 20.10.6 3. 如果您使用的是 Docker请确保 Docker Server而不是客户端的版本 >= 20.10.6
## SSH问题 ## SSH 问题
如果无法通过`ssh`访问仓库,但`https`正常工作,请考虑以下情况。 如果无法通过`ssh`访问仓库,但`https`正常工作,请考虑以下情况。
首先请确保您可以通过SSH访问Gitea。 首先,请确保您可以通过 SSH 访问 Gitea。
`ssh git@myremote.example` `ssh git@myremote.example`
@@ -258,16 +257,18 @@ fatal: Could not read from remote repository.
- 在客户端: - 在客户端:
- 确保公钥和私钥已添加到正确的 Gitea 用户。 - 确保公钥和私钥已添加到正确的 Gitea 用户。
- 确保远程 URL 中没有任何问题。特别是,请确保∂ - 确保远程 URL 中没有任何问题。特别是,请确保
Git 用户(@ 之前的部分)的名称拼写正确。 Git 用户(@ 之前的部分)的名称拼写正确。
- 确保客户端机器上的公钥和私钥正确无误。 - 确保客户端机器上的公钥和私钥正确无误。
- 在服务器上: - 在服务器上:
- 确保存储库存在并且命名正确。 - 确保存储库存在并且命名正确。
- 检查系统用户主目录中的 `.ssh` 目录的权限。 - 检查系统用户主目录中的 `.ssh` 目录的权限。
- 验证正确的公钥是否已添加到 `.ssh/authorized_keys` 中。 - 验证正确的公钥是否已添加到 `.ssh/authorized_keys` 中。
尝试在 Gitea 管理面板上运行 尝试在 Gitea 管理面板上运行
`Rewrite '.ssh/authorized_keys' file (for Gitea SSH keys)` `Rewrite '.ssh/authorized_keys' file (for Gitea SSH keys)`
- 查看 Gitea 日志。 - 查看 Gitea 日志。
- 查看 /var/log/auth或类似的文件 - 查看 /var/log/auth或类似的文件
- 检查存储库的权限。 - 检查存储库的权限。
@@ -339,7 +340,9 @@ Gitea 提供了一个子命令`gitea migrate`来初始化数据库,然后您
- 使用[管理 CLI 命令](../administration/command-line.md#admin)。 - 使用[管理 CLI 命令](../administration/command-line.md#admin)。
请注意,大多数命令还需要一个[全局标志](../administration/command-line.md#全局选项)来指向正确的配置。 请注意,大多数命令还需要一个[全局标志](../administration/command-line.md#全局选项)来指向正确的配置。
- 作为**用户**,您可以更改密码... - 作为**用户**,您可以更改密码...
- 在您的账户的`设置 -> 账户`页面(此方法**需要**您知道当前密码)。 - 在您的账户的`设置 -> 账户`页面(此方法**需要**您知道当前密码)。
- 使用`忘记密码`链接。 - 使用`忘记密码`链接。
@@ -349,7 +352,7 @@ Gitea 提供了一个子命令`gitea migrate`来初始化数据库,然后您
在 Gitea 版本 `1.11` 中,我们转换为使用[goldmark](https://github.com/yuin/goldmark)进行 Markdown 渲染,它符合[CommonMark](https://commonmark.org/)标准。 在 Gitea 版本 `1.11` 中,我们转换为使用[goldmark](https://github.com/yuin/goldmark)进行 Markdown 渲染,它符合[CommonMark](https://commonmark.org/)标准。
如果您在版本`1.11`之前的Markdown正常工作但在升级后无法正常工作请仔细阅读CommonMark规范看看问题是由错误还是非兼容的语法引起的。 如果您在版本`1.11`之前的 Markdown 正常工作,但在升级后无法正常工作,请仔细阅读 CommonMark 规范,看看问题是由错误还是非兼容的语法引起的。
如果是后者,通常规范中会列出一种符合标准的替代方法。 如果是后者,通常规范中会列出一种符合标准的替代方法。

View File

@@ -181,7 +181,7 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
- `/path/to/postgresql.crt`: 数据库实例证书 - `/path/to/postgresql.crt`: 数据库实例证书
- `/path/to/postgresql.key`: 数据库实例私钥 - `/path/to/postgresql.key`: 数据库实例私钥
- `/path/to/root.crt`: 用于验证客户端证书的CA证书链 - `/path/to/root.crt`: 用于验证客户端证书的 CA 证书链
2. 在 `postgresql.conf` 中添加以下选项: 2. 在 `postgresql.conf` 中添加以下选项:
@@ -200,15 +200,15 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
chmod 0600 /path/to/root.crt /path/to/postgresql.crt /path/to/postgresql.key chmod 0600 /path/to/root.crt /path/to/postgresql.crt /path/to/postgresql.key
``` ```
4. 编辑 `pg_hba.conf` 规则,仅允许 Gitea 数据库用户通过SSL连接并要求客户端证书验证。 4. 编辑 `pg_hba.conf` 规则,仅允许 Gitea 数据库用户通过 SSL 连接,并要求客户端证书验证。
对于PostgreSQL 12 对于 PostgreSQL 12
```ini ```ini
hostssl giteadb gitea 192.0.2.10/32 scram-sha-256 clientcert=verify-full hostssl giteadb gitea 192.0.2.10/32 scram-sha-256 clientcert=verify-full
``` ```
对于PostgreSQL 11及更早版本 对于 PostgreSQL 11 及更早版本:
```ini ```ini
hostssl giteadb gitea 192.0.2.10/32 scram-sha-256 clientcert=1 hostssl giteadb gitea 192.0.2.10/32 scram-sha-256 clientcert=1
@@ -222,7 +222,7 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
- `~/.postgresql/postgresql.crt`: 数据库客户端证书 - `~/.postgresql/postgresql.crt`: 数据库客户端证书
- `~/.postgresql/postgresql.key`: 数据库客户端私钥 - `~/.postgresql/postgresql.key`: 数据库客户端私钥
- `~/.postgresql/root.crt`: 用于验证服务器证书的CA证书链 - `~/.postgresql/root.crt`: 用于验证服务器证书的 CA 证书链
注意:上述文件名在 PostgreSQL 中是硬编码的,无法更改。 注意:上述文件名在 PostgreSQL 中是硬编码的,无法更改。
@@ -243,15 +243,15 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
### MySQL ### MySQL
虽然 Gitea 使用的MySQL驱动程序也支持双向 TLS但目前 Gitea 仅支持单向 TLS。有关详细信息请参见工单10828。 虽然 Gitea 使用的 MySQL 驱动程序也支持双向 TLS但目前 Gitea 仅支持单向 TLS。有关详细信息请参见工单10828。
在单向TLS中数据库客户端在连接握手期间验证服务器发送的证书而服务器则假定连接的客户端是合法的因为不进行客户端证书验证。 在单向 TLS 中,数据库客户端在连接握手期间验证服务器发送的证书,而服务器则假定连接的客户端是合法的,因为不进行客户端证书验证。
1. 在数据库实例上放置以下凭据: 1. 在数据库实例上放置以下凭据:
- `/path/to/mysql.crt`: 数据库实例证书 - `/path/to/mysql.crt`: 数据库实例证书
- `/path/to/mysql.key`: 数据库实例密钥 - `/path/to/mysql.key`: 数据库实例密钥
- `/path/to/ca.crt`: CA证书链。在单向TLS中不使用此文件但用于验证双向TLS中的客户端证书。 - `/path/to/ca.crt`: CA 证书链。在单向 TLS 中不使用此文件,但用于验证双向 TLS 中的客户端证书。
2. 将以下选项添加到 `my.cnf` 2. 将以下选项添加到 `my.cnf`
@@ -270,7 +270,7 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
chmod 0600 /path/to/ca.crt /path/to/mysql.crt /path/to/mysql.key chmod 0600 /path/to/ca.crt /path/to/mysql.crt /path/to/mysql.key
``` ```
4. 重新启动MySQL以应用设置。 4. 重新启动 MySQL 以应用设置。
5. Gitea 的数据库用户可能已经创建过,但只会对运行 Gitea 的服务器的 IP 地址进行身份验证。要对其域名进行身份验证,请重新创建用户,并设置其需要通过 TLS 连接到数据库: 5. Gitea 的数据库用户可能已经创建过,但只会对运行 Gitea 的服务器的 IP 地址进行身份验证。要对其域名进行身份验证,请重新创建用户,并设置其需要通过 TLS 连接到数据库:
@@ -283,9 +283,9 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
根据需要替换数据库用户名、密码和 Gitea 实例域名。 根据需要替换数据库用户名、密码和 Gitea 实例域名。
6. 确保用于验证数据库服务器证书的CA证书链位于数据库和 Gitea 服务器的系统证书存储中。请参考系统文档中有关将 CA 证书添加到证书存储的说明。 6. 确保用于验证数据库服务器证书的 CA 证书链位于数据库和 Gitea 服务器的系统证书存储中。请参考系统文档中有关将 CA 证书添加到证书存储的说明。
7. 在运行Gitea的服务器上测试与数据库的连接 7. 在运行 Gitea 的服务器上,测试与数据库的连接:
``` ```
mysql -u gitea -h example.db -p --ssl mysql -u gitea -h example.db -p --ssl

View File

@@ -6,13 +6,13 @@ sidebar_position: 30
# 使用源代码安装 # 使用源代码安装
首先你需要安装Golang关于Golang的安装参见[官方文档](https://golang.google.cn/doc/install)。 首先你需要安装 Golang关于 Golang 的安装,参见[官方文档](https://golang.google.cn/doc/install)。
其次你需要[安装Node.js](https://nodejs.org/zh-cn/download/)Node.js 和 npm 将用于构建 Gitea 前端。 其次你需要[安装 Node.js](https://nodejs.org/zh-cn/download/)Node.js 和 npm 将用于构建 Gitea 前端。
## 下载 ## 下载
你需要获取Gitea的源码最方便的方式是使用 `git` 命令。执行以下命令: 你需要获取 Gitea 的源码,最方便的方式是使用 `git` 命令。执行以下命令:
``` ```
git clone https://github.com/go-gitea/gitea git clone https://github.com/go-gitea/gitea
@@ -48,8 +48,8 @@ git checkout @sourceVersion@
按照您的编译需求,以下 tags 可以使用: 按照您的编译需求,以下 tags 可以使用:
- `bindata`: 这个编译选项将会把运行Gitea所需的所有外部资源都打包到可执行文件中这样部署将非常简单因为除了可执行程序将不再需要任何其他文件。 - `bindata`: 这个编译选项将会把运行 Gitea 所需的所有外部资源都打包到可执行文件中,这样部署将非常简单因为除了可执行程序将不再需要任何其他文件。
- `sqlite sqlite_unlock_notify`: 这个编译选项将启用SQLite3数据库的支持建议只在少数人使用时使用这个模式。 - `sqlite sqlite_unlock_notify`: 这个编译选项将启用 SQLite3 数据库的支持,建议只在少数人使用时使用这个模式。
- `pam`: 这个编译选项将会启用 PAM (Linux Pluggable Authentication Modules) 认证,如果你使用这一认证模式的话需要开启这个选项。 - `pam`: 这个编译选项将会启用 PAM (Linux Pluggable Authentication Modules) 认证,如果你使用这一认证模式的话需要开启这个选项。
使用 bindata 可以打包资源文件到二进制可以使开发和测试更容易,你可以根据自己的需求决定是否打包资源文件。 使用 bindata 可以打包资源文件到二进制可以使开发和测试更容易,你可以根据自己的需求决定是否打包资源文件。

View File

@@ -15,9 +15,9 @@ Cloudron 使得在您的服务器上运行 Gitea并保持其更新和安全
[![Install](/cloudron.svg)](https://cloudron.io/button.html?app=io.gitea.cloudronapp) [![Install](/cloudron.svg)](https://cloudron.io/button.html?app=io.gitea.cloudronapp)
Gitea软件包的维护地址在[这里](https://git.cloudron.io/cloudron/gitea-app). Gitea 软件包的维护地址在[这里](https://git.cloudron.io/cloudron/gitea-app).
这里有一个[demo 实例](https://my.demo.cloudron.io) (用户名: cloudron 密码: cloudron) 您可以在其中尝试运行Gitea。 这里有一个[demo 实例](https://my.demo.cloudron.io) (用户名: cloudron 密码: cloudron) 您可以在其中尝试运行 Gitea。
## Linode ## Linode

View File

@@ -33,7 +33,7 @@ helm install gitea -f values.yaml gitea/gitea
Gitea 附带了一个运行状况检查接口 `/api/healthz`,你可以像这样在 Kubernetes 中配置它: Gitea 附带了一个运行状况检查接口 `/api/healthz`,你可以像这样在 Kubernetes 中配置它:
```yaml ```yaml
livenessProbe: livenessProbe:
httpGet: httpGet:
path: /api/healthz path: /api/healthz
port: http port: http

View File

@@ -45,7 +45,7 @@ services:
- "2222:2222" - "2222:2222"
``` ```
请注意卷应由在配置文件中指定的UID/GID的用户/组所有。默认情况下Docker中的Gitea将使用uid:1000 gid:1000。如果需要您可以使用以下命令设置这些文件夹的所有权 请注意,卷应由在配置文件中指定的 UID/GID 的用户/组所有。默认情况下Docker 中的 Gitea 将使用 uid:1000 gid:1000。如果需要您可以使用以下命令设置这些文件夹的所有权
```sh ```sh
sudo chown 1000:1000 config/ data/ sudo chown 1000:1000 config/ data/
@@ -53,11 +53,11 @@ sudo chown 1000:1000 config/ data/
> 如果未为卷设置正确的权限,容器可能无法启动。 > 如果未为卷设置正确的权限,容器可能无法启动。
对于稳定版本,您可以使用 `:latest-rootless``:1-rootless`,或指定特定的版本,如: `@dockerVersion@-rootless`。如果您想使用最新的开发版本,则可以使用 `:dev-rootless` 标签。如果您想运行发布分支的最新提交,可以使用 `:1.x-dev-rootless` 标签,其中 x是 Gitea 的次要版本号(例如:`1.16-dev-rootless`)。 对于稳定版本,您可以使用 `:latest-rootless``:1-rootless`,或指定特定的版本,如: `@dockerVersion@-rootless`。如果您想使用最新的开发版本,则可以使用 `:dev-rootless` 标签。如果您想运行发布分支的最新提交,可以使用 `:1.x-dev-rootless` 标签,其中 x 是 Gitea 的次要版本号(例如:`1.16-dev-rootless`)。
## 自定义端口 ## 自定义端口
要将集成的SSHWeb服务器绑定到不同的端口请调整端口部分。通常只需更改主机端口并保持容器内的端口不变。 要将集成的 SSHWeb 服务器绑定到不同的端口,请调整端口部分。通常只需更改主机端口并保持容器内的端口不变。
```diff ```diff
version: "2" version: "2"
@@ -258,7 +258,7 @@ docker-compose up -d
除了上述的环境变量外,`app.ini` 中的任何设置都可以通过形式为 `GITEA__SECTION_NAME__KEY_NAME` 的环境变量进行设置或覆盖。这些设置在每次 Docker 容器启动时都会生效。完整信息请参考[这里](https://github.com/go-gitea/gitea/tree/main/contrib/environment-to-ini). 除了上述的环境变量外,`app.ini` 中的任何设置都可以通过形式为 `GITEA__SECTION_NAME__KEY_NAME` 的环境变量进行设置或覆盖。这些设置在每次 Docker 容器启动时都会生效。完整信息请参考[这里](https://github.com/go-gitea/gitea/tree/main/contrib/environment-to-ini).
这些环境变量可以在 `docker-compose.yml` 中传递给 Docker 容器。以下示例将启用 SMTP 邮件服务器,如果主机上设置了所需的环境变量 GITEA__mailer__FROM、GITEA__mailer__HOST、GITEA__mailer__PASSWD或者在与 `docker-compose.yml` 相同目录中的 `.env` 文件中设置了这些环境变量: 这些环境变量可以在 `docker-compose.yml` 中传递给 Docker 容器。以下示例将启用 SMTP 邮件服务器,如果主机上设置了所需的环境变量 GITEA**mailer**FROM、GITEA**mailer**HOST、GITEA**mailer**PASSWD或者在与 `docker-compose.yml` 相同目录中的 `.env` 文件中设置了这些环境变量:
```bash ```bash
... ...

View File

@@ -295,7 +295,7 @@ docker run -it --rm docker.gitea.com/gitea:1 gitea generate secret INTERNAL_TOKE
``` ```
```yaml ```yaml
... ---
services: services:
server: server:
environment: environment:

View File

@@ -90,11 +90,11 @@ aliases:
- `m` - 分钟 - `m` - 分钟
- `h` - 小时 - `h` - 小时
- `d` - 天(相当于8小时) - `d` - 天(相当于 8 小时)
- `w` - 周(相当于5天) - `w` - 周(相当于 5 天)
- `mo` - 月(相当于4周) - `mo` - 月(相当于 4 周)
用于指定时间的数字(`<number>`)也可以是小数,例如 `@1.5h` 表示一小时半。多个时间单位可以结合使用,例如 `@1h10m` 表示1小时10分钟。 用于指定时间的数字(`<number>`)也可以是小数,例如 `@1.5h` 表示一小时半。多个时间单位可以结合使用,例如 `@1h10m` 表示 1 小时 10 分钟。
提交消息示例: 提交消息示例:
@@ -116,7 +116,7 @@ Gitea 支持使用外部工单跟踪器,并可以在合并请求中创建对
下表说明了工单和合并请求的不同类型的交叉引用。在示例中,`User1/Repo1` 指的是使用引用的仓库,而 `UserZ/RepoZ` 表示另一个仓库。 下表说明了工单和合并请求的不同类型的交叉引用。在示例中,`User1/Repo1` 指的是使用引用的仓库,而 `UserZ/RepoZ` 表示另一个仓库。
| 在 User1/Repo1 中的引用 | Repo1 的工单是外部的 | RepoZ 的工单是外部的 | 渲染效果 | | 在 User1/Repo1 中的引用 | Repo1 的工单是外部的 | RepoZ 的工单是外部的 | 渲染效果 |
| ----------------------- | :-------------------: | :-------------------: | ------------------------------------------------ | | ----------------------- | :------------------: | :------------------: | --------------------------------------------- |
| `#1234` | 否 | - | 链接到 `User1/Repo1` 中的工单/合并请求 1234 | | `#1234` | 否 | - | 链接到 `User1/Repo1` 中的工单/合并请求 1234 |
| `!1234` | 否 | - | 链接到 `User1/Repo1` 中的工单/合并请求 1234 | | `!1234` | 否 | - | 链接到 `User1/Repo1` 中的工单/合并请求 1234 |
| `#1234` | 是 | - | 链接到 `User1/Repo1`_外部工单_ 1234 | | `#1234` | 是 | - | 链接到 `User1/Repo1`_外部工单_ 1234 |

View File

@@ -15,7 +15,7 @@ Gitea 支持对仓库进行权限管理,这样您就可以为不同的人员
在 Gitea 中,我们将仓库的子模块称为 `单元Unit`。现在我们有以下几个单元。 在 Gitea 中,我们将仓库的子模块称为 `单元Unit`。现在我们有以下几个单元。
| 名称 | 描述 | 权限 | | 名称 | 描述 | 权限 |
| ----------------- | --------------------------------------------------- | ------------ | | -------------- | ------------------------------ | --------- |
| 代码 | 访问源代码、文件、提交和分支。 | 读取 写入 | | 代码 | 访问源代码、文件、提交和分支。 | 读取 写入 |
| 工单 | 组织缺陷报告、任务和里程碑。 | 读取 写入 | | 工单 | 组织缺陷报告、任务和里程碑。 | 读取 写入 |
| 合并请求 | 启用合并请求和代码审核。 | 读取 写入 | | 合并请求 | 启用合并请求和代码审核。 | 读取 写入 |
@@ -29,7 +29,7 @@ Gitea 支持对仓库进行权限管理,这样您就可以为不同的人员
通过不同的权限,用户可以在这些单元上执行不同的操作。 通过不同的权限,用户可以在这些单元上执行不同的操作。
| 名称 | 读取 | 写入 | 管理员 | | 名称 | 读取 | 写入 | 管理员 |
| ----------------- | -------------------------------------------------- | ------------------------------ | ------------------------- | | -------------- | -------------------------------- | ------------------------------ | -------- |
| 代码 | 查看代码树、文件、提交、分支等。 | 推送代码。 | - | | 代码 | 查看代码树、文件、提交、分支等。 | 推送代码。 | - |
| 工单 | 查看工单并创建新工单。 | 添加标签、分配、关闭工单。 | - | | 工单 | 查看工单并创建新工单。 | 添加标签、分配、关闭工单。 | - |
| 合并请求 | 查看合并请求并创建新合并请求。 | 添加标签、分配、关闭合并请求。 | - | | 合并请求 | 查看合并请求并创建新合并请求。 | 添加标签、分配、关闭合并请求。 | - |

View File

@@ -53,7 +53,7 @@ aliases:
要从 Gitea 设置镜像到 GitHub您需要按照以下步骤进行操作 要从 Gitea 设置镜像到 GitHub您需要按照以下步骤进行操作
1. 创建一个具有选中 *public_repo* 选项的 [GitHub 个人访问令牌](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token)。 1. 创建一个具有选中 _public_repo_ 选项的 [GitHub 个人访问令牌](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token)。
2. 在 GitHub 上创建一个同名的仓库。与 Gitea 不同GitHub 不支持通过推送到远程来创建仓库。如果您的现有远程仓库与您的 Gitea 仓库具有相同的提交历史,您也可以使用现有的远程仓库。 2. 在 GitHub 上创建一个同名的仓库。与 Gitea 不同GitHub 不支持通过推送到远程来创建仓库。如果您的现有远程仓库与您的 Gitea 仓库具有相同的提交历史,您也可以使用现有的远程仓库。
3. 在您的 Gitea 仓库设置中,填写**Git 远程仓库 URL**`https://github.com/<your_github_group>/<your_github_project>.git` 3. 在您的 Gitea 仓库设置中,填写**Git 远程仓库 URL**`https://github.com/<your_github_group>/<your_github_project>.git`
4. 使用您的 GitHub 用户名填写**授权**字段,并将个人访问令牌作为**密码**。 4. 使用您的 GitHub 用户名填写**授权**字段,并将个人访问令牌作为**密码**。
@@ -66,7 +66,7 @@ aliases:
要从 Gitea 设置镜像到 GitLab您需要按照以下步骤进行操作 要从 Gitea 设置镜像到 GitLab您需要按照以下步骤进行操作
1. 创建具有 *write_repository* 作用域的 [GitLab 个人访问令牌](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html)。 1. 创建具有 _write_repository_ 作用域的 [GitLab 个人访问令牌](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html)。
2. 填写**Git 远程仓库 URL**`https://<destination host>/<your_gitlab_group_or_name>/<your_gitlab_project>.git` 2. 填写**Git 远程仓库 URL**`https://<destination host>/<your_gitlab_group_or_name>/<your_gitlab_project>.git`
3. 在**授权**字段中填写 `oauth2` 作为**用户名**,并将您的 GitLab 个人访问令牌作为**密码**。 3. 在**授权**字段中填写 `oauth2` 作为**用户名**,并将您的 GitLab 个人访问令牌作为**密码**。
4. 选择**添加推送镜像**以保存配置。 4. 选择**添加推送镜像**以保存配置。
@@ -77,7 +77,7 @@ aliases:
要从 Gitea 设置镜像到 Bitbucket您需要按照以下步骤进行操作 要从 Gitea 设置镜像到 Bitbucket您需要按照以下步骤进行操作
1. 创建一个具有选中 *Repository Write* 选项的 [Bitbucket 应用密码](https://support.atlassian.com/bitbucket-cloud/docs/app-passwords/)。 1. 创建一个具有选中 _Repository Write_ 选项的 [Bitbucket 应用密码](https://support.atlassian.com/bitbucket-cloud/docs/app-passwords/)。
2. 填写**Git 远程仓库 URL**`https://bitbucket.org/<your_bitbucket_group_or_name>/<your_bitbucket_project>.git` 2. 填写**Git 远程仓库 URL**`https://bitbucket.org/<your_bitbucket_group_or_name>/<your_bitbucket_project>.git`
3. 使用您的 Bitbucket 用户名填写**授权**字段,并将应用密码作为**密码**。 3. 使用您的 Bitbucket 用户名填写**授权**字段,并将应用密码作为**密码**。
4. 选择**添加推送镜像**以保存配置。 4. 选择**添加推送镜像**以保存配置。

View File

@@ -41,7 +41,7 @@ a/b/c/d.json
所有变量都必须采用`$VAR``${VAR}`的形式。要转义扩展,使用双重`$$`,例如`$$VAR``$${VAR}` 所有变量都必须采用`$VAR``${VAR}`的形式。要转义扩展,使用双重`$$`,例如`$$VAR``$${VAR}`
| 变量 | 扩展为 | 可转换 | | 变量 | 扩展为 | 可转换 |
| -------------------- | --------------------------------------------------- | ------------- | | -------------------- | ----------------------------- | ------ |
| REPO_NAME | 生成的仓库名称 | ✓ | | REPO_NAME | 生成的仓库名称 | ✓ |
| TEMPLATE_NAME | 模板仓库名称 | ✓ | | TEMPLATE_NAME | 模板仓库名称 | ✓ |
| REPO_DESCRIPTION | 生成的仓库描述 | ✘ | | REPO_DESCRIPTION | 生成的仓库描述 | ✘ |
@@ -64,7 +64,7 @@ Gitea `1.12.0` 添加了一些转换器以应用于上述适用的变量。
`go-sdk` 传递给可用的转换器的效果如下... `go-sdk` 传递给可用的转换器的效果如下...
| 转换器 | 效果 | | 转换器 | 效果 |
| ----------- | ------------ | | ------ | ------ |
| SNAKE | go_sdk | | SNAKE | go_sdk |
| KEBAB | go-sdk | | KEBAB | go-sdk |
| CAMEL | goSdk | | CAMEL | goSdk |

View File

@@ -6,7 +6,6 @@ sidebar_position: 10
aliases: aliases:
- /zh-cn/authentication - /zh-cn/authentication
--- ---
# 认证 # 认证
@@ -26,6 +25,6 @@ ENABLE_REVERSE_PROXY_AUTHENTICATION = true
如果设置了 `ENABLE_REVERSE_PROXY_FULL_NAME=true`,则用户的全名会从 `X-WEBAUTH-FULLNAME` 读取,这样在自动创建用户时将使用这个字段作为用户全名,你也可以通过修改 `REVERSE_PROXY_AUTHENTICATION_FULL_NAME` 来变更 HTTP 头。 如果设置了 `ENABLE_REVERSE_PROXY_FULL_NAME=true`,则用户的全名会从 `X-WEBAUTH-FULLNAME` 读取,这样在自动创建用户时将使用这个字段作为用户全名,你也可以通过修改 `REVERSE_PROXY_AUTHENTICATION_FULL_NAME` 来变更 HTTP 头。
你也可以通过修改 `REVERSE_PROXY_TRUSTED_PROXIES` 来设置反向代理的IP地址范围加强安全性默认值是 `127.0.0.0/8,::1/128`。 通过 `REVERSE_PROXY_LIMIT` 可以设置最多信任几级反向代理。 你也可以通过修改 `REVERSE_PROXY_TRUSTED_PROXIES` 来设置反向代理的 IP 地址范围,加强安全性,默认值是 `127.0.0.0/8,::1/128`。 通过 `REVERSE_PROXY_LIMIT` 可以设置最多信任几级反向代理。
注意:反向代理认证不支持认证 APIAPI 仍旧需要用 access token 来进行认证。 注意:反向代理认证不支持认证 APIAPI 仍旧需要用 access token 来进行认证。

View File

@@ -8,11 +8,11 @@ aliases:
# 备份与恢复 # 备份与恢复
Gitea 已经实现了 `dump` 命令可以用来备份所有需要的文件到一个zip压缩文件。该压缩文件可以被用来进行数据恢复。 Gitea 已经实现了 `dump` 命令可以用来备份所有需要的文件到一个 zip 压缩文件。该压缩文件可以被用来进行数据恢复。
## 备份命令 (`dump`) ## 备份命令 (`dump`)
先转到git用户的权限: `su git`. 再Gitea目录运行 `./gitea dump`。一般会显示类似如下的输出: 先转到 git 用户的权限: `su git`. 再 Gitea 目录运行 `./gitea dump`。一般会显示类似如下的输出:
``` ```
2016/12/27 22:32:09 Creating tmp work dir: /tmp/gitea-dump-417443001 2016/12/27 22:32:09 Creating tmp work dir: /tmp/gitea-dump-417443001
@@ -25,11 +25,11 @@ Gitea 已经实现了 `dump` 命令可以用来备份所有需要的文件到一
最后生成的 `gitea-dump-1482906742.zip` 文件将会包含如下内容: 最后生成的 `gitea-dump-1482906742.zip` 文件将会包含如下内容:
* `custom` - 所有保存在 `custom/` 目录下的配置和自定义的文件。 - `custom` - 所有保存在 `custom/` 目录下的配置和自定义的文件。
* `data` - 数据目录下的所有内容不包含使用文件session的文件。该目录包含 `attachments`, `avatars`, `lfs`, `indexers`, 如果使用sqlite 还会包含 sqlite 数据库文件。 - `data` - 数据目录下的所有内容不包含使用文件 session 的文件。该目录包含 `attachments`, `avatars`, `lfs`, `indexers`, 如果使用 sqlite 还会包含 sqlite 数据库文件。
* `gitea-db.sql` - 数据库dump出来的 SQL。 - `gitea-db.sql` - 数据库 dump 出来的 SQL。
* `gitea-repo.zip` - Git仓库压缩文件。 - `gitea-repo.zip` - Git 仓库压缩文件。
* `log/` - Logs文件如果用作迁移不是必须的。 - `log/` - Logs 文件,如果用作迁移不是必须的。
中间备份文件将会在临时目录进行创建,如果您要重新指定临时目录,可以用 `--tempdir` 参数,或者用 `TMPDIR` 环境变量。 中间备份文件将会在临时目录进行创建,如果您要重新指定临时目录,可以用 `--tempdir` 参数,或者用 `TMPDIR` 环境变量。

View File

@@ -59,7 +59,7 @@ aliases:
- 选项: - 选项:
- `--email`:要删除的用户的电子邮件。 - `--email`:要删除的用户的电子邮件。
- `--username`:要删除的用户的用户名。 - `--username`:要删除的用户的用户名。
- `--id`要删除的用户的ID。 - `--id`:要删除的用户的 ID。
- 必须提供 `--id``--username``--email` 中的一个。如果提供多个,则所有条件必须匹配。 - 必须提供 `--id``--username``--email` 中的一个。如果提供多个,则所有条件必须匹配。
- 示例: - 示例:
- `gitea admin user delete --id 1` - `gitea admin user delete --id 1`
@@ -281,12 +281,12 @@ aliases:
### cert ### cert
生成自签名的SSL证书。将输出到当前目录下的`cert.pem``key.pem`文件中,并且会覆盖任何现有文件。 生成自签名的 SSL 证书。将输出到当前目录下的`cert.pem``key.pem`文件中,并且会覆盖任何现有文件。
- 选项: - 选项:
- `--host value`逗号分隔的主机名和IP地址列表此证书适用于这些主机。支持使用通配符。必填。 - `--host value`:逗号分隔的主机名和 IP 地址列表,此证书适用于这些主机。支持使用通配符。必填。
- `--ecdsa-curve value`用于生成密钥的ECDSA曲线。可选。有效选项为P224、P256、P384、P521。 - `--ecdsa-curve value`:用于生成密钥的 ECDSA 曲线。可选。有效选项为 P224、P256、P384、P521。
- `--rsa-bits value`要生成的RSA密钥的大小。可选。如果设置了--ecdsa-curve则忽略此选项。默认值2048 - `--rsa-bits value`:要生成的 RSA 密钥的大小。可选。如果设置了--ecdsa-curve则忽略此选项。默认值2048
- `--start-date value`:证书的创建日期。可选。(格式:`Jan 1 15:04:05 2011`)。 - `--start-date value`:证书的创建日期。可选。(格式:`Jan 1 15:04:05 2011`)。
- `--duration value`证书有效期。可选。默认值8760h0m0s - `--duration value`证书有效期。可选。默认值8760h0m0s
- `--ca`:如果提供此选项,则证书将生成自己的证书颁发机构。可选。 - `--ca`:如果提供此选项,则证书将生成自己的证书颁发机构。可选。
@@ -295,18 +295,18 @@ aliases:
### dump ### dump
将所有文件和数据库导出到一个zip文件中。输出文件将保存在当前目录下类似于`gitea-dump-1482906742.zip` 将所有文件和数据库导出到一个 zip 文件中。输出文件将保存在当前目录下,类似于`gitea-dump-1482906742.zip`
- 选项: - 选项:
- `--file name``-f name`指定要创建的导出文件的名称。可选。默认值gitea-dump-[timestamp].zip - `--file name``-f name`指定要创建的导出文件的名称。可选。默认值gitea-dump-[timestamp].zip
- `--tempdir path``-t path`:指定临时目录的路径。可选。(默认值:/tmp - `--tempdir path``-t path`:指定临时目录的路径。可选。(默认值:/tmp
- `--skip-repository``-R`:跳过仓库的导出。可选。 - `--skip-repository``-R`:跳过仓库的导出。可选。
- `--skip-custom-dir`:跳过自定义目录的导出。可选。 - `--skip-custom-dir`:跳过自定义目录的导出。可选。
- `--skip-lfs-data`跳过LFS数据的导出。可选。 - `--skip-lfs-data`:跳过 LFS 数据的导出。可选。
- `--skip-attachment-data`:跳过附件数据的导出。可选。 - `--skip-attachment-data`:跳过附件数据的导出。可选。
- `--skip-package-data`:跳过包数据的导出。可选。 - `--skip-package-data`:跳过包数据的导出。可选。
- `--skip-log`:跳过日志数据的导出。可选。 - `--skip-log`:跳过日志数据的导出。可选。
- `--database``-d`指定数据库的SQL语法。可选。 - `--database``-d`:指定数据库的 SQL 语法。可选。
- `--verbose``-V`:如果提供此选项,显示附加详细信息。可选。 - `--verbose``-V`:如果提供此选项,显示附加详细信息。可选。
- `--type`设置导出的格式。可选。默认值zip - `--type`设置导出的格式。可选。默认值zip
- 示例: - 示例:
@@ -409,19 +409,19 @@ gitea doctor recreate-table
- 命令: - 命令:
- `shutdown`: 优雅地关闭运行中的进程 - `shutdown`: 优雅地关闭运行中的进程
- `restart`: 优雅地重新启动运行中的进程对于Windows服务器尚未实现 - `restart`: 优雅地重新启动运行中的进程(对于 Windows 服务器尚未实现)
- `flush-queues`: 刷新运行中的进程中的队列 - `flush-queues`: 刷新运行中的进程中的队列
- 选项: - 选项:
- `--timeout value`: 刷新过程的超时时间(默认值: 1m0s - `--timeout value`: 刷新过程的超时时间(默认值: 1m0s
- `--non-blocking`: 设置为true以在返回之前不等待刷新完成 - `--non-blocking`: 设置为 true以在返回之前不等待刷新完成
- `logging`: 调整日志命令 - `logging`: 调整日志命令
- 命令: - 命令:
- `pause`: 暂停日志记录 - `pause`: 暂停日志记录
- 注意: - 注意:
- 如果日志级别低于此级别日志级别将被临时提升为INFO。 - 如果日志级别低于此级别,日志级别将被临时提升为 INFO。
- Gitea将在一定程度上缓冲日志并在超过该点后丢弃日志。 - Gitea 将在一定程度上缓冲日志,并在超过该点后丢弃日志。
- `resume`: 恢复日志记录 - `resume`: 恢复日志记录
- `release-and-reopen`: 使Gitea释放和重新打开用于日志记录的文件和连接相当于向Gitea发送SIGUSR1信号 - `release-and-reopen`: 使 Gitea 释放和重新打开用于日志记录的文件和连接(相当于向 Gitea 发送 SIGUSR1 信号)。
- `remove name`: 删除指定的日志记录器 - `remove name`: 删除指定的日志记录器
- 选项: - 选项:
- `--group group`, `-g group`: 从中删除子记录器的组(默认为`default` - `--group group`, `-g group`: 从中删除子记录器的组(默认为`default`
@@ -437,7 +437,7 @@ gitea doctor recreate-table
- `--expression value`, `-e value`: 日志记录器的匹配表达式 - `--expression value`, `-e value`: 日志记录器的匹配表达式
- `--prefix value`, `-p value`: 日志记录器的前缀 - `--prefix value`, `-p value`: 日志记录器的前缀
- `--color`: 在日志中使用颜色 - `--color`: 在日志中使用颜色
- `--stderr`: 将控制台日志输出到stderr - 仅适用于控制台 - `--stderr`: 将控制台日志输出到 stderr - 仅适用于控制台
- `file`: 添加文件日志记录器 - `file`: 添加文件日志记录器
- 选项: - 选项:
- `--group value`, `-g value`: 要添加日志记录器的组 - 默认为"default" - `--group value`, `-g value`: 要添加日志记录器的组 - 默认为"default"
@@ -467,9 +467,9 @@ gitea doctor recreate-table
- `--color`: 在日志中使用颜色 - `--color`: 在日志中使用颜色
- `--reconnect-on-message`, `-R`: 对于每个消息重新连接主机 - `--reconnect-on-message`, `-R`: 对于每个消息重新连接主机
- `--reconnect`, `-r`: 连接中断时重新连接主机 - `--reconnect`, `-r`: 连接中断时重新连接主机
- `--protocol value`, `-P value`: 设置要使用的协议tcp、unixudp默认为tcp - `--protocol value`, `-P value`: 设置要使用的协议tcp、unixudp默认为 tcp
- `--address value`, `-a value`: 要连接到的主机地址和端口(默认为:7020 - `--address value`, `-a value`: 要连接到的主机地址和端口(默认为:7020
- `smtp`: 添加SMTP日志记录器 - `smtp`: 添加 SMTP 日志记录器
- 选项: - 选项:
- `--group value`, `-g value`: 要添加日志记录器的组 - 默认为"default" - `--group value`, `-g value`: 要添加日志记录器的组 - 默认为"default"
- `--name value`, `-n value`: 新日志记录器的名称 - 默认为模式 - `--name value`, `-n value`: 新日志记录器的名称 - 默认为模式

View File

@@ -8,30 +8,30 @@ aliases:
# 配置说明 # 配置说明
这是针对Gitea配置文件的说明你可以了解Gitea的强大配置。需要说明的是你的所有改变请修改 `custom/conf/app.ini` 文件而不是源文件。 这是针对 Gitea 配置文件的说明,你可以了解 Gitea 的强大配置。需要说明的是,你的所有改变请修改 `custom/conf/app.ini` 文件而不是源文件。
所有默认值可以通过 [app.example.ini](https://github.com/go-gitea/gitea/blob/main/custom/conf/app.example.ini) 查看到。 所有默认值可以通过 [app.example.ini](https://github.com/go-gitea/gitea/blob/main/custom/conf/app.example.ini) 查看到。
如果你发现 `%(X)s` 这样的内容,请查看 [ini](https://github.com/go-ini/ini/#recursive-values) 这里的说明。 如果你发现 `%(X)s` 这样的内容,请查看 [ini](https://github.com/go-ini/ini/#recursive-values) 这里的说明。
标注了 :exclamation: 的配置项表明除非你真的理解这个配置项的意义,否则最好使用默认值。 标注了 :exclamation: 的配置项表明除非你真的理解这个配置项的意义,否则最好使用默认值。
## ⚠️时效性警告⚠️ ## ⚠️ 时效性警告 ⚠️
此文档的内容可能过于陈旧或者错误,请参考英文文档。 此文档的内容可能过于陈旧或者错误,请参考英文文档。
## Overall (`DEFAULT`) ## Overall (`DEFAULT`)
- `APP_NAME`: 应用名称,改成你希望的名字。 - `APP_NAME`: 应用名称,改成你希望的名字。
- `RUN_USER`: 运行Gitea的用户推荐使用 `git`如果在你自己的个人电脑使用改成你自己的用户名。如果设置不正确Gitea可能崩溃。 - `RUN_USER`: 运行 Gitea 的用户,推荐使用 `git`如果在你自己的个人电脑使用改成你自己的用户名。如果设置不正确Gitea 可能崩溃。
- `RUN_MODE`: 从性能考虑,如果在产品级的服务上改成 `prod`。如果您使用安装向导安装的那么会自动设置为 `prod` - `RUN_MODE`: 从性能考虑,如果在产品级的服务上改成 `prod`。如果您使用安装向导安装的那么会自动设置为 `prod`
## Repository (`repository`) ## Repository (`repository`)
- `ROOT`: 存放git工程的根目录。这里必须填绝对路径默认值是 `~/<username>/gitea-repositories` - `ROOT`: 存放 git 工程的根目录。这里必须填绝对路径,默认值是 `~/<username>/gitea-repositories`
- `SCRIPT_TYPE`: 服务器支持的Shell类型通常是 `bash`,但有些服务器也有可能是 `sh` - `SCRIPT_TYPE`: 服务器支持的 Shell 类型,通常是 `bash`,但有些服务器也有可能是 `sh`
- `ANSI_CHARSET`: 默认字符编码。 - `ANSI_CHARSET`: 默认字符编码。
- `FORCE_PRIVATE`: 强制所有git工程必须私有。 - `FORCE_PRIVATE`: 强制所有 git 工程必须私有。
- `DEFAULT_PRIVATE`: 默认创建的git工程为私有。 可以是`last`, `private``public`。默认值是 `last`表示用户最后创建的Repo的选择。 - `DEFAULT_PRIVATE`: 默认创建的 git 工程为私有。 可以是`last`, `private``public`。默认值是 `last`表示用户最后创建的 Repo 的选择。
- `DEFAULT_PUSH_CREATE_PRIVATE`: **true**: 通过 ``push-to-create`` 方式创建的仓库是否默认为私有仓库. - `DEFAULT_PUSH_CREATE_PRIVATE`: **true**: 通过 `push-to-create` 方式创建的仓库是否默认为私有仓库.
- `MAX_CREATION_LIMIT`: 全局最大每个用户创建的git工程数目 `-1` 表示没限制。 - `MAX_CREATION_LIMIT`: 全局最大每个用户创建的 git 工程数目, `-1` 表示没限制。
### Repository - Release (`repository.release`) ### Repository - Release (`repository.release`)
@@ -60,16 +60,16 @@ aliases:
- `PROTOCOL`: 可选 `http``https` - `PROTOCOL`: 可选 `http``https`
- `DOMAIN`: 服务器域名。 - `DOMAIN`: 服务器域名。
- `ROOT_URL`: Gitea服务器的对外 URL。 - `ROOT_URL`: Gitea 服务器的对外 URL。
- `HTTP_ADDR`: HTTP 监听地址。 - `HTTP_ADDR`: HTTP 监听地址。
- `HTTP_PORT`: HTTP 监听端口。 - `HTTP_PORT`: HTTP 监听端口。
- `DISABLE_SSH`: 是否禁用SSH。 - `DISABLE_SSH`: 是否禁用 SSH。
- `START_SSH_SERVER`: 是否启用内部SSH服务器。 - `START_SSH_SERVER`: 是否启用内部 SSH 服务器。
- `SSH_PORT`: SSH端口默认为 `22` - `SSH_PORT`: SSH 端口,默认为 `22`
- `OFFLINE_MODE`: 针对静态和头像文件禁用 CDN。 - `OFFLINE_MODE`: 针对静态和头像文件禁用 CDN。
- `DISABLE_ROUTER_LOG`: 关闭日志中的路由日志。 - `DISABLE_ROUTER_LOG`: 关闭日志中的路由日志。
- `CERT_FILE`: 启用HTTPS的证书文件。 - `CERT_FILE`: 启用 HTTPS 的证书文件。
- `KEY_FILE`: 启用HTTPS的密钥文件。 - `KEY_FILE`: 启用 HTTPS 的密钥文件。
- `STATIC_ROOT_PATH`: 存放模板和静态文件的根目录,默认是 Gitea 的根目录。 - `STATIC_ROOT_PATH`: 存放模板和静态文件的根目录,默认是 Gitea 的根目录。
- `STATIC_CACHE_TIME`: **6h**: 静态资源文件,包括 `custom/`, `public/` 和所有上传的头像的浏览器缓存时间。 - `STATIC_CACHE_TIME`: **6h**: 静态资源文件,包括 `custom/`, `public/` 和所有上传的头像的浏览器缓存时间。
- `ENABLE_GZIP`: 启用实时生成的数据启用 GZIP 压缩,不包括静态资源。 - `ENABLE_GZIP`: 启用实时生成的数据启用 GZIP 压缩,不包括静态资源。
@@ -86,24 +86,24 @@ aliases:
- `NAME`: 数据库名称。 - `NAME`: 数据库名称。
- `USER`: 数据库用户名。 - `USER`: 数据库用户名。
- `PASSWD`: 数据库用户密码。 - `PASSWD`: 数据库用户密码。
- `SSL_MODE`: MySQL 或 PostgreSQL数据库是否启用SSL模式。 - `SSL_MODE`: MySQL 或 PostgreSQL 数据库是否启用 SSL 模式。
- `CHARSET`: **utf8mb4**: 仅当数据库为 MySQL 时有效, 可以为 "utf8" 或 "utf8mb4"。注意:如果使用 "utf8mb4",你的 MySQL InnoDB 版本必须在 5.6 以上。 - `CHARSET`: **utf8mb4**: 仅当数据库为 MySQL 时有效, 可以为 "utf8" 或 "utf8mb4"。注意:如果使用 "utf8mb4",你的 MySQL InnoDB 版本必须在 5.6 以上。
- `PATH`: SQLite3 数据文件存放路径。 - `PATH`: SQLite3 数据文件存放路径。
- `LOG_SQL`: **false**: 显示生成的SQL默认为真。 - `LOG_SQL`: **false**: 显示生成的 SQL默认为真。
- `MAX_IDLE_CONNS` **0**: 最大空闲数据库连接 - `MAX_IDLE_CONNS` **0**: 最大空闲数据库连接
- `CONN_MAX_LIFETIME` **3s**: 数据库连接最大存活时间 - `CONN_MAX_LIFETIME` **3s**: 数据库连接最大存活时间
## Indexer (`indexer`) ## Indexer (`indexer`)
- `ISSUE_INDEXER_TYPE`: **bleve**: 工单索引类型,当前支持 `bleve`, `db``elasticsearch`,当为 `db` 时其它工单索引项可不用设置。 - `ISSUE_INDEXER_TYPE`: **bleve**: 工单索引类型,当前支持 `bleve`, `db``elasticsearch`,当为 `db` 时其它工单索引项可不用设置。
- `ISSUE_INDEXER_CONN_STR`: ****: 工单索引连接字符串,仅当 ISSUE_INDEXER_TYPE 为 `elasticsearch` 时有效。例如: http://elastic:changeme@localhost:9200 - `ISSUE_INDEXER_CONN_STR`: \*\*\*\*: 工单索引连接字符串,仅当 ISSUE_INDEXER_TYPE 为 `elasticsearch` 时有效。例如: http://elastic:changeme@localhost:9200
- `ISSUE_INDEXER_NAME`: **gitea_issues**: 工单索引名称,仅当 ISSUE_INDEXER_TYPE 为 `elasticsearch` 时有效。 - `ISSUE_INDEXER_NAME`: **gitea_issues**: 工单索引名称,仅当 ISSUE_INDEXER_TYPE 为 `elasticsearch` 时有效。
- `ISSUE_INDEXER_PATH`: **indexers/issues.bleve**: 工单索引文件存放路径,当索引类型为 `bleve` 时有效。 - `ISSUE_INDEXER_PATH`: **indexers/issues.bleve**: 工单索引文件存放路径,当索引类型为 `bleve` 时有效。
- `REPO_INDEXER_ENABLED`: **false**: 是否启用代码搜索启用后会占用比较大的磁盘空间如果是bleve可能需要占用约6倍存储空间)。 - `REPO_INDEXER_ENABLED`: **false**: 是否启用代码搜索(启用后会占用比较大的磁盘空间,如果是 bleve 可能需要占用约 6 倍存储空间)。
- `REPO_INDEXER_TYPE`: **bleve**: 代码搜索引擎类型,可以为 `bleve` 或者 `elasticsearch` - `REPO_INDEXER_TYPE`: **bleve**: 代码搜索引擎类型,可以为 `bleve` 或者 `elasticsearch`
- `REPO_INDEXER_PATH`: **indexers/repos.bleve**: 用于代码搜索的索引文件路径。 - `REPO_INDEXER_PATH`: **indexers/repos.bleve**: 用于代码搜索的索引文件路径。
- `REPO_INDEXER_CONN_STR`: ****: 代码搜索引擎连接字符串,当 `REPO_INDEXER_TYPE``elasticsearch` 时有效。例如: http://elastic:changeme@localhost:9200 - `REPO_INDEXER_CONN_STR`: \*\*\*\*: 代码搜索引擎连接字符串,当 `REPO_INDEXER_TYPE``elasticsearch` 时有效。例如: http://elastic:changeme@localhost:9200
- `REPO_INDEXER_NAME`: **gitea_codes**: 代码搜索引擎的名字,当 `REPO_INDEXER_TYPE``elasticsearch` 时有效。 - `REPO_INDEXER_NAME`: **gitea_codes**: 代码搜索引擎的名字,当 `REPO_INDEXER_TYPE``elasticsearch` 时有效。
- `MAX_FILE_SIZE`: **1048576**: 进行解析的源代码文件的最大长度,小于该值时才会索引。 - `MAX_FILE_SIZE`: **1048576**: 进行解析的源代码文件的最大长度,小于该值时才会索引。
@@ -152,11 +152,11 @@ aliases:
## Webhook (`webhook`) ## Webhook (`webhook`)
- `QUEUE_LENGTH`: 说明: Hook 任务队列长度。 - `QUEUE_LENGTH`: 说明: Hook 任务队列长度。
- `DELIVER_TIMEOUT`: 请求webhooks的超时时间单位秒。 - `DELIVER_TIMEOUT`: 请求 webhooks 的超时时间,单位秒。
- `SKIP_TLS_VERIFY`: 是否允许不安全的证书。 - `SKIP_TLS_VERIFY`: 是否允许不安全的证书。
- `PAGING_NUM`: 每页显示的Webhook 历史数量。 - `PAGING_NUM`: 每页显示的 Webhook 历史数量。
- `PROXY_URL`: ****: 代理服务器网址,支持 http://, https//, socks://, 为空将使用环境变量中的 http_proxy/https_proxy 设置。 - `PROXY_URL`: \*\*\*\*: 代理服务器网址,支持 http://, https//, socks://, 为空将使用环境变量中的 http_proxy/https_proxy 设置。
- `PROXY_HOSTS`: ****: 逗号分隔的需要代理的域名或IP地址。支持 * 号匹配符,使用 ** 匹配所有域名和IP地址。 - `PROXY_HOSTS`: \***_: 逗号分隔的需要代理的域名或 IP 地址。支持 _ 号匹配符,使用 ** 匹配所有域名和 IP 地址。
## Mailer (`mailer`) ## Mailer (`mailer`)
@@ -175,8 +175,8 @@ aliases:
- `ENABLED`: **true**: 是否启用。 - `ENABLED`: **true**: 是否启用。
- `ADAPTER`: **memory**: 缓存引擎,可以为 `memory`, `redis``memcache` - `ADAPTER`: **memory**: 缓存引擎,可以为 `memory`, `redis``memcache`
- `INTERVAL`: **60**: 只对内存缓存有效GC间隔单位秒。 - `INTERVAL`: **60**: 只对内存缓存有效GC 间隔,单位秒。
- `HOST`: **_empty_**: 针对redismemcache有效主机地址和端口。 - `HOST`: **_empty_**: 针对 redismemcache 有效,主机地址和端口。
- Redis: `network=tcp,addr=127.0.0.1:6379,password=macaron,db=0,pool_size=100,idle_timeout=180` - Redis: `network=tcp,addr=127.0.0.1:6379,password=macaron,db=0,pool_size=100,idle_timeout=180`
- Memache: `127.0.0.1:9090;127.0.0.1:9091` - Memache: `127.0.0.1:9090;127.0.0.1:9091`
- `ITEM_TTL`: **16h**: 缓存项目失效时间,设置为 -1 则禁用缓存。 - `ITEM_TTL`: **16h**: 缓存项目失效时间,设置为 -1 则禁用缓存。
@@ -192,7 +192,7 @@ aliases:
- `PROVIDER`: Session 内容存储方式,可选 `memory`, `file`, `redis``mysql` - `PROVIDER`: Session 内容存储方式,可选 `memory`, `file`, `redis``mysql`
- `PROVIDER_CONFIG`: 如果是文件,那么这里填根目录;其他的要填主机地址和端口。 - `PROVIDER_CONFIG`: 如果是文件,那么这里填根目录;其他的要填主机地址和端口。
- `COOKIE_SECURE`: **_empty_**: `true``false`。启用此选项以强制在所有会话访问中使用 HTTPS。如果没有设置当 ROOT_URL 是 https 链接的时候默认设置为 true。 - `COOKIE_SECURE`: **_empty_**: `true``false`。启用此选项以强制在所有会话访问中使用 HTTPS。如果没有设置当 ROOT_URL 是 https 链接的时候默认设置为 true。
- `GC_INTERVAL_TIME`: Session失效时间。 - `GC_INTERVAL_TIME`: Session 失效时间。
## Picture (`picture`) ## Picture (`picture`)
@@ -200,13 +200,13 @@ aliases:
- `DISABLE_GRAVATAR`: 开启则只使用内部头像。 - `DISABLE_GRAVATAR`: 开启则只使用内部头像。
- `ENABLE_FEDERATED_AVATAR`: 启用头像联盟支持 (参见 http://www.libravatar.org) - `ENABLE_FEDERATED_AVATAR`: 启用头像联盟支持 (参见 http://www.libravatar.org)
- `AVATAR_STORAGE_TYPE`: **local**: 头像存储类型,可以为 `local``minio`,分别支持本地文件系统和 minio 兼容的API。 - `AVATAR_STORAGE_TYPE`: **local**: 头像存储类型,可以为 `local``minio`,分别支持本地文件系统和 minio 兼容的 API。
- `AVATAR_UPLOAD_PATH`: **data/avatars**: 存储头像的文件系统路径。 - `AVATAR_UPLOAD_PATH`: **data/avatars**: 存储头像的文件系统路径。
- `AVATAR_MAX_WIDTH`: **4096**: 头像最大宽度,单位像素。 - `AVATAR_MAX_WIDTH`: **4096**: 头像最大宽度,单位像素。
- `AVATAR_MAX_HEIGHT`: **4096**: 头像最大高度,单位像素。 - `AVATAR_MAX_HEIGHT`: **4096**: 头像最大高度,单位像素。
- `AVATAR_MAX_FILE_SIZE`: **1048576** (1MiB): 头像最大大小。 - `AVATAR_MAX_FILE_SIZE`: **1048576** (1MiB): 头像最大大小。
- `REPOSITORY_AVATAR_STORAGE_TYPE`: **local**: 仓库头像存储类型,可以为 `local``minio`,分别支持本地文件系统和 minio 兼容的API。 - `REPOSITORY_AVATAR_STORAGE_TYPE`: **local**: 仓库头像存储类型,可以为 `local``minio`,分别支持本地文件系统和 minio 兼容的 API。
- `REPOSITORY_AVATAR_UPLOAD_PATH`: **data/repo-avatars**: 存储仓库头像的路径。 - `REPOSITORY_AVATAR_UPLOAD_PATH`: **data/repo-avatars**: 存储仓库头像的路径。
- `REPOSITORY_AVATAR_FALLBACK`: **none**: 当头像丢失时的处理方式 - `REPOSITORY_AVATAR_FALLBACK`: **none**: 当头像丢失时的处理方式
- none = 不显示头像 - none = 不显示头像
@@ -230,7 +230,7 @@ aliases:
- `MINIO_BASE_PATH`: **attachments/**: Minio base path on the bucket仅当 `STORAGE_TYPE``minio` 时有效。 - `MINIO_BASE_PATH`: **attachments/**: Minio base path on the bucket仅当 `STORAGE_TYPE``minio` 时有效。
- `MINIO_USE_SSL`: **false**: Minio enabled ssl仅当 `STORAGE_TYPE``minio` 时有效。 - `MINIO_USE_SSL`: **false**: Minio enabled ssl仅当 `STORAGE_TYPE``minio` 时有效。
关于 `ALLOWED_TYPES` 在 (*)unix 系统中可以使用`file -I <filename>` 来快速获得对应的 `MIME type` 关于 `ALLOWED_TYPES` 在 (\*)unix 系统中可以使用`file -I <filename>` 来快速获得对应的 `MIME type`
```shell ```shell
$ file -I test00.tar.xz $ file -I test00.tar.xz
@@ -257,7 +257,7 @@ test01.xls: application/vnd.ms-excel; charset=binary
- `Start`: 请求开始时间。 - `Start`: 请求开始时间。
- `ResponseWriter`: - `ResponseWriter`:
- `RequestID`: 从请求头中解析得到的与 `REQUEST_ID_HEADERS` 匹配的值,默认: “`-`”。 - `RequestID`: 从请求头中解析得到的与 `REQUEST_ID_HEADERS` 匹配的值,默认: “`-`”。
- 一定要谨慎配置该模板否则可能会引起panic. - 一定要谨慎配置该模板,否则可能会引起 panic.
- `REQUEST_ID_HEADERS`: 从 Request Header 中匹配指定 Key并将匹配到的值输出到 `access.log` 中(需要在 `ACCESS_LOG_TEMPLATE` 中指定输出位置)。如果在该参数中配置多个 Key 请用逗号分割,程序将按照配置的顺序进行匹配。 - `REQUEST_ID_HEADERS`: 从 Request Header 中匹配指定 Key并将匹配到的值输出到 `access.log` 中(需要在 `ACCESS_LOG_TEMPLATE` 中指定输出位置)。如果在该参数中配置多个 Key 请用逗号分割,程序将按照配置的顺序进行匹配。
- 示例: - 示例:
- 请求头: X-Request-ID: **test-id-123** - 请求头: X-Request-ID: **test-id-123**
@@ -271,22 +271,22 @@ test01.xls: application/vnd.ms-excel; charset=binary
- `SCHEDULE` 所接受的格式 - `SCHEDULE` 所接受的格式
- 完整 crontab 控制, 例如 `* * * * * ?` - 完整 crontab 控制, 例如 `* * * * * ?`
- 描述符, 例如 `@midnight`, `@every 1h30m` ... - 描述符, 例如 `@midnight`, `@every 1h30m` ...
- 更多细节参见 [cron api文档](https://pkg.go.dev/github.com/gogs/cron@v0.0.0-20171120032916-9f6c956d3e14) - 更多细节参见 [cron api 文档](https://pkg.go.dev/github.com/gogs/cron@v0.0.0-20171120032916-9f6c956d3e14)
### Cron - Update Mirrors (`cron.update_mirrors`) ### Cron - Update Mirrors (`cron.update_mirrors`)
- `SCHEDULE`: 自动同步镜像仓库的Cron语法比如`@every 1h` - `SCHEDULE`: 自动同步镜像仓库的 Cron 语法,比如:`@every 1h`
### Cron - Repository Health Check (`cron.repo_health_check`) ### Cron - Repository Health Check (`cron.repo_health_check`)
- `SCHEDULE`: 仓库健康监测的Cron语法比如`@midnight` - `SCHEDULE`: 仓库健康监测的 Cron 语法,比如:`@midnight`
- `TIMEOUT`: 仓库健康监测的超时时间,比如:`60s`. - `TIMEOUT`: 仓库健康监测的超时时间,比如:`60s`.
- `ARGS`: 执行 `git fsck` 命令的参数,比如:`--unreachable --tags` - `ARGS`: 执行 `git fsck` 命令的参数,比如:`--unreachable --tags`
### Cron - Repository Statistics Check (`cron.check_repo_stats`) ### Cron - Repository Statistics Check (`cron.check_repo_stats`)
- `RUN_AT_START`: 是否启动时自动运行仓库统计。 - `RUN_AT_START`: 是否启动时自动运行仓库统计。
- `SCHEDULE`: 仓库统计时的Cron 语法,比如:`@midnight`. - `SCHEDULE`: 仓库统计时的 Cron 语法,比如:`@midnight`.
### Cron - Update Migration Poster ID (`cron.update_migration_poster_id`) ### Cron - Update Migration Poster ID (`cron.update_migration_poster_id`)
@@ -301,25 +301,25 @@ test01.xls: application/vnd.ms-excel; charset=binary
## Git - 超时设置 (`git.timeout`) ## Git - 超时设置 (`git.timeout`)
- `DEFAUlT`: **360**: Git操作默认超时时间单位秒 - `DEFAUlT`: **360**: Git 操作默认超时时间,单位秒
- `MIGRATE`: **600**: 迁移外部仓库时的超时时间,单位秒 - `MIGRATE`: **600**: 迁移外部仓库时的超时时间,单位秒
- `MIRROR`: **300**: 镜像外部仓库的超时时间,单位秒 - `MIRROR`: **300**: 镜像外部仓库的超时时间,单位秒
- `CLONE`: **300**: 内部仓库间克隆的超时时间,单位秒 - `CLONE`: **300**: 内部仓库间克隆的超时时间,单位秒
- `PULL`: **300**: 内部仓库间拉取的超时时间,单位秒 - `PULL`: **300**: 内部仓库间拉取的超时时间,单位秒
- `GC`: **60**: git仓库GC的超时时间单位秒 - `GC`: **60**: git 仓库 GC 的超时时间,单位秒
- `ENABLE_AUTO_GIT_WIRE_PROTOCOL`: **true**: 是否根据 Git Wire Protocol协议支持情况自动切换版本当 git 版本在 2.18 及以上时会自动切换到版本2。为 `false` 则不切换。 - `ENABLE_AUTO_GIT_WIRE_PROTOCOL`: **true**: 是否根据 Git Wire Protocol 协议支持情况自动切换版本,当 git 版本在 2.18 及以上时会自动切换到版本 2。为 `false` 则不切换。
## API (`api`) ## API (`api`)
- `ENABLE_SWAGGER`: **true**: 是否启用swagger路由 /api/swagger, /api/v1/swagger etc. endpoints. True 或 false. - `ENABLE_SWAGGER`: **true**: 是否启用 swagger 路由 /api/swagger, /api/v1/swagger etc. endpoints. True 或 false.
- `MAX_RESPONSE_ITEMS`: **50**: 一个页面最大的项目数。 - `MAX_RESPONSE_ITEMS`: **50**: 一个页面最大的项目数。
- `DEFAULT_PAGING_NUM`: **30**: API中默认分页条数。 - `DEFAULT_PAGING_NUM`: **30**: API 中默认分页条数。
- `DEFAULT_GIT_TREES_PER_PAGE`: **1000**: GIT TREES API每页的默认最大项数. - `DEFAULT_GIT_TREES_PER_PAGE`: **1000**: GIT TREES API 每页的默认最大项数.
- `DEFAULT_MAX_BLOB_SIZE`: **10485760**: BLOBS API默认最大大小. - `DEFAULT_MAX_BLOB_SIZE`: **10485760**: BLOBS API 默认最大大小.
## Markup (`markup`) ## Markup (`markup`)
外部渲染工具支持,你可以用你熟悉的文档渲染工具. 比如一下将新增一个名字为 `asciidoc` 的渲染工具which is followed `markup.` ini section. And there are some config items below. 外部渲染工具支持,你可以用你熟悉的文档渲染工具. 比如一下将新增一个名字为 `asciidoc` 的渲染工具 which is followed `markup.` ini section. And there are some config items below.
```ini ```ini
[markup.asciidoc] [markup.asciidoc]
@@ -330,8 +330,8 @@ RENDER_COMMAND = "asciidoctor --embedded --safe-mode=secure --out-file=- -"
IS_INPUT_FILE = false IS_INPUT_FILE = false
``` ```
- ENABLED: 是否启用默认为false。 - ENABLED: 是否启用,默认为 false。
- NEED\_POSTPROCESS: **true** 设置为 true 则会替换渲染文件中的内部链接和Commit ID 等。 - NEED_POSTPROCESS: **true** 设置为 true 则会替换渲染文件中的内部链接和 Commit ID 等。
- FILE_EXTENSIONS: 关联的文档的扩展名,多个扩展名用都好分隔。 - FILE_EXTENSIONS: 关联的文档的扩展名,多个扩展名用都好分隔。
- RENDER_COMMAND: 工具的命令行命令及参数。 - RENDER_COMMAND: 工具的命令行命令及参数。
- IS_INPUT_FILE: 输入方式是最后一个参数为文件路径还是从标准输入读取。 - IS_INPUT_FILE: 输入方式是最后一个参数为文件路径还是从标准输入读取。
@@ -342,8 +342,8 @@ IS_INPUT_FILE = false
以下两个环境变量将会被传递给渲染命令: 以下两个环境变量将会被传递给渲染命令:
- `GITEA_PREFIX_SRC`:包含当前的`src`路径的URL前缀可以被用于链接的前缀。 - `GITEA_PREFIX_SRC`:包含当前的`src`路径的 URL 前缀,可以被用于链接的前缀。
- `GITEA_PREFIX_RAW`:包含当前的`raw`路径的URL前缀可以被用于图片的前缀。 - `GITEA_PREFIX_RAW`:包含当前的`raw`路径的 URL 前缀,可以被用于图片的前缀。
如果 `RENDER_CONTENT_MODE``sanitized`,则 Gitea 支持自定义渲染 HTML 的净化策略。以下例子将用 pandoc 支持 KaTeX 输出。 如果 `RENDER_CONTENT_MODE``sanitized`,则 Gitea 支持自定义渲染 HTML 的净化策略。以下例子将用 pandoc 支持 KaTeX 输出。
@@ -362,7 +362,7 @@ ALLOW_DATA_URI_IMAGES = true
- `REGEXP`: 正则表达式,用来匹配属性的内容。如果为空,则跟属性内容无关。 - `REGEXP`: 正则表达式,用来匹配属性的内容。如果为空,则跟属性内容无关。
- `ALLOW_DATA_URI_IMAGES`: **false** 允许 data uri 图片 (`<img src="data:image/png;base64,..."/>`)。 - `ALLOW_DATA_URI_IMAGES`: **false** 允许 data uri 图片 (`<img src="data:image/png;base64,..."/>`)。
多个净化规则可以被同时定义只要section名称最后一位不重复即可。如 `[markup.sanitizer.TeX-2]` 多个净化规则可以被同时定义,只要 section 名称最后一位不重复即可。如: `[markup.sanitizer.TeX-2]`
为了针对一种渲染类型进行一个特殊的净化策略,必须使用形如 `[markup.sanitizer.asciidoc.rule-1]` 的方式来命名 section。 为了针对一种渲染类型进行一个特殊的净化策略,必须使用形如 `[markup.sanitizer.asciidoc.rule-1]` 的方式来命名 section。
如果此规则没有匹配到任何渲染类型,它将会被应用到所有的渲染类型。 如果此规则没有匹配到任何渲染类型,它将会被应用到所有的渲染类型。
@@ -375,7 +375,7 @@ ALLOW_DATA_URI_IMAGES = true
- `QUEUE_TYPE`: **channel**: 任务队列类型,可以为 `channel``redis` - `QUEUE_TYPE`: **channel**: 任务队列类型,可以为 `channel``redis`
- `QUEUE_LENGTH`: **1000**: 任务队列长度,当 `QUEUE_TYPE``channel` 时有效。 - `QUEUE_LENGTH`: **1000**: 任务队列长度,当 `QUEUE_TYPE``channel` 时有效。
- `QUEUE_CONN_STR`: **addrs=127.0.0.1:6379 db=0**: 任务队列连接字符串,当 `QUEUE_TYPE``redis` 时有效。如果redis有密码则可以 `addrs=127.0.0.1:6379 password=123 db=0` - `QUEUE_CONN_STR`: **addrs=127.0.0.1:6379 db=0**: 任务队列连接字符串,当 `QUEUE_TYPE``redis` 时有效。如果 redis 有密码,则可以 `addrs=127.0.0.1:6379 password=123 db=0`
## Migrations (`migrations`) ## Migrations (`migrations`)
@@ -438,7 +438,7 @@ MINIO_INSECURE_SKIP_VERIFY = false
SERVE_DIRECT = true SERVE_DIRECT = true
``` ```
默认的,每一个存储都会有各自默认的 BasePath 在同一个minio中默认值如下 默认的,每一个存储都会有各自默认的 BasePath 在同一个 minio 中,默认值如下:
| storage | default base path | | storage | default base path |
| ----------------- | ------------------ | | ----------------- | ------------------ |
@@ -505,7 +505,7 @@ Repository archive 的存储配置。 如果 `STORAGE_TYPE` 为空,则此配
- `PROXY_ENABLED`: **false**: 是否启用全局代理。如果为否,则不使用代理,环境变量中的代理也不使用 - `PROXY_ENABLED`: **false**: 是否启用全局代理。如果为否,则不使用代理,环境变量中的代理也不使用
- `PROXY_URL`: **_empty_**: 代理服务器地址,支持 http://, https//, socks://,为空则不启用代理而使用环境变量中的 http_proxy/https_proxy - `PROXY_URL`: **_empty_**: 代理服务器地址,支持 http://, https//, socks://,为空则不启用代理而使用环境变量中的 http_proxy/https_proxy
- `PROXY_HOSTS`: **_empty_**: 逗号分隔的多个需要代理的网址,支持 * 号匹配符号, ** 表示匹配所有网站 - `PROXY_HOSTS`: **_empty_**: 逗号分隔的多个需要代理的网址,支持 \* 号匹配符号, \*\* 表示匹配所有网站
i.e. i.e.
@@ -517,4 +517,4 @@ PROXY_HOSTS = *.github.com
## Other (`other`) ## Other (`other`)
- `SHOW_FOOTER_VERSION`: 为真则在页面底部显示Gitea的版本。 - `SHOW_FOOTER_VERSION`: 为真则在页面底部显示 Gitea 的版本。

View File

@@ -10,7 +10,7 @@ aliases:
Gitea 引用 `custom` 目录中的自定义配置文件来覆盖配置、模板等默认配置。 Gitea 引用 `custom` 目录中的自定义配置文件来覆盖配置、模板等默认配置。
如果从二进制部署 Gitea ,则所有默认路径都将相对于该 gitea 二进制文件如果从发行版安装则可能会将这些路径修改为Linux文件系统标准。Gitea 如果从二进制部署 Gitea ,则所有默认路径都将相对于该 gitea 二进制文件;如果从发行版安装,则可能会将这些路径修改为 Linux 文件系统标准。Gitea
将会自动创建包括 `custom/` 在内的必要应用目录,应用本身的配置存放在 将会自动创建包括 `custom/` 在内的必要应用目录,应用本身的配置存放在
`custom/conf/app.ini` 当中。在发行版中可能会以 `/etc/gitea/` 的形式为 `custom` 设置一个符号链接,查看配置详情请移步: `custom/conf/app.ini` 当中。在发行版中可能会以 `/etc/gitea/` 的形式为 `custom` 设置一个符号链接,查看配置详情请移步:
@@ -64,7 +64,7 @@ Gitea 引用 `custom` 目录中的自定义配置文件来覆盖配置、模板
除了 `extra_links.tmpl``extra_tabs.tmpl`,您可以在您的 `custom/templates/custom/` 目录中存放一些其他有用的模板,例如: 除了 `extra_links.tmpl``extra_tabs.tmpl`,您可以在您的 `custom/templates/custom/` 目录中存放一些其他有用的模板,例如:
- `header.tmpl`,在 `<head>` 标记结束之前的模板例如添加自定义CSS文件 - `header.tmpl`,在 `<head>` 标记结束之前的模板,例如添加自定义 CSS 文件
- `body_outer_pre.tmpl`,在 `<body>` 标记开始处的模板 - `body_outer_pre.tmpl`,在 `<body>` 标记开始处的模板
- `body_inner_pre.tmpl`,在顶部导航栏之前,但在主 container 内部的模板,例如添加一个 `<div class="full height">` - `body_inner_pre.tmpl`,在顶部导航栏之前,但在主 container 内部的模板,例如添加一个 `<div class="full height">`
- `body_inner_post.tmpl`,在主 container 结束处的模板 - `body_inner_post.tmpl`,在主 container 结束处的模板

View File

@@ -14,9 +14,9 @@ Gitea 具有邮件功能,用于发送事务性邮件(例如注册确认邮
使用 `sendmail` 命令作为邮件传输代理mailer 使用 `sendmail` 命令作为邮件传输代理mailer
注意对于在官方Gitea Docker镜像中使用请使用SMTP版本进行配置请参考下一节 注意:对于在官方 Gitea Docker 镜像中使用,请使用 SMTP 版本进行配置(请参考下一节)。
注意:对于面向互联网的网站,请查阅您的 MTA 文档以了解通过TLS发送邮件的说明。同时设置 SPF、DMARC 和 DKIM DNS 记录,以使发送的邮件被各个电子邮件提供商接受为合法邮件。 注意:对于面向互联网的网站,请查阅您的 MTA 文档以了解通过 TLS 发送邮件的说明。同时设置 SPF、DMARC 和 DKIM DNS 记录,以使发送的邮件被各个电子邮件提供商接受为合法邮件。
```ini title="app.ini" ```ini title="app.ini"
[mailer] [mailer]
@@ -53,9 +53,9 @@ PASSWD = `password`
- 通过端口 587 的 STARTTLS也称为 Opportunistic TLS。初始连接是明文的但如果服务器支持则可以升级为 TLS。 - 通过端口 587 的 STARTTLS也称为 Opportunistic TLS。初始连接是明文的但如果服务器支持则可以升级为 TLS。
- 通过默认端口 465 的 SMTPS 连接。连接到服务器从一开始就使用 TLS。 - 通过默认端口 465 的 SMTPS 连接。连接到服务器从一开始就使用 TLS。
- 使用 `IS_TLS_ENABLED=true` 进行强制的 SMTPS 连接。(这两种方式都被称为 Implicit TLS - 使用 `IS_TLS_ENABLED=true` 进行强制的 SMTPS 连接。(这两种方式都被称为 Implicit TLS
这是由于 Go 内部库对 STRIPTLS 攻击的保护机制。 这是由于 Go 内部库对 STRIPTLS 攻击的保护机制。
请注意自2018年起[RFC8314](https://tools.ietf.org/html/rfc8314#section-3) 推荐使用 Implicit TLS。 请注意,自 2018 年起,[RFC8314](https://tools.ietf.org/html/rfc8314#section-3) 推荐使用 Implicit TLS。
### Gmail ### Gmail

View File

@@ -18,31 +18,31 @@ GITEA_CUSTOM=/home/gitea/custom ./gitea web
因为 Gitea 使用 Go 语言编写,因此它使用了一些相关的 Go 的配置参数: 因为 Gitea 使用 Go 语言编写,因此它使用了一些相关的 Go 的配置参数:
* `GOOS` - `GOOS`
* `GOARCH` - `GOARCH`
* [`GOPATH`](https://golang.org/cmd/go/#hdr-GOPATH_environment_variable) - [`GOPATH`](https://golang.org/cmd/go/#hdr-GOPATH_environment_variable)
您可以在[官方文档](https://golang.org/cmd/go/#hdr-Environment_variables)中查阅这些配置参数的详细信息。 您可以在[官方文档](https://golang.org/cmd/go/#hdr-Environment_variables)中查阅这些配置参数的详细信息。
## Gitea 的文件目录 ## Gitea 的文件目录
* `GITEA_WORK_DIR`:工作目录的绝对路径 - `GITEA_WORK_DIR`:工作目录的绝对路径
* `GITEA_CUSTOM`:默认情况下 Gitea 使用默认目录 `GITEA_WORK_DIR`/custom您可以使用这个参数来配置 *custom* 目录 - `GITEA_CUSTOM`:默认情况下 Gitea 使用默认目录 `GITEA_WORK_DIR`/custom您可以使用这个参数来配置 _custom_ 目录
* `GOGS_WORK_DIR` 已废弃,请使用 `GITEA_WORK_DIR` 替代 - `GOGS_WORK_DIR` 已废弃,请使用 `GITEA_WORK_DIR` 替代
* `GOGS_CUSTOM` 已废弃,请使用 `GITEA_CUSTOM` 替代 - `GOGS_CUSTOM` 已废弃,请使用 `GITEA_CUSTOM` 替代
## 操作系统配置 ## 操作系统配置
* `USER`Gitea 运行时使用的系统用户,它将作为一些 repository 的访问地址的一部分 - `USER`Gitea 运行时使用的系统用户,它将作为一些 repository 的访问地址的一部分
* `USERNAME` 如果没有配置 `USER` Gitea 将使用 `USERNAME` - `USERNAME` 如果没有配置 `USER` Gitea 将使用 `USERNAME`
* `HOME` 用户的 home 目录,在 Windows 中会使用 `USERPROFILE` 环境变量 - `HOME` 用户的 home 目录,在 Windows 中会使用 `USERPROFILE` 环境变量
### 仅限于 Windows 的配置 ### 仅限于 Windows 的配置
* `USERPROFILE` 用户的主目录,如果未配置则会使用 `HOMEDRIVE` + `HOMEPATH` - `USERPROFILE` 用户的主目录,如果未配置则会使用 `HOMEDRIVE` + `HOMEPATH`
* `HOMEDRIVE`: 用于访问 home 目录的主驱动器路径C盘 - `HOMEDRIVE`: 用于访问 home 目录的主驱动器路径C 盘)
* `HOMEPATH`:在指定主驱动器下的 home 目录相对路径 - `HOMEPATH`:在指定主驱动器下的 home 目录相对路径
## Miscellaneous ## Miscellaneous
* `SKIP_MINWINSVC`:如果设置为 1在 Windows 上不会以 service 的形式运行。 - `SKIP_MINWINSVC`:如果设置为 1在 Windows 上不会以 service 的形式运行。

View File

@@ -171,7 +171,8 @@ ALLOW_DATA_URI_IMAGES = true
.markup.XXXXX body { .markup.XXXXX body {
color: #444; color: #444;
font-family: Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Roman', serif; font-family: Georgia, Palatino, "Palatino Linotype", Times, "Times New Roman",
serif;
font-size: 12px; font-size: 12px;
line-height: 1.7; line-height: 1.7;
padding: 1em; padding: 1em;

View File

@@ -6,7 +6,6 @@ sidebar_position: 45
aliases: aliases:
- /zh-cn/mail-templates - /zh-cn/mail-templates
--- ---
# 邮件模板 # 邮件模板
@@ -21,7 +20,7 @@ aliases:
目前,以下通知事件使用模板: 目前,以下通知事件使用模板:
| 操作名称 | 用途 | | 操作名称 | 用途 |
| ----------- | ------------------------------------------------------------------------------------------------------------ | | ---------- | ---------------------------------------------------------------------- |
| `new` | 创建了新的工单或合并请求。 | | `new` | 创建了新的工单或合并请求。 |
| `comment` | 在现有工单或合并请求中创建了新的评论。 | | `comment` | 在现有工单或合并请求中创建了新的评论。 |
| `close` | 关闭了工单或合并请求。 | | `close` | 关闭了工单或合并请求。 |
@@ -75,10 +74,10 @@ custom/templates/mail/pull/comment.tmpl
指定 _主题_ 部分是可选的因此也是虚线分隔符。在使用时_主题_ 和 _邮件正文_ 模板之间的分隔符需要至少三个虚线;分隔符行中不允许使用其他字符。 指定 _主题_ 部分是可选的因此也是虚线分隔符。在使用时_主题_ 和 _邮件正文_ 模板之间的分隔符需要至少三个虚线;分隔符行中不允许使用其他字符。
_主题__邮件正文_ 由 [Golang的模板引擎](https://golang.org/pkg/text/template/) 解析,并提供了为每个通知组装的 _元数据上下文_。上下文包含以下元素: _主题__邮件正文_ 由 [Golang 的模板引擎](https://golang.org/pkg/text/template/) 解析,并提供了为每个通知组装的 _元数据上下文_。上下文包含以下元素:
| 名称 | 类型 | 可用性 | 用途 | | 名称 | 类型 | 可用性 | 用途 |
| -------------------- | ------------------ | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ------------------ | ---------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `.FallbackSubject` | string | 始终可用 | 默认主题行。参见下文。 | | `.FallbackSubject` | string | 始终可用 | 默认主题行。参见下文。 |
| `.Subject` | string | 仅在正文中可用 | 解析后的 _主题_。 | | `.Subject` | string | 仅在正文中可用 | 解析后的 _主题_。 |
| `.Body` | string | 始终可用 | 工单、合并请求或评论的消息,从 Markdown 解析为 HTML 并进行了清理。请勿与 _邮件正文_ 混淆。 | | `.Body` | string | 始终可用 | 工单、合并请求或评论的消息,从 Markdown 解析为 HTML 并进行了清理。请勿与 _邮件正文_ 混淆。 |
@@ -110,7 +109,7 @@ _主题_ 和 _邮件正文_ 由 [Golang的模板引擎](https://golang.org/pkg/t
- 删除所有前导、尾随和多余的空格。 - 删除所有前导、尾随和多余的空格。
- 将字符串截断为前 256 个字母(字符)。 - 将字符串截断为前 256 个字母(字符)。
如果最终结果为空字符串,**或者**没有可用的主题模板即所选模板不包含主题部分将使用Gitea的**内部默认值**。 如果最终结果为空字符串,**或者**没有可用的主题模板(即所选模板不包含主题部分),将使用 Gitea 的**内部默认值**。
内部默认(回退)主题相当于: 内部默认(回退)主题相当于:
@@ -120,7 +119,7 @@ _主题_ 和 _邮件正文_ 由 [Golang的模板引擎](https://golang.org/pkg/t
例如:`Re: [mike/stuff] New color palette (#38)` 例如:`Re: [mike/stuff] New color palette (#38)`
即使存在有效的主题模板Gitea的默认主题也可以在模板的元数据中作为 `.FallbackSubject` 找到。 即使存在有效的主题模板Gitea 的默认主题也可以在模板的元数据中作为 `.FallbackSubject` 找到。
### 模板中的邮件正文部分 ### 模板中的邮件正文部分
@@ -142,7 +141,7 @@ _主题_ 和 _邮件正文_ 由 [Golang的模板引擎](https://golang.org/pkg/t
如果模板无法呈现,则只有在发送邮件时才会注意到。 如果模板无法呈现,则只有在发送邮件时才会注意到。
如果主题模板失败,将使用默认主题,如果从 _邮件正文_ 中成功呈现了任何内容,则将使用该内容,忽略其他内容。 如果主题模板失败,将使用默认主题,如果从 _邮件正文_ 中成功呈现了任何内容,则将使用该内容,忽略其他内容。
如果遇到问题,请检查 [Gitea的日志](../administration/logging-config.md) 以获取错误消息。 如果遇到问题,请检查 [Gitea 的日志](../administration/logging-config.md) 以获取错误消息。
## 示例 ## 示例
@@ -224,11 +223,11 @@ _主题_ 和 _邮件正文_ 由 [Golang的模板引擎](https://golang.org/pkg/t
> >
> #### 消息内容: > #### 消息内容:
> >
> \_********************************\_******************************** > \_******\*\*******\*\*\*\*******\*\*******\_******\*\*******\*\*\*\*******\*\*******
> >
> Mike, I think we should tone down the blues a little. > Mike, I think we should tone down the blues a little.
> >
> \_********************************\_******************************** > \_******\*\*******\*\*\*\*******\*\*******\_******\*\*******\*\*\*\*******\*\*******
> >
> [在 Gitea 上查看](#)。 > [在 Gitea 上查看](#)。
@@ -237,7 +236,7 @@ _主题_ 和 _邮件正文_ 由 [Golang的模板引擎](https://golang.org/pkg/t
模板系统包含一些函数,可用于进一步处理和格式化消息。以下是其中一些函数的列表: 模板系统包含一些函数,可用于进一步处理和格式化消息。以下是其中一些函数的列表:
| 函数名 | 参数 | 可用于 | 用法 | | 函数名 | 参数 | 可用于 | 用法 |
| ----------------- | ----------- | ------------ | --------------------------------------------------------------------------------- | | ---------------- | ----------- | ---------- | --------------------------------------------------------------------- |
| `AppUrl` | - | 任何地方 | Gitea 的 URL | | `AppUrl` | - | 任何地方 | Gitea 的 URL |
| `AppName` | - | 任何地方 | 从 `app.ini` 中设置,通常为 "Gitea" | | `AppName` | - | 任何地方 | 从 `app.ini` 中设置,通常为 "Gitea" |
| `AppDomain` | - | 任何地方 | Gitea 的主机名 | | `AppDomain` | - | 任何地方 | Gitea 的主机名 |
@@ -248,8 +247,10 @@ _主题_ 和 _邮件正文_ 由 [Golang的模板引擎](https://golang.org/pkg/t
这些都是 _函数_,而不是元数据,因此必须按以下方式使用: 这些都是 _函数_,而不是元数据,因此必须按以下方式使用:
```html ```html
像这样使用: {{Str2html "Escape<my>text"}} 像这样使用: {{Str2html "Escape<my
或者这样使用: {{"Escape<my>text" | Str2html}} >text"}} 或者这样使用: {{"Escape<my
或者这样使用: {{AppUrl}} >text" | Str2html}} 或者这样使用: {{AppUrl}} 但不要像这样使用:
但不要像这样使用: {{.AppUrl}} {{.AppUrl}}</my
></my
>
``` ```

View File

@@ -6,7 +6,6 @@ sidebar_position: 45
aliases: aliases:
- /zh-cn/repo-indexer - /zh-cn/repo-indexer
--- ---
# 仓库索引器 # 仓库索引器
@@ -33,7 +32,7 @@ REPO_INDEXER_EXCLUDE = resources/bin/**
### 按路径选择要索引的文件 ### 按路径选择要索引的文件
Gitea使用 [`gobwas/glob` 库](https://github.com/gobwas/glob) 中的 glob 模式匹配来选择要包含在索引中的文件。 Gitea 使用 [`gobwas/glob` 库](https://github.com/gobwas/glob) 中的 glob 模式匹配来选择要包含在索引中的文件。
限制文件列表可以防止索引被派生或无关的文件(例如 lss、sym、map 等)污染,从而使搜索结果更相关。这还有助于减小索引的大小。 限制文件列表可以防止索引被派生或无关的文件(例如 lss、sym、map 等)污染,从而使搜索结果更相关。这还有助于减小索引的大小。

View File

@@ -6,7 +6,6 @@ sidebar_position: 16
aliases: aliases:
- /zh-cn/reverse-proxies - /zh-cn/reverse-proxies
--- ---
# 反向代理 # 反向代理

View File

@@ -6,7 +6,6 @@ sidebar_position: 60
aliases: aliases:
- /zh-cn/search-engines-indexation - /zh-cn/search-engines-indexation
--- ---
# 搜索引擎索引 # 搜索引擎索引
@@ -25,7 +24,7 @@ User-agent: *
Disallow: / Disallow: /
``` ```
如果您将Gitea安装在子目录中则需要在顶级目录中创建或编辑 `robots.txt` 如果您将 Gitea 安装在子目录中,则需要在顶级目录中创建或编辑 `robots.txt`
```txt ```txt
User-agent: * User-agent: *

View File

@@ -69,7 +69,7 @@ MERGES = pubkey, twofa, basesigned, commitssigned
如果您有自己定制的 Gitea git 配置,您应该将这些配置设置在系统 git 配置文件中(例如 `/etc/gitconfig`)或者 Gitea 的内部 git 配置文件 `{[git].HOME_PATH}/.gitconfig` 中。 如果您有自己定制的 Gitea git 配置,您应该将这些配置设置在系统 git 配置文件中(例如 `/etc/gitconfig`)或者 Gitea 的内部 git 配置文件 `{[git].HOME_PATH}/.gitconfig` 中。
与 git 命令相关的主目录文件(如 `.gnupg`)也应该放在 Gitea 的 git 主目录 `[git].HOME_PATH` 中。 与 git 命令相关的主目录文件(如 `.gnupg`)也应该放在 Gitea 的 git 主目录 `[git].HOME_PATH` 中。
如果您希望将 `.gnupg` 目录放在 `{[git].HOME_PATH}/` 之外的位置,请考虑设置 `$GNUPGHOME` 环境变量为您首选的位置。否则Gitea将会从 `{[git].HOME_PATH}/.gnupg` 查找私钥。 如果您希望将 `.gnupg` 目录放在 `{[git].HOME_PATH}/` 之外的位置,请考虑设置 `$GNUPGHOME` 环境变量为您首选的位置。,否则 Gitea 将会从 `{[git].HOME_PATH}/.gnupg` 查找私钥。
::: :::
### `INITIAL_COMMIT` ### `INITIAL_COMMIT`

View File

@@ -6,47 +6,46 @@ sidebar_position: 20
aliases: aliases:
- /zh-cn/guidelines-backend - /zh-cn/guidelines-backend
--- ---
# 后端开发指南 # 后端开发指南
## 背景 ## 背景
Gitea使用Golang作为后端编程语言。它使用了许多第三方包并且自己也编写了一些包。 Gitea 使用 Golang 作为后端编程语言。它使用了许多第三方包,并且自己也编写了一些包。
例如Gitea使用[Chi](https://github.com/go-chi/chi)作为基本的Web框架。[Xorm](https://xorm.io)是一个用于与数据库交互的ORM框架。 例如Gitea 使用[Chi](https://github.com/go-chi/chi)作为基本的 Web 框架。[Xorm](https://xorm.io)是一个用于与数据库交互的 ORM 框架。
因此,管理这些包非常重要。在开始编写后端代码之前,请参考以下准则。 因此,管理这些包非常重要。在开始编写后端代码之前,请参考以下准则。
## 包设计准则 ## 包设计准则
### 包列表 ### 包列表
为了保持易于理解的代码并避免循环依赖拥有良好的代码结构是很重要的。Gitea后端分为以下几个部分 为了保持易于理解的代码并避免循环依赖拥有良好的代码结构是很重要的。Gitea 后端分为以下几个部分:
- `build`帮助构建Gitea的脚本。 - `build`:帮助构建 Gitea 的脚本。
- `cmd`包含所有Gitea的实际子命令包括web、doctor、serv、hooks、admin等。`web`将启动Web服务。`serv``hooks`将被GitOpenSSH调用。其他子命令可以帮助维护Gitea。 - `cmd`:包含所有 Gitea 的实际子命令,包括 web、doctor、serv、hooks、admin 等。`web`将启动 Web 服务。`serv``hooks`将被 GitOpenSSH 调用。其他子命令可以帮助维护 Gitea。
- `tests`:常用的测试函数 - `tests`:常用的测试函数
- `tests/integration`:集成测试,用于测试后端回归。 - `tests/integration`:集成测试,用于测试后端回归。
- `tests/e2e`:端到端测试,用于测试前端和后端的兼容性和视觉回归。 - `tests/e2e`:端到端测试,用于测试前端和后端的兼容性和视觉回归。
- `models`包含由xorm用于构建数据库表的数据结构。它还包含查询和更新数据库的函数。应避免与其他Gitea代码的依赖关系。在某些情况下比如日志记录时可以例外。 - `models`:包含由 xorm 用于构建数据库表的数据结构。它还包含查询和更新数据库的函数。应避免与其他 Gitea 代码的依赖关系。在某些情况下,比如日志记录时可以例外。
- `models/db`:基本的数据库操作。所有其他`models/xxx`包都应依赖于此包。`GetEngine`函数只能从models/中调用。 - `models/db`:基本的数据库操作。所有其他`models/xxx`包都应依赖于此包。`GetEngine`函数只能从 models/中调用。
- `models/fixtures`:单元测试和集成测试中使用的示例数据。一个`yml`文件表示一个将在测试开始时加载到数据库中的表。 - `models/fixtures`:单元测试和集成测试中使用的示例数据。一个`yml`文件表示一个将在测试开始时加载到数据库中的表。
- `models/migrations`存储不同版本之间的数据库迁移。修改数据库结构的PR**必须**包含一个迁移步骤。 - `models/migrations`:存储不同版本之间的数据库迁移。修改数据库结构的 PR**必须**包含一个迁移步骤。
- `modules`在Gitea中处理特定功能的不同模块。工作正在进行中其中一些模块应该移到`services`特别是那些依赖于models的模块因为它们依赖于数据库。 - `modules`:在 Gitea 中处理特定功能的不同模块。工作正在进行中:其中一些模块应该移到`services`中,特别是那些依赖于 models 的模块,因为它们依赖于数据库。
- `modules/setting`存储从ini文件中读取的所有系统配置并在各处引用。但是在可能的情况下应将其作为函数参数使用。 - `modules/setting`:存储从 ini 文件中读取的所有系统配置,并在各处引用。但是在可能的情况下,应将其作为函数参数使用。
- `modules/git`:用于与`Git`命令行或Gogit包交互的包。 - `modules/git`:用于与`Git`命令行或 Gogit 包交互的包。
- `public`编译后的前端文件JavaScript、图像、CSS等 - `public`编译后的前端文件JavaScript、图像、CSS 等)
- `routers`处理服务器请求。由于它使用其他Gitea包来处理请求因此其他包models、modulesservices不能依赖于routers。 - `routers`:处理服务器请求。由于它使用其他 Gitea 包来处理请求因此其他包models、modulesservices不能依赖于 routers。
- `routers/api`:包含`/api/v1`相关路由用于处理RESTful API请求。 - `routers/api`:包含`/api/v1`相关路由,用于处理 RESTful API 请求。
- `routers/install`只能在系统处于安装模式INSTALL_LOCK=false时响应。 - `routers/install`只能在系统处于安装模式INSTALL_LOCK=false时响应。
- `routers/private`:仅由内部子命令调用,特别是`serv``hooks` - `routers/private`:仅由内部子命令调用,特别是`serv``hooks`
- `routers/web`处理来自Web浏览器或Git SMART HTTP协议的HTTP请求。 - `routers/web`:处理来自 Web 浏览器或 Git SMART HTTP 协议的 HTTP 请求。
- `services`:用于常见路由操作或命令执行的支持函数。使用`models``modules`来处理请求。 - `services`:用于常见路由操作或命令执行的支持函数。使用`models``modules`来处理请求。
- `templates`用于生成HTML输出的Golang模板。 - `templates`:用于生成 HTML 输出的 Golang 模板。
### 包依赖关系 ### 包依赖关系
由于Golang不支持导入循环我们必须仔细决定包之间的依赖关系。这些包之间有一些级别。以下是理想的包依赖关系方向。 由于 Golang 不支持导入循环,我们必须仔细决定包之间的依赖关系。这些包之间有一些级别。以下是理想的包依赖关系方向。
`cmd` -> `routers` -> `services` -> `models` -> `modules` `cmd` -> `routers` -> `services` -> `models` -> `modules`
@@ -91,18 +90,18 @@ func UpdateIssue(ctx context.Context, repoID int64) error {
### 导入别名 ### 导入别名
由于有一些使用相同包名的包,例如`modules/user``models/user``services/user`当这些包在一个Go文件中被导入时很难知道我们使用的是哪个包以及它是变量名还是导入名。因此我们始终建议使用导入别名。为了与常见的驼峰命名法的包变量区分开建议使用**snake_case**作为导入别名的命名规则。 由于有一些使用相同包名的包,例如`modules/user``models/user``services/user`,当这些包在一个 Go 文件中被导入时,很难知道我们使用的是哪个包以及它是变量名还是导入名。因此,我们始终建议使用导入别名。为了与常见的驼峰命名法的包变量区分开,建议使用**snake_case**作为导入别名的命名规则。
例如:`import user_service "code.gitea.io/gitea/services/user"` 例如:`import user_service "code.gitea.io/gitea/services/user"`
### 重要注意事项 ### 重要注意事项
- 永远不要写成`x.Update(exemplar)`,而没有明确的`WHERE`子句: - 永远不要写成`x.Update(exemplar)`,而没有明确的`WHERE`子句:
- 这将导致表中的所有行都被使用exemplar的非零值进行更新包括ID。 - 这将导致表中的所有行都被使用 exemplar 的非零值进行更新,包括 ID。
- 通常应该写成`x.ID(id).Update(exemplar)` - 通常应该写成`x.ID(id).Update(exemplar)`
- 如果在迁移过程中使用`x.Insert(exemplar)`向表中插入记录而ID是预设的 - 如果在迁移过程中使用`x.Insert(exemplar)`向表中插入记录,而 ID 是预设的:
- 对于MSSQL变体你将需要执行``SET IDENTITY_INSERT `table` ON``(否则迁移将失败) - 对于 MSSQL 变体,你将需要执行`` SET IDENTITY_INSERT `table` ON ``(否则迁移将失败)
- 对于PostgreSQL你还需要更新ID序列否则迁移将悄无声息地通过但后续的插入将失败 - 对于 PostgreSQL你还需要更新 ID 序列,否则迁移将悄无声息地通过,但后续的插入将失败:
``SELECT setval('table_name_id_seq', COALESCE((SELECT MAX(id)+1 FROM `table_name`), 1), false)`` `` SELECT setval('table_name_id_seq', COALESCE((SELECT MAX(id)+1 FROM `table_name`), 1), false) ``
### 未来的任务 ### 未来的任务

View File

@@ -6,7 +6,6 @@ sidebar_position: 20
aliases: aliases:
- /zh-cn/guidelines-frontend - /zh-cn/guidelines-frontend
--- ---
# 前端开发指南 # 前端开发指南
@@ -19,10 +18,10 @@ HTML 页面由[Go HTML Template](https://pkg.go.dev/html/template)渲染。
源文件可以在以下目录中找到: 源文件可以在以下目录中找到:
* **CSS 样式** `web_src/css/` - **CSS 样式** `web_src/css/`
* **JavaScript 文件** `web_src/js/` - **JavaScript 文件** `web_src/js/`
* **Vue 组件** `web_src/js/components/` - **Vue 组件** `web_src/js/components/`
* **Go HTML 模板** `templates/` - **Go HTML 模板** `templates/`
## 通用准则 ## 通用准则
@@ -31,9 +30,9 @@ HTML 页面由[Go HTML Template](https://pkg.go.dev/html/template)渲染。
## Gitea 特定准则: ## Gitea 特定准则:
1. 每个功能Fomantic-UI/jQuery 模块)应放在单独的文件/目录中。 1. 每个功能Fomantic-UI/jQuery 模块)应放在单独的文件/目录中。
2. HTML 的 id 和 class 应使用 kebab-case最好包含2-3个与功能相关的关键词。 2. HTML 的 id 和 class 应使用 kebab-case最好包含 2-3 个与功能相关的关键词。
3. 在 JavaScript 中使用的 HTML 的 id 和 class 应在整个项目中是唯一的并且应包含2-3个与功能相关的关键词。建议在仅在 JavaScript 中使用的 class 中使用 `js-` 前缀。 3. 在 JavaScript 中使用的 HTML 的 id 和 class 应在整个项目中是唯一的,并且应包含 2-3 个与功能相关的关键词。建议在仅在 JavaScript 中使用的 class 中使用 `js-` 前缀。
4. 不应覆盖框架提供的 class 的 CSS 样式。始终使用具有2-3个与功能相关的关键词的新 class 名称来覆盖框架样式。Gitea 中的帮助 CSS 类在 `helpers.less` 中。 4. 不应覆盖框架提供的 class 的 CSS 样式。始终使用具有 2-3 个与功能相关的关键词的新 class 名称来覆盖框架样式。Gitea 中的帮助 CSS 类在 `helpers.less` 中。
5. 后端可以通过使用`ctx.PageData["myModuleData"] = map[]{}`将复杂数据传递给前端,但不要将整个模型暴露给前端,以避免泄露敏感数据。 5. 后端可以通过使用`ctx.PageData["myModuleData"] = map[]{}`将复杂数据传递给前端,但不要将整个模型暴露给前端,以避免泄露敏感数据。
6. 简单页面和与 SEO 相关的页面使用 Go HTML 模板渲染生成静态的 Fomantic-UI HTML 输出。复杂页面可以使用 Vue3。 6. 简单页面和与 SEO 相关的页面使用 Go HTML 模板渲染生成静态的 Fomantic-UI HTML 输出。复杂页面可以使用 Vue3。
7. 明确变量类型,优先使用`elem.disabled = true`而不是`elem.setAttribute('disabled', 'anything')`,优先使用`$el.prop('checked', var === 'yes')`而不是`$el.prop('checked', var)` 7. 明确变量类型,优先使用`elem.disabled = true`而不是`elem.setAttribute('disabled', 'anything')`,优先使用`$el.prop('checked', var === 'yes')`而不是`$el.prop('checked', var)`
@@ -45,8 +44,8 @@ HTML 页面由[Go HTML Template](https://pkg.go.dev/html/template)渲染。
### 可访问性 / ARIA ### 可访问性 / ARIA
在历史上Gitea大量使用了可访问性不友好的框架 Fomantic UI。 在历史上Gitea 大量使用了可访问性不友好的框架 Fomantic UI。
Gitea使用一些补丁使Fomantic UI更具可访问性参见`aria.js``aria.md` Gitea 使用一些补丁使 Fomantic UI 更具可访问性(参见`aria.js``aria.md`
但仍然存在许多问题需要大量的工作和时间来修复。 但仍然存在许多问题需要大量的工作和时间来修复。
### 框架使用 ### 框架使用
@@ -56,14 +55,14 @@ Gitea使用一些补丁使Fomantic UI更具可访问性参见`aria.js`和`ari
推荐的实现方式: 推荐的实现方式:
* Vue + Vanilla JS - Vue + Vanilla JS
* Fomantic-UIjQuery - Fomantic-UIjQuery
* Vanilla JS - Vanilla JS
不推荐的实现方式: 不推荐的实现方式:
* Vue + Fomantic-UIjQuery - Vue + Fomantic-UIjQuery
* jQuery + Vanilla JS - jQuery + Vanilla JS
为了保持界面一致Vue 组件可以使用 Fomantic-UI 的 CSS 类。 为了保持界面一致Vue 组件可以使用 Fomantic-UI 的 CSS 类。
尽管不建议混合使用不同的框架, 尽管不建议混合使用不同的框架,
@@ -82,7 +81,7 @@ Gitea使用一些补丁使Fomantic UI更具可访问性参见`aria.js`和`ari
如果我们想在非异步上下文中调用`async`函数, 如果我们想在非异步上下文中调用`async`函数,
建议使用`const _promise = asyncFoo()`来告诉读者 建议使用`const _promise = asyncFoo()`来告诉读者
这是有意为之的我们想调用异步函数并忽略Promise。 这是有意为之的,我们想调用异步函数并忽略 Promise。
一些 lint 规则和 IDE 也会在未处理返回的 Promise 时发出警告。 一些 lint 规则和 IDE 也会在未处理返回的 Promise 时发出警告。
### HTML 属性和 dataset ### HTML 属性和 dataset
@@ -90,31 +89,41 @@ Gitea使用一些补丁使Fomantic UI更具可访问性参见`aria.js`和`ari
禁止使用`dataset`,它的驼峰命名行为使得搜索属性变得困难。 禁止使用`dataset`,它的驼峰命名行为使得搜索属性变得困难。
然而,仍然存在一些特殊情况,因此当前的准则是: 然而,仍然存在一些特殊情况,因此当前的准则是:
* 对于旧代码: - 对于旧代码:
* 应将`$.data()`重构为`$.attr()`
* 在极少数情况下,可以使用`$.data()`将一些非字符串数据绑定到元素上,但强烈不推荐使用。
* 对于新代码: - 应将`$.data()`重构为`$.attr()`
* 不应使用`node.dataset`,而应使用`node.getAttribute` - 在极少数情况下,可以使用`$.data()`将一些非字符串数据绑定到元素上,但强烈不推荐使用
* 不要将任何用户数据绑定到 DOM 节点上,使用合适的设计模式描述节点和数据之间的关系。
- 对于新代码:
- 不应使用`node.dataset`,而应使用`node.getAttribute`
- 不要将任何用户数据绑定到 DOM 节点上,使用合适的设计模式描述节点和数据之间的关系。
### 显示/隐藏元素 ### 显示/隐藏元素
* 推荐在Vue组件中使用`v-if``v-show`来显示/隐藏元素。 - 推荐在 Vue 组件中使用`v-if``v-show`来显示/隐藏元素。
* Go 模板代码应使用 Gitea 的 `.gt-hidden``showElem()/hideElem()/toggleElem()` 来显示/隐藏元素,请参阅`.gt-hidden`的注释以获取更多详细信息。 - Go 模板代码应使用 Gitea 的 `.gt-hidden``showElem()/hideElem()/toggleElem()` 来显示/隐藏元素,请参阅`.gt-hidden`的注释以获取更多详细信息。
### Go HTML 模板中的样式和属性 ### Go HTML 模板中的样式和属性
建议使用以下方式: 建议使用以下方式:
```html ```html
<div class="gt-name1 gt-name2 {{if .IsFoo}}gt-foo{{end}}" {{if .IsFoo}}data-foo{{end}}></div> <div
class="gt-name1 gt-name2 {{if .IsFoo}}gt-foo{{end}}"
{{if
.IsFoo}}data-foo{{end}}
></div>
``` ```
而不是: 而不是:
```html ```html
<div class="gt-name1 gt-name2{{if .IsFoo}} gt-foo{{end}}"{{if .IsFoo}} data-foo{{end}}></div> <div
class="gt-name1 gt-name2{{if .IsFoo}} gt-foo{{end}}"
{{if
.IsFoo}}
data-foo{{end}}
></div>
``` ```
以使代码更易读。 以使代码更易读。

View File

@@ -6,38 +6,37 @@ sidebar_position: 20
aliases: aliases:
- /zh-cn/guidelines-refactoring - /zh-cn/guidelines-refactoring
--- ---
# 重构指南 # 重构指南
## 背景 ## 背景
自2014年2月12日编写了第一行代码以来Gitea已经发展成为一个庞大的项目。 2014 年 2 月 12 日编写了第一行代码以来Gitea 已经发展成为一个庞大的项目。
因此,代码库变得越来越大。代码库越大,维护就越困难。 因此,代码库变得越来越大。代码库越大,维护就越困难。
存在许多过时的机制,许多框架混合在一起,一些遗留代码可能会导致错误并阻碍新功能的开发。 存在许多过时的机制,许多框架混合在一起,一些遗留代码可能会导致错误并阻碍新功能的开发。
为了使代码库更易于维护使Gitea变得更好开发人员应牢记使用现代机制来重构旧代码。 为了使代码库更易于维护,使 Gitea 变得更好,开发人员应牢记使用现代机制来重构旧代码。
本文档是关于重构代码库的指南集合。 本文档是关于重构代码库的指南集合。
## 重构建议 ## 重构建议
* 设计更多关于未来的内容,而不仅仅解决当前问题。 - 设计更多关于未来的内容,而不仅仅解决当前问题。
* 减少模糊性,减少冲突,提高可维护性。 - 减少模糊性,减少冲突,提高可维护性。
* 描述重构,例如: - 描述重构,例如:
* 为什么需要重构。 - 为什么需要重构。
* 如何解决旧问题。 - 如何解决旧问题。
* 重构的优点/缺点是什么。 - 重构的优点/缺点是什么。
* 只做必要的更改,尽量保留旧逻辑。 - 只做必要的更改,尽量保留旧逻辑。
* 引入一些中间步骤使重构更容易审查完整的重构计划可以在几个PR中完成。 - 引入一些中间步骤,使重构更容易审查,完整的重构计划可以在几个 PR 中完成。
* 如果存在分歧应该请TOC技术监督委员会参与决策。 - 如果存在分歧,应该请 TOC技术监督委员会参与决策。
* 添加必要的测试以确保重构的正确性。 - 添加必要的测试以确保重构的正确性。
* 非错误重构优先在里程碑的开始时进行,这样可以更容易地在发布之前发现问题。 - 非错误重构优先在里程碑的开始时进行,这样可以更容易地在发布之前发现问题。
## 审查和合并建议 ## 审查和合并建议
* 重构的PR不应该长时间保持打开状态通常为7天),应尽快进行审查。 - 重构的 PR 不应该长时间保持打开状态(通常为 7 天),应尽快进行审查。
* 重构的PR应尽快合并不应被其他PR阻塞。 - 重构的 PR 应尽快合并,不应被其他 PR 阻塞。
* 如果TOC没有异议重构的PR可以在7天后由一名核心成员(非作者)批准后合并。 - 如果 TOC 没有异议,重构的 PR 可以在 7 天后由一名核心成员(非作者)批准后合并。
* 如果最终结果良好,容忍一些不完美/临时的步骤。 - 如果最终结果良好,容忍一些不完美/临时的步骤。
* 如果重构是必要的,容忍一些回归错误,并尽快修复错误。 - 如果重构是必要的,容忍一些回归错误,并尽快修复错误。

View File

@@ -8,9 +8,9 @@ aliases:
# 本地化 # 本地化
Gitea的本地化是通过我们的[Crowdin项目](https://crowdin.com/project/gitea)进行的。 Gitea 的本地化是通过我们的[Crowdin 项目](https://crowdin.com/project/gitea)进行的。
对于对**英语翻译**的更改可以发出pull-request来更改[英语语言环境](https://github.com/go-gitea/gitea/blob/main/options/locale/locale_en-US.ini)中合适的关键字。 对于对**英语翻译**的更改,可以发出 pull-request来更改[英语语言环境](https://github.com/go-gitea/gitea/blob/main/options/locale/locale_en-US.ini)中合适的关键字。
有关对**非英语**翻译的更改,请参阅上面的 Crowdin 项目。 有关对**非英语**翻译的更改,请参阅上面的 Crowdin 项目。

View File

@@ -6,7 +6,6 @@ sidebar_position: 10
aliases: aliases:
- /zh-cn/hacking-on-gitea - /zh-cn/hacking-on-gitea
--- ---
# Hacking on Gitea # Hacking on Gitea
@@ -19,7 +18,7 @@ aliases:
## 安装 Golang ## 安装 Golang
您需要 [安装 go]( https://golang.org/doc/install ) 并设置您的 go 环境。 您需要 [安装 go](https://golang.org/doc/install) 并设置您的 go 环境。
接下来,[使用 npm 安装 Node.js](https://nodejs.org/en/download/) ,这是构建 接下来,[使用 npm 安装 Node.js](https://nodejs.org/en/download/) ,这是构建
JavaScript 和 CSS 文件的必要工具。最低支持的 Node.js 版本是 @minNodeVersion@ JavaScript 和 CSS 文件的必要工具。最低支持的 Node.js 版本是 @minNodeVersion@
@@ -27,12 +26,12 @@ JavaScript 和 CSS 文件的必要工具。最低支持的 Node.js 版本是 @mi
**注意** :当执行需要外部工具的 make 任务时,比如 **注意** :当执行需要外部工具的 make 任务时,比如
`make watch-backend`Gitea 会自动下载并构建这些必要的组件。为了能够使用这些,你必须 `make watch-backend`Gitea 会自动下载并构建这些必要的组件。为了能够使用这些,你必须
`"$GOPATH"/bin` 目录加入到可执行路径上。如果你不把go bin目录添加到可执行路径你必须手动 `"$GOPATH"/bin` 目录加入到可执行路径上。如果你不把 go bin 目录添加到可执行路径你必须手动
指定可执行程序路径。 指定可执行程序路径。
**注意2** Go版本 @minGoVersion@ 或更高版本是必须的。Gitea 使用 `gofmt` **注意 2** Go 版本 @minGoVersion@ 或更高版本是必须的。Gitea 使用 `gofmt`
格式化源代码。然而,`gofmt` 的结果可能因 `go` 的版本而有差异。因此推荐安装我们持续集成使用 格式化源代码。然而,`gofmt` 的结果可能因 `go` 的版本而有差异。因此推荐安装我们持续集成使用
的 Go版本。截至上次更新Go 版本应该是 @goVersion@。 的 Go 版本。截至上次更新Go 版本应该是 @goVersion@。
## 安装 Make ## 安装 Make
@@ -58,15 +57,15 @@ sudo yum install make
Make 的这三个发行版都可以在 Windows 上运行: Make 的这三个发行版都可以在 Windows 上运行:
- [单个二进制构建]( http://www.equation.com/servlet/equation.cmd?fa=make )。复制到某处并添加到 `PATH` - [单个二进制构建](http://www.equation.com/servlet/equation.cmd?fa=make)。复制到某处并添加到 `PATH`
- [32 位版本](http://www.equation.com/ftpdir/make/32/make.exe) - [32 位版本](http://www.equation.com/ftpdir/make/32/make.exe)
- [64 位版本](http://www.equation.com/ftpdir/make/64/make.exe) - [64 位版本](http://www.equation.com/ftpdir/make/64/make.exe)
- [MinGW-w64](https://www.mingw-w64.org) / [MSYS2](https://www.msys2.org/)。 - [MinGW-w64](https://www.mingw-w64.org) / [MSYS2](https://www.msys2.org/)。
- MSYS2 是一个工具和库的集合,为您提供一个易于使用的环境来构建、安装和运行本机 Windows 软件,它包括 MinGW-w64。 - MSYS2 是一个工具和库的集合,为您提供一个易于使用的环境来构建、安装和运行本机 Windows 软件,它包括 MinGW-w64。
- 在 MingGW-w64 中,二进制文件称为 `mingw32-make.exe` 而不是 `make.exe`。将 `bin` 文件夹添加到 `PATH` - 在 MingGW-w64 中,二进制文件称为 `mingw32-make.exe` 而不是 `make.exe`。将 `bin` 文件夹添加到 `PATH`
- 在 MSYS2 中,您可以直接使用 `make`。请参阅 [MSYS2 移植](https://www.msys2.org/wiki/Porting/)。 - 在 MSYS2 中,您可以直接使用 `make`。请参阅 [MSYS2 移植](https://www.msys2.org/wiki/Porting/)。
- 要使用 CGO_ENABLED例如SQLite3编译 Gitea您可能需要使用 [tdm-gcc](https://jmeubank.github.io/tdm-gcc/) 而不是 MSYS2 gcc因为 MSYS2 gcc 标头缺少一些 Windows -只有 CRT 函数像 _beginthread 一样。 - 要使用 CGO_ENABLED例如SQLite3编译 Gitea您可能需要使用 [tdm-gcc](https://jmeubank.github.io/tdm-gcc/) 而不是 MSYS2 gcc因为 MSYS2 gcc 标头缺少一些 Windows -只有 CRT 函数像 \_beginthread 一样。
- [Chocolatey包管理器]( https://chocolatey.org/packages/make )。运行`choco install make` - [Chocolatey 包管理器](https://chocolatey.org/packages/make)。运行`choco install make`
**注意** :如果您尝试在 Windows 命令提示符下使用 make 进行构建您可能会遇到问题。建议使用上述提示Git bash 或 MinGW但是如果您只有命令提示符或可能是 PowerShell则可以使用 [set](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/set_1) 命令,例如 `set TAGS=bindata` **注意** :如果您尝试在 Windows 命令提示符下使用 make 进行构建您可能会遇到问题。建议使用上述提示Git bash 或 MinGW但是如果您只有命令提示符或可能是 PowerShell则可以使用 [set](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/set_1) 命令,例如 `set TAGS=bindata`
@@ -78,7 +77,7 @@ Make 的这三个发行版都可以在 Windows 上运行:
git clone https://github.com/go-gitea/gitea git clone https://github.com/go-gitea/gitea
``` ```
自从go modules出现后不再需要构建 go 项目从 `$GOPATH` 中获取,因此不再推荐使用 `go get` 方法。) (自从 go modules 出现后,不再需要构建 go 项目从 `$GOPATH` 中获取,因此不再推荐使用 `go get` 方法。)
## 派生 Gitea ## 派生 Gitea
@@ -199,7 +198,7 @@ SVG 图标是使用 `make svg` 目标构建的,该目标将 `build/generate-sv
### 构建 Logo ### 构建 Logo
Gitea Logo的 PNG 和 SVG 版本是使用 `TAGS="gitea" make generate-images` 目标从单个 SVG 源文件 assets/logo.svg 构建的。要运行它Node.js 和 npm 必须可用。 Gitea Logo 的 PNG 和 SVG 版本是使用 `TAGS="gitea" make generate-images` 目标从单个 SVG 源文件 assets/logo.svg 构建的。要运行它Node.js 和 npm 必须可用。
通过更新 `assets/logo.svg` 并运行 `make generate-images`,同样的过程也可用于从 SVG 源文件生成自定义 Logo PNG。忽略 gitea 编译选项将仅更新用户指定的 LOGO 文件。 通过更新 `assets/logo.svg` 并运行 `make generate-images`,同样的过程也可用于从 SVG 源文件生成自定义 Logo PNG。忽略 gitea 编译选项将仅更新用户指定的 LOGO 文件。
@@ -208,7 +207,7 @@ Gitea Logo的 PNG 和 SVG 版本是使用 `TAGS="gitea" make generate-images`
创建新的 API 路由或修改现有的 API 路由时,您**必须** 创建新的 API 路由或修改现有的 API 路由时,您**必须**
更新和/或创建 [Swagger](https://swagger.io/docs/specification/2-0/what-is-swagger/) 更新和/或创建 [Swagger](https://swagger.io/docs/specification/2-0/what-is-swagger/)
这些使用 [go-swagger](https://goswagger.io/) 评论的文档。 这些使用 [go-swagger](https://goswagger.io/) 评论的文档。
[规范]( https://goswagger.io/use/spec.html#annotation-syntax )中描述了这些注释的结构。 [规范](https://goswagger.io/use/spec.html#annotation-syntax)中描述了这些注释的结构。
如果您想了解更多有关 Swagger 结构的信息,可以查看 如果您想了解更多有关 Swagger 结构的信息,可以查看
[Swagger 2.0 文档](https://swagger.io/docs/specification/2-0/basic-structure/) [Swagger 2.0 文档](https://swagger.io/docs/specification/2-0/basic-structure/)
或与添加新 API 端点的先前 PR 进行比较,例如 [PR #5483](https://github.com/go-gitea/gitea/pull/5843/files#diff-2e0a7b644cf31e1c8ef7d76b444fe3aaR20) 或与添加新 API 端点的先前 PR 进行比较,例如 [PR #5483](https://github.com/go-gitea/gitea/pull/5843/files#diff-2e0a7b644cf31e1c8ef7d76b444fe3aaR20)
@@ -242,7 +241,7 @@ make swagger-check
并到[配置备忘单](../administration/config-cheat-sheet.md) 并到[配置备忘单](../administration/config-cheat-sheet.md)
`docs/content/doc/advanced/config-cheat-sheet.zh-cn.md` 中找到 `docs/content/doc/advanced/config-cheat-sheet.zh-cn.md` 中找到
### 更改Logo ### 更改 Logo
更改 Gitea Logo SVG 时,您将需要运行并提交结果的: 更改 Gitea Logo SVG 时,您将需要运行并提交结果的:
@@ -294,7 +293,7 @@ TAGS="bindata sqlite sqlite_unlock_notify" make build test-sqlite
我们的持续集成将测试代码是否通过了单元测试,并且所有支持的数据库都将在 Docker 环境中通过集成测试。 我们的持续集成将测试代码是否通过了单元测试,并且所有支持的数据库都将在 Docker 环境中通过集成测试。
还将测试从几个最新版本的 Gitea 迁移。 还将测试从几个最新版本的 Gitea 迁移。
请在PR中附带提交适当的单元测试和集成测试。 请在 PR 中附带提交适当的单元测试和集成测试。
## 网站文档 ## 网站文档

View File

@@ -8,7 +8,7 @@ aliases:
# 集成 # 集成
Gitea拥有一个出色的第三方集成社区以及在其他各种项目中的一流支持。 Gitea 拥有一个出色的第三方集成社区,以及在其他各种项目中的一流支持。
我们正在[awesome-gitea](https://gitea.com/gitea/awesome-gitea)上整理一个列表来跟踪这些集成! 我们正在[awesome-gitea](https://gitea.com/gitea/awesome-gitea)上整理一个列表来跟踪这些集成!

View File

@@ -6,29 +6,28 @@ sidebar_position: 55
aliases: aliases:
- /zh-cn/migrations-interfaces - /zh-cn/migrations-interfaces
--- ---
# 迁移接口 # 迁移接口
完整迁移功能在Gitea 1.9.0版本中引入。它定义了两个接口用于支持从其他Git托管平台迁移存储库数据到Gitea或者在将来将Gitea数据迁移到其他Git托管平台。 完整迁移功能在 Gitea 1.9.0 版本中引入。它定义了两个接口,用于支持从其他 Git 托管平台迁移存储库数据到 Gitea或者在将来将 Gitea 数据迁移到其他 Git 托管平台。
目前已实现了从GitHub、GitLab和其他Gitea实例的迁移。 目前已实现了从 GitHub、GitLab 和其他 Gitea 实例的迁移。
首先Gitea在包[modules/migration](https://github.com/go-gitea/gitea/tree/main/modules/migration)中定义了一些标准对象。它们是`Repository``Milestone``Release``ReleaseAsset``Label``Issue``Comment``PullRequest``Reaction``Review``ReviewComment` 首先Gitea 在包[modules/migration](https://github.com/go-gitea/gitea/tree/main/modules/migration)中定义了一些标准对象。它们是`Repository``Milestone``Release``ReleaseAsset``Label``Issue``Comment``PullRequest``Reaction``Review``ReviewComment`
## 下载器接口 ## 下载器接口
要从新的Git托管平台迁移需要进行两个步骤的更新。 要从新的 Git 托管平台迁移,需要进行两个步骤的更新。
- 您应该实现一个`Downloader`,用于获取存储库信息。 - 您应该实现一个`Downloader`,用于获取存储库信息。
- 您应该实现一个`DownloaderFactory`用于检测URL是否匹配并创建上述的`Downloader` - 您应该实现一个`DownloaderFactory`,用于检测 URL 是否匹配,并创建上述的`Downloader`
- 您需要在`init()`中通过`RegisterDownloaderFactory`注册`DownloaderFactory` - 您需要在`init()`中通过`RegisterDownloaderFactory`注册`DownloaderFactory`
您可以在[downloader.go](https://github.com/go-gitea/gitea/blob/main/modules/migration/downloader.go)中找到这些接口。 您可以在[downloader.go](https://github.com/go-gitea/gitea/blob/main/modules/migration/downloader.go)中找到这些接口。
## 上传器接口 ## 上传器接口
目前,只实现了`GiteaLocalUploader`因此我们只能通过此Uploader将下载的数据保存到本地的Gitea实例。目前不支持其他上传器。 目前,只实现了`GiteaLocalUploader`,因此我们只能通过此 Uploader 将下载的数据保存到本地的 Gitea 实例。目前不支持其他上传器。
您可以在[uploader.go](https://github.com/go-gitea/gitea/blob/main/modules/migration/uploader.go)中找到这些接口。 您可以在[uploader.go](https://github.com/go-gitea/gitea/blob/main/modules/migration/uploader.go)中找到这些接口。

View File

@@ -6,7 +6,6 @@ sidebar_position: 41
aliases: aliases:
- /zh-cn/oauth2-provider - /zh-cn/oauth2-provider
--- ---
# OAuth2 提供者 # OAuth2 提供者
@@ -37,7 +36,7 @@ Gitea 支持作为 OAuth2 提供者,允许第三方应用程序在用户同意
Gitea 支持以下令牌范围: Gitea 支持以下令牌范围:
| 名称 | 介绍 | | 名称 | 介绍 |
| ---- | ----------- | | ---------------------------------------- | --------------------------------------------------------------- |
| **(no scope)** | 授予对公共用户配置文件和公共存储库的只读访问权限 | | **(no scope)** | 授予对公共用户配置文件和公共存储库的只读访问权限 |
| **repo** | 完全控制所有存储库 | | **repo** | 完全控制所有存储库 |
| &nbsp;&nbsp;&nbsp; **repo:status** | 授予对所有存储库中提交状态的读/写访问权限 | | &nbsp;&nbsp;&nbsp; **repo:status** | 授予对所有存储库中提交状态的读/写访问权限 |

View File

@@ -6,7 +6,6 @@ sidebar_position: 5
aliases: aliases:
- /zh-cn/faq - /zh-cn/faq
--- ---
# 常见问题 # 常见问题
@@ -15,91 +14,91 @@ aliases:
有关更多帮助资源,请查看所有[支持选项](help/support.md)。 有关更多帮助资源,请查看所有[支持选项](help/support.md)。
## 1.x1.x.x下载之间的区别 ## 1.x1.x.x 下载之间的区别
以1.7.x版本为例。 1.7.x 版本为例。
**注意:**此示例也适用于Docker镜像 **注意:**此示例也适用于 Docker 镜像!
在我们的[下载页面](https://dl.gitea.com/gitea/)上您会看到一个1.7目录以及1.7.0、1.7.1、1.7.2、1.7.3、1.7.4、1.7.51.7.6的目录。 在我们的[下载页面](https://dl.gitea.com/gitea/)上,您会看到一个 1.7 目录,以及 1.7.0、1.7.1、1.7.2、1.7.3、1.7.4、1.7.51.7.6 的目录。
1.7目录和1.7.0目录是**不同**的。1.7目录是在每个合并到[`release/v1.7`](https://github.com/go-gitea/gitea/tree/release/v1.7)分支的提交上构建的。 1.7 目录和 1.7.0 目录是**不同**的。1.7 目录是在每个合并到[`release/v1.7`](https://github.com/go-gitea/gitea/tree/release/v1.7)分支的提交上构建的。
然而1.7.0目录是在创建[`v1.7.0`](https://github.com/go-gitea/gitea/releases/tag/v1.7.0)标签时创建的构建。 然而1.7.0 目录是在创建[`v1.7.0`](https://github.com/go-gitea/gitea/releases/tag/v1.7.0)标签时创建的构建。
这意味着1.x的下载会随着提交合并到各自的分支而改变将其视为每个版本的单独的“main”分支 这意味着 1.x 的下载会随着提交合并到各自的分支而改变将其视为每个版本的单独的“main”分支
另一方面1.x.x的下载应该永远不会改变。 另一方面1.x.x 的下载应该永远不会改变。
## 如何从Gogs/GitHub等迁移到Gitea ## 如何从 Gogs/GitHub 等迁移到 Gitea
要从Gogs迁移到Gitea 要从 Gogs 迁移到 Gitea
- [Gogs版本0.9.146或更低](installation/upgrade-from-gogs.md) - [Gogs 版本 0.9.146 或更低](installation/upgrade-from-gogs.md)
- [Gogs版本0.11.46.0418](https://github.com/go-gitea/gitea/issues/4286) - [Gogs 版本 0.11.46.0418](https://github.com/go-gitea/gitea/issues/4286)
要从GitHub迁移到Gitea您可以使用Gitea内置的迁移表单。 要从 GitHub 迁移到 Gitea您可以使用 Gitea 内置的迁移表单。
为了迁移诸如问题、拉取请求等项目,您需要至少输入您的用户名。 为了迁移诸如问题、拉取请求等项目,您需要至少输入您的用户名。
[Example (requires login)](https://try.gitea.io/repo/migrate) [Example (requires login)](https://try.gitea.io/repo/migrate)
要从GitLab迁移到Gitea您可以使用这个非关联的工具 要从 GitLab 迁移到 Gitea您可以使用这个非关联的工具
https://github.com/loganinak/MigrateGitlabToGogs https://github.com/loganinak/MigrateGitlabToGogs
## Gitea存储文件的位置 ## Gitea 存储文件的位置
- _`AppWorkPath`_ - _`AppWorkPath`_
- `--work-path`标志 - `--work-path`标志
- 或者环境变量`GITEA_WORK_DIR` - 或者环境变量`GITEA_WORK_DIR`
- 或者在构建时设置的内置值 - 或者在构建时设置的内置值
- 或者包含Gitea二进制文件的目录 - 或者包含 Gitea 二进制文件的目录
- `%(APP_DATA_PATH)`(数据库、索引器等的默认路径) - `%(APP_DATA_PATH)`(数据库、索引器等的默认路径)
- `app.ini`中的`APP_DATA_PATH` - `app.ini`中的`APP_DATA_PATH`
- 或者_`AppWorkPath`_`/data` - 或者*`AppWorkPath`*`/data`
- _`CustomPath`_自定义模板 - _`CustomPath`_自定义模板
- `--custom-path`标志 - `--custom-path`标志
- 或者环境变量`GITEA_CUSTOM` - 或者环境变量`GITEA_CUSTOM`
- 或者在构建时设置的内置值 - 或者在构建时设置的内置值
- 或者_`AppWorkPath`_`/custom` - 或者*`AppWorkPath`*`/custom`
- HomeDir - HomeDir
- Unix环境变量`HOME` - Unix环境变量`HOME`
- Windows环境变量`USERPROFILE`,或者环境变量`HOMEDRIVE`+`HOMEPATH` - Windows环境变量`USERPROFILE`,或者环境变量`HOMEDRIVE`+`HOMEPATH`
- RepoRootPath - RepoRootPath
- `app.ini`中\[repository]部分的`ROOT`(如果是绝对路径) - `app.ini`中\[repository]部分的`ROOT`(如果是绝对路径)
- 否则_`AppWorkPath`_`/ROOT`(如果`app.ini`中\[repository]部分的`ROOT`是相对路径) - 否则*`AppWorkPath`*`/ROOT`(如果`app.ini`中\[repository]部分的`ROOT`是相对路径)
- 默认值为`%(APP_DATA_PATH)/gitea-repositories` - 默认值为`%(APP_DATA_PATH)/gitea-repositories`
- INI配置文件 - INI配置文件
- `--config`标志 - `--config`标志
- 或者在构建时设置的可能内置值 - 或者在构建时设置的可能内置值
- 或者 _`CustomPath`_`/conf/app.ini` - 或者 _`CustomPath`_`/conf/app.ini`
- SQLite数据库 - SQLite 数据库
- app.inidatabase部分的PATH - app.inidatabase 部分的 PATH
- 或者`%(APP_DATA_PATH)/gitea.db` - 或者`%(APP_DATA_PATH)/gitea.db`
## 看不到克隆URL或克隆URL不正确 ## 看不到克隆 URL 或克隆 URL 不正确
有几个地方可能会导致显示不正确。 有几个地方可能会导致显示不正确。
1. 如果使用反向代理,请确保按照[反向代理指南](../administration/reverse-proxies.md)中的正确说明进行设置。 1. 如果使用反向代理,请确保按照[反向代理指南](../administration/reverse-proxies.md)中的正确说明进行设置。
2. 确保在`app.ini``server`部分中正确设置了`ROOT_URL` 2. 确保在`app.ini``server`部分中正确设置了`ROOT_URL`
如果某些克隆选项未显示HTTP/SSSH可以在`app.ini中` 如果某些克隆选项未显示HTTP/SSSH可以在`app.ini中`
- `DISABLE_HTTP_GIT`: 如果设为true, 将会没有HTTP/HTTPS链接 - `DISABLE_HTTP_GIT`: 如果设为 true, 将会没有 HTTP/HTTPS 链接
- `DISABLE_SSH`: 如果设为true, 将会没有SSH链接 - `DISABLE_SSH`: 如果设为 true, 将会没有 SSH 链接
- `SSH_EXPOSE_ANONYMOUS`: 如果设为false, SSH链接将会对匿名用户隐藏 - `SSH_EXPOSE_ANONYMOUS`: 如果设为 false, SSH 链接将会对匿名用户隐藏
## 文件上传失败413 Request Entity Too Large ## 文件上传失败413 Request Entity Too Large
当反向代理限制文件上传大小时,会出现此错误。 当反向代理限制文件上传大小时,会出现此错误。
有关使用nginx解决此问题请参阅[反向代理指南](../administration/reverse-proxies.md)。 有关使用 nginx 解决此问题,请参阅[反向代理指南](../administration/reverse-proxies.md)。
## 自定义模板无法加载或运行错误 ## 自定义模板无法加载或运行错误
Gitea的自定义模板必须将其添加到正确的位置否则Gitea将无法找到并使用自定义模板。 Gitea 的自定义模板必须将其添加到正确的位置,否则 Gitea 将无法找到并使用自定义模板。
模板的正确路径应该相对于`CustomPath` 模板的正确路径应该相对于`CustomPath`
@@ -108,35 +107,35 @@ Gitea的自定义模板必须将其添加到正确的位置否则Gitea将无
如果找不到,请尝试`echo $GITEA_CUSTOM` 如果找不到,请尝试`echo $GITEA_CUSTOM`
2. 如果仍然找不到,默认值可以被[计算](faq.md#Gitea存储文件的位置) 2. 如果仍然找不到,默认值可以被[计算](faq.md#Gitea存储文件的位置)
3. 如果仍然找不到路径,则可以参考[自定义Gitea](../administration/customizing-gitea.md)页面,将模板添加到正确的位置。 3. 如果仍然找不到路径,则可以参考[自定义 Gitea](../administration/customizing-gitea.md)页面,将模板添加到正确的位置。
## Gitea是否有"GitHub/GitLab Pages"功能? ## Gitea 是否有"GitHub/GitLab Pages"功能?
Gitea不提供内置的Pages服务器。您需要一个专用的域名来提供静态页面以避免CSRF安全风险。 Gitea 不提供内置的 Pages 服务器。您需要一个专用的域名来提供静态页面,以避免 CSRF 安全风险。
对于简单的用法您可以使用反向代理来重写和提供Gitea的原始文件URL中的静态内容。 对于简单的用法,您可以使用反向代理来重写和提供 Gitea 的原始文件 URL 中的静态内容。
还有一些已经可用的第三方服务,比如独立[pages server](https://codeberg.org/Codeberg/pages-server)的或[caddy plugin](https://github.com/42wim/caddy-gitea),可以提供所需的功能。 还有一些已经可用的第三方服务,比如独立[pages server](https://codeberg.org/Codeberg/pages-server)的或[caddy plugin](https://github.com/42wim/caddy-gitea),可以提供所需的功能。
## 活跃用户与禁止登录用户 ## 活跃用户与禁止登录用户
在Gitea中"活跃用户"是指通过电子邮件激活其帐户的用户。 Gitea 中,"活跃用户"是指通过电子邮件激活其帐户的用户。
"禁止登录用户"是指不允许再登录到Gitea的用户。 "禁止登录用户"是指不允许再登录到 Gitea 的用户。
## 设置日志记录 ## 设置日志记录
- [官方文档](../administration/logging-config.md) - [官方文档](../administration/logging-config.md)
## 什么是Swagger ## 什么是 Swagger
[Swagger](https://swagger.io/) 是Gitea用于其API文档的工具。 [Swagger](https://swagger.io/) 是 Gitea 用于其 API 文档的工具。
所有Gitea实例都有内置的API无法完全禁用它。 所有 Gitea 实例都有内置的 API无法完全禁用它。
但是您可以在app.iniapi部分将ENABLE_SWAGGER设置为false以禁用其文档显示。 但是,您可以在 app.iniapi 部分将 ENABLE_SWAGGER 设置为 false以禁用其文档显示。
有关更多信息请参阅Gitea的[API文档](development/api-usage.md)。 有关更多信息,请参阅 Gitea 的[API 文档](development/api-usage.md)。
您可以在上查看最新的API例如https://try.gitea.io/api/swagger 您可以在上查看最新的 API例如https://try.gitea.io/api/swagger
您还可以在上查看`swagger.json`文件的示例 https://try.gitea.io/swagger.v1.json 您还可以在上查看`swagger.json`文件的示例 https://try.gitea.io/swagger.v1.json
@@ -147,7 +146,7 @@ Gitea不提供内置的Pages服务器。您需要一个专用的域名来提供
有多种方法可以组合使用来防止垃圾邮件发送者: 有多种方法可以组合使用来防止垃圾邮件发送者:
1. 通过设置电子邮件域名的白名单或黑名单。 1. 通过设置电子邮件域名的白名单或黑名单。
2. 通过设置一些域名或者OpenID白名单见下文 2. 通过设置一些域名或者 OpenID 白名单(见下文)。
3. 在您的`app.ini`中将`ENABLE_CAPTCHA`设置为`true`,并正确配置`RECAPTCHA_SECRET``RECAPTCHA_SITEKEY` 3. 在您的`app.ini`中将`ENABLE_CAPTCHA`设置为`true`,并正确配置`RECAPTCHA_SECRET``RECAPTCHA_SITEKEY`
4.`DISABLE_REGISTRATION`设置为`true`,并通过 [CLI](../administration/command-line.md)、[API](development/api-usage.md) 或 Gitea 的管理界面创建新用户。 4.`DISABLE_REGISTRATION`设置为`true`,并通过 [CLI](../administration/command-line.md)、[API](development/api-usage.md) 或 Gitea 的管理界面创建新用户。
@@ -188,13 +187,13 @@ Gitea 目前支持三个官方主题,分别是 `gitea`(亮色)、`arc-gree
通过将`arc-blue`添加到`app.ini`中的`THEMES`列表中,允许用户使用该主题 通过将`arc-blue`添加到`app.ini`中的`THEMES`列表中,允许用户使用该主题
## SSHD vs 内建SSH ## SSHD vs 内建 SSH
SSHD是大多数Unix系统上内建的SSH服务器。 SSHD 是大多数 Unix 系统上内建的 SSH 服务器。
Gitea还提供了自己的SSH服务器用于在SSHD不可用时使用。 Gitea 还提供了自己的 SSH 服务器,用于在 SSHD 不可用时使用。
## Gitea运行缓慢 ## Gitea 运行缓慢
导致此问题的最常见原因是加载联合头像。 导致此问题的最常见原因是加载联合头像。
@@ -204,35 +203,35 @@ Gitea还提供了自己的SSH服务器用于在SSHD不可用时使用。
## 无法创建仓库/文件 ## 无法创建仓库/文件
请确保Gitea具有足够的权限来写入其主目录和数据目录。 请确保 Gitea 具有足够的权限来写入其主目录和数据目录。
参见[AppDataPath 和 RepoRootPath](help/faq.md#Gitea存储文件的位置) 参见[AppDataPath 和 RepoRootPath](help/faq.md#Gitea存储文件的位置)
**适用于Arch用户的注意事项**在撰写本文时Arch软件包的systemd文件包含了以下行 **适用于 Arch 用户的注意事项:**在撰写本文时Arch 软件包的 systemd 文件包含了以下行:
`ReadWritePaths=/etc/gitea/app.ini` `ReadWritePaths=/etc/gitea/app.ini`
这将使得Gitea无法写入其他路径。 这将使得 Gitea 无法写入其他路径。
## 翻译不正确/如何添加更多翻译 ## 翻译不正确/如何添加更多翻译
我们当前的翻译是在我们的[Crowdin项目](https://crowdin.com/project/gitea)上众包进行的 我们当前的翻译是在我们的[Crowdin 项目](https://crowdin.com/project/gitea)上众包进行的
无论您想要更改翻译还是添加新的翻译都需要在Crowdin集成中进行因为所有翻译都会被CI覆盖。 无论您想要更改翻译还是添加新的翻译,都需要在 Crowdin 集成中进行,因为所有翻译都会被 CI 覆盖。
## 推送钩子/ Webhook未运行 ## 推送钩子/ Webhook 未运行
如果您可以推送但无法在主页仪表板上看到推送活动或者推送不触发Webhook有几种可能性 如果您可以推送但无法在主页仪表板上看到推送活动,或者推送不触发 Webhook有几种可能性
1. Git钩子不同步在站点管理面板上运行“重新同步所有仓库的pre-receive、updatepost-receive钩子” 1. Git 钩子不同步:在站点管理面板上运行“重新同步所有仓库的 pre-receive、updatepost-receive 钩子”
2. Git仓库和钩子存储在一些不支持脚本执行的文件系统上例如由NAS挂载请确保文件系统支持`chmod a+x any-script` 2. Git 仓库(和钩子)存储在一些不支持脚本执行的文件系统上(例如由 NAS 挂载),请确保文件系统支持`chmod a+x any-script`
3. 如果您使用的是Docker请确保Docker Server而不是客户端的版本 >= 20.10.6 3. 如果您使用的是 Docker请确保 Docker Server而不是客户端的版本 >= 20.10.6
## SSH问题 ## SSH 问题
如果无法通过`ssh`访问仓库,但`https`正常工作,请考虑以下情况。 如果无法通过`ssh`访问仓库,但`https`正常工作,请考虑以下情况。
首先请确保您可以通过SSH访问Gitea。 首先,请确保您可以通过 SSH 访问 Gitea。
`ssh git@myremote.example` `ssh git@myremote.example`
@@ -260,16 +259,18 @@ fatal: Could not read from remote repository.
- 在客户端: - 在客户端:
- 确保公钥和私钥已添加到正确的 Gitea 用户。 - 确保公钥和私钥已添加到正确的 Gitea 用户。
- 确保远程 URL 中没有任何问题。特别是,请确保∂ - 确保远程 URL 中没有任何问题。特别是,请确保
Git 用户(@ 之前的部分)的名称拼写正确。 Git 用户(@ 之前的部分)的名称拼写正确。
- 确保客户端机器上的公钥和私钥正确无误。 - 确保客户端机器上的公钥和私钥正确无误。
- 在服务器上: - 在服务器上:
- 确保存储库存在并且命名正确。 - 确保存储库存在并且命名正确。
- 检查系统用户主目录中的 `.ssh` 目录的权限。 - 检查系统用户主目录中的 `.ssh` 目录的权限。
- 验证正确的公钥是否已添加到 `.ssh/authorized_keys` 中。 - 验证正确的公钥是否已添加到 `.ssh/authorized_keys` 中。
尝试在 Gitea 管理面板上运行 尝试在 Gitea 管理面板上运行
`Rewrite '.ssh/authorized_keys' file (for Gitea SSH keys)` `Rewrite '.ssh/authorized_keys' file (for Gitea SSH keys)`
- 查看 Gitea 日志。 - 查看 Gitea 日志。
- 查看 /var/log/auth或类似的文件 - 查看 /var/log/auth或类似的文件
- 检查存储库的权限。 - 检查存储库的权限。
@@ -341,7 +342,9 @@ Gitea 提供了一个子命令`gitea migrate`来初始化数据库,然后您
- 使用[管理 CLI 命令](../administration/command-line.md#admin)。 - 使用[管理 CLI 命令](../administration/command-line.md#admin)。
请注意,大多数命令还需要一个[全局标志](../administration/command-line.md#全局选项)来指向正确的配置。 请注意,大多数命令还需要一个[全局标志](../administration/command-line.md#全局选项)来指向正确的配置。
- 作为**用户**,您可以更改密码... - 作为**用户**,您可以更改密码...
- 在您的账户的`设置 -> 账户`页面(此方法**需要**您知道当前密码)。 - 在您的账户的`设置 -> 账户`页面(此方法**需要**您知道当前密码)。
- 使用`忘记密码`链接。 - 使用`忘记密码`链接。
@@ -351,7 +354,7 @@ Gitea 提供了一个子命令`gitea migrate`来初始化数据库,然后您
在 Gitea 版本 `1.11` 中,我们转换为使用[goldmark](https://github.com/yuin/goldmark)进行 Markdown 渲染,它符合[CommonMark](https://commonmark.org/)标准。 在 Gitea 版本 `1.11` 中,我们转换为使用[goldmark](https://github.com/yuin/goldmark)进行 Markdown 渲染,它符合[CommonMark](https://commonmark.org/)标准。
如果您在版本`1.11`之前的Markdown正常工作但在升级后无法正常工作请仔细阅读CommonMark规范看看问题是由错误还是非兼容的语法引起的。 如果您在版本`1.11`之前的 Markdown 正常工作,但在升级后无法正常工作,请仔细阅读 CommonMark 规范,看看问题是由错误还是非兼容的语法引起的。
如果是后者,通常规范中会列出一种符合标准的替代方法。 如果是后者,通常规范中会列出一种符合标准的替代方法。

View File

@@ -13,4 +13,4 @@ aliases:
- 到 [GitHub Issue](https://github.com/go-gitea/gitea/issues) 提问(因为项目维护人员来自世界各地,为保证沟通顺畅,请使用英文提问) - 到 [GitHub Issue](https://github.com/go-gitea/gitea/issues) 提问(因为项目维护人员来自世界各地,为保证沟通顺畅,请使用英文提问)
- 中文问题到 [Gitea 论坛](https://discourse.gitea.io/c/5-category/5) 提问 - 中文问题到 [Gitea 论坛](https://discourse.gitea.io/c/5-category/5) 提问
- 访问 [Discord Gitea 聊天室 - 英文](https://discord.gg/Gitea) - 访问 [Discord Gitea 聊天室 - 英文](https://discord.gg/Gitea)
- 加入 QQ群 328432459 获得进一步的支持 - 加入 QQ 群 328432459 获得进一步的支持

View File

@@ -6,7 +6,6 @@ sidebar_position: 5
aliases: aliases:
- /zh-cn/comparison - /zh-cn/comparison
--- ---
# 对比 Gitea 与其它 Git 托管工具 # 对比 Gitea 与其它 Git 托管工具
@@ -17,15 +16,15 @@ aliases:
_表格中的符号含义:_ _表格中的符号含义:_
* _✓ - 支持_ - _✓ - 支持_
* _ - 部分支持_ - _ - 部分支持_
* _✘ - 不支持_ - _✘ - 不支持_
* _? - 不确定_ - _? - 不确定_
* _⚙ - 由第三方服务或插件支持_ - _⚙ - 由第三方服务或插件支持_
#### 主要特性 #### 主要特性

View File

@@ -6,7 +6,6 @@ sidebar_position: 10
aliases: aliases:
- /zh-cn/database-prep - /zh-cn/database-prep
--- ---
# 数据库准备 # 数据库准备
@@ -184,7 +183,7 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
- `/path/to/postgresql.crt`: 数据库实例证书 - `/path/to/postgresql.crt`: 数据库实例证书
- `/path/to/postgresql.key`: 数据库实例私钥 - `/path/to/postgresql.key`: 数据库实例私钥
- `/path/to/root.crt`: 用于验证客户端证书的CA证书链 - `/path/to/root.crt`: 用于验证客户端证书的 CA 证书链
2. 在 `postgresql.conf` 中添加以下选项: 2. 在 `postgresql.conf` 中添加以下选项:
@@ -203,15 +202,15 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
chmod 0600 /path/to/root.crt /path/to/postgresql.crt /path/to/postgresql.key chmod 0600 /path/to/root.crt /path/to/postgresql.crt /path/to/postgresql.key
``` ```
4. 编辑 `pg_hba.conf` 规则,仅允许 Gitea 数据库用户通过SSL连接并要求客户端证书验证。 4. 编辑 `pg_hba.conf` 规则,仅允许 Gitea 数据库用户通过 SSL 连接,并要求客户端证书验证。
对于PostgreSQL 12 对于 PostgreSQL 12
```ini ```ini
hostssl giteadb gitea 192.0.2.10/32 scram-sha-256 clientcert=verify-full hostssl giteadb gitea 192.0.2.10/32 scram-sha-256 clientcert=verify-full
``` ```
对于PostgreSQL 11及更早版本 对于 PostgreSQL 11 及更早版本:
```ini ```ini
hostssl giteadb gitea 192.0.2.10/32 scram-sha-256 clientcert=1 hostssl giteadb gitea 192.0.2.10/32 scram-sha-256 clientcert=1
@@ -225,7 +224,7 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
- `~/.postgresql/postgresql.crt`: 数据库客户端证书 - `~/.postgresql/postgresql.crt`: 数据库客户端证书
- `~/.postgresql/postgresql.key`: 数据库客户端私钥 - `~/.postgresql/postgresql.key`: 数据库客户端私钥
- `~/.postgresql/root.crt`: 用于验证服务器证书的CA证书链 - `~/.postgresql/root.crt`: 用于验证服务器证书的 CA 证书链
注意:上述文件名在 PostgreSQL 中是硬编码的,无法更改。 注意:上述文件名在 PostgreSQL 中是硬编码的,无法更改。
@@ -246,15 +245,15 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
### MySQL ### MySQL
虽然 Gitea 使用的MySQL驱动程序也支持双向 TLS但目前 Gitea 仅支持单向 TLS。有关详细信息请参见工单10828。 虽然 Gitea 使用的 MySQL 驱动程序也支持双向 TLS但目前 Gitea 仅支持单向 TLS。有关详细信息请参见工单10828。
在单向TLS中数据库客户端在连接握手期间验证服务器发送的证书而服务器则假定连接的客户端是合法的因为不进行客户端证书验证。 在单向 TLS 中,数据库客户端在连接握手期间验证服务器发送的证书,而服务器则假定连接的客户端是合法的,因为不进行客户端证书验证。
1. 在数据库实例上放置以下凭据: 1. 在数据库实例上放置以下凭据:
- `/path/to/mysql.crt`: 数据库实例证书 - `/path/to/mysql.crt`: 数据库实例证书
- `/path/to/mysql.key`: 数据库实例密钥 - `/path/to/mysql.key`: 数据库实例密钥
- `/path/to/ca.crt`: CA证书链。在单向TLS中不使用此文件但用于验证双向TLS中的客户端证书。 - `/path/to/ca.crt`: CA 证书链。在单向 TLS 中不使用此文件,但用于验证双向 TLS 中的客户端证书。
2. 将以下选项添加到 `my.cnf` 2. 将以下选项添加到 `my.cnf`
@@ -273,7 +272,7 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
chmod 0600 /path/to/ca.crt /path/to/mysql.crt /path/to/mysql.key chmod 0600 /path/to/ca.crt /path/to/mysql.crt /path/to/mysql.key
``` ```
4. 重新启动MySQL以应用设置。 4. 重新启动 MySQL 以应用设置。
5. Gitea 的数据库用户可能已经创建过,但只会对运行 Gitea 的服务器的 IP 地址进行身份验证。要对其域名进行身份验证,请重新创建用户,并设置其需要通过 TLS 连接到数据库: 5. Gitea 的数据库用户可能已经创建过,但只会对运行 Gitea 的服务器的 IP 地址进行身份验证。要对其域名进行身份验证,请重新创建用户,并设置其需要通过 TLS 连接到数据库:
@@ -286,9 +285,9 @@ Gitea 使用的 PostgreSQL 驱动程序支持双向 TLS。在双向 TLS 中,
根据需要替换数据库用户名、密码和 Gitea 实例域名。 根据需要替换数据库用户名、密码和 Gitea 实例域名。
6. 确保用于验证数据库服务器证书的CA证书链位于数据库和 Gitea 服务器的系统证书存储中。请参考系统文档中有关将 CA 证书添加到证书存储的说明。 6. 确保用于验证数据库服务器证书的 CA 证书链位于数据库和 Gitea 服务器的系统证书存储中。请参考系统文档中有关将 CA 证书添加到证书存储的说明。
7. 在运行Gitea的服务器上测试与数据库的连接 7. 在运行 Gitea 的服务器上,测试与数据库的连接:
``` ```
mysql -u gitea -h example.db -p --ssl mysql -u gitea -h example.db -p --ssl

View File

@@ -6,7 +6,6 @@ sidebar_position: 15
aliases: aliases:
- /zh-cn/install-from-binary - /zh-cn/install-from-binary
--- ---
# 使用二进制文件安装 # 使用二进制文件安装
@@ -38,7 +37,7 @@ chmod +x gitea
## 验证 GPG 签名 ## 验证 GPG 签名
Gitea 对打包的二进制文件使用 [GPG密钥](https://keys.openpgp.org/search?q=teabot%40gitea.io) 签名以防止篡改。 Gitea 对打包的二进制文件使用 [GPG 密钥](https://keys.openpgp.org/search?q=teabot%40gitea.io) 签名以防止篡改。
请根据对应文件名 `.asc` 中包含的校验码检验文件的一致性。 请根据对应文件名 `.asc` 中包含的校验码检验文件的一致性。
```sh ```sh
@@ -159,7 +158,7 @@ GITEA_WORK_DIR=/var/lib/gitea/ /usr/local/bin/gitea web -c /etc/gitea/app.ini
**提示:** 我们不建议使用 SIGKILL 信号(`-9`),这会强制停止 Gitea 程序,但不会正确关闭队列、索引器等任务。 **提示:** 我们不建议使用 SIGKILL 信号(`-9`),这会强制停止 Gitea 程序,但不会正确关闭队列、索引器等任务。
请参阅下面的疑难解答说明以在Gitea版本更新后修复损坏的仓库。 请参阅下面的疑难解答说明,以在 Gitea 版本更新后修复损坏的仓库。
## 排查故障 ## 排查故障

View File

@@ -6,7 +6,6 @@ sidebar_position: 20
aliases: aliases:
- /zh-cn/install-from-package - /zh-cn/install-from-package
--- ---
# 使用包管理器安装 # 使用包管理器安装

View File

@@ -6,18 +6,17 @@ sidebar_position: 30
aliases: aliases:
- /zh-cn/install-from-source - /zh-cn/install-from-source
--- ---
# 使用源代码安装 # 使用源代码安装
首先你需要安装Golang关于Golang的安装参见[官方文档](https://golang.google.cn/doc/install)。 首先你需要安装 Golang关于 Golang 的安装,参见[官方文档](https://golang.google.cn/doc/install)。
其次你需要[安装Node.js](https://nodejs.org/zh-cn/download/)Node.js 和 npm 将用于构建 Gitea 前端。 其次你需要[安装 Node.js](https://nodejs.org/zh-cn/download/)Node.js 和 npm 将用于构建 Gitea 前端。
## 下载 ## 下载
你需要获取Gitea的源码最方便的方式是使用 `git` 命令。执行以下命令: 你需要获取 Gitea 的源码,最方便的方式是使用 `git` 命令。执行以下命令:
``` ```
git clone https://github.com/go-gitea/gitea git clone https://github.com/go-gitea/gitea
@@ -53,8 +52,8 @@ git checkout @sourceVersion@
按照您的编译需求,以下 tags 可以使用: 按照您的编译需求,以下 tags 可以使用:
- `bindata`: 这个编译选项将会把运行Gitea所需的所有外部资源都打包到可执行文件中这样部署将非常简单因为除了可执行程序将不再需要任何其他文件。 - `bindata`: 这个编译选项将会把运行 Gitea 所需的所有外部资源都打包到可执行文件中,这样部署将非常简单因为除了可执行程序将不再需要任何其他文件。
- `sqlite sqlite_unlock_notify`: 这个编译选项将启用SQLite3数据库的支持建议只在少数人使用时使用这个模式。 - `sqlite sqlite_unlock_notify`: 这个编译选项将启用 SQLite3 数据库的支持,建议只在少数人使用时使用这个模式。
- `pam`: 这个编译选项将会启用 PAM (Linux Pluggable Authentication Modules) 认证,如果你使用这一认证模式的话需要开启这个选项。 - `pam`: 这个编译选项将会启用 PAM (Linux Pluggable Authentication Modules) 认证,如果你使用这一认证模式的话需要开启这个选项。
使用 bindata 可以打包资源文件到二进制可以使开发和测试更容易,你可以根据自己的需求决定是否打包资源文件。 使用 bindata 可以打包资源文件到二进制可以使开发和测试更容易,你可以根据自己的需求决定是否打包资源文件。

Some files were not shown because too many files have changed in this diff Show More