gitea

go-giteaMIT活跃维护

轻量自托管的一站式软件开发平台,用 Go 编写,集 Git 托管、代码评审、团队协作、包注册表和 CI/CD 于一体,适合想摆脱 GitHub/GitLab 依赖的团队。

Git with a cup of tea! Painless self-hosted all-in-one software development service, including Git hosting, code review, team collaboration, package registry and CI/CD

v28.3.0发布于 2026-11-01 09:55 UTC59,007star +72 / 7 天7,385fork同步于 2026-11-10 17:18 UTC

怎么上手

由 README 提炼,执行前请确认
docker run -p 3000:3000 -p 222:22 gitea/gitea
硬件要求按 README 说明

README 未说明具体硬件要求;因用 Go 编写,可运行在 Go 支持的 Linux、macOS、FreeBSD/OpenBSD、Windows 及 x86、amd64、ARM、RISC-V 64、PowerPC 架构上。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

用 Go 写的自托管一体化研发平台,把 Git 托管、代码评审、Issue、包仓库和 CI/CD 装进一个二进制

轻量自托管的一站式软件开发平台,用 Go 编写,集 Git 托管、代码评审、团队协作、包注册表和 CI/CD 于一体,适合想摆脱 GitHub/GitLab 依赖的团队。

核心能力

  • 用 Go 编写,单二进制跨平台运行
  • 内置 Git 托管、代码评审与 Issue 跟踪
  • 提供项目看板、Wiki 与团队协作
  • 集成包仓库与 CI/CD,可复用 GitHub Actions
  • 支持 Docker/Podman 官方镜像一键部署

容易踩的坑

从源码构建需先按 docs/build-setup.md 准备依赖;静态配置要改 app.ini 并重启实例才生效;CI/CD 需额外部署官方 action runner 才能执行流水线

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v28.3.0
  1. v28.3.0最新正式版2026-11-01 · 2026-11-01 09:55 UTC

    [28.3.0] - 2026-11-01

    Enhancements

    • Improve hover border of colored button groups (#39861) (#39899)
    • (webhook) Mention release assets in notifications (#39631) (#39912)
    • (project) Filter project milestones by linked issues (#39958) (#39984)

    Performance

    • (actions) Cache successful runner token verification (#39934) (#39959)
    • (actions) Is_reusable_caller index makes SQLite read nearly every job row (#40055) (#40064)
    • Speed up the issue and pull request dashboards and fix table indices (#40001) (#40096)
    • Speed up repository issue and pull request lists (#40114) (#40132)
    • (pull) Load the repository once for all commit statuses (#39930) (#40135)

    Bug Fixes

    • (pulls) Tolerate invalid stored review commit_id (#39849) (#39857)
    • (api) Skip label lookup in ListIssues when no labels filter given (#39890) (#39893)
    • Prevent system users from watching a repository (#39886) (#39895)
    • Off-by-one errors in code comment patches (#39887) (#39904)
    • Use clear error message when failed to parse git version (#39898) (#39903)
    • (packages) Reject newline-bearing rubygems dependency metadata (#39782) (#39900)
    • Enforce public-only token scope on more routes (#39690) (#39853)
    • (api) Return 4xx for invalid fork repository names (#39909) (#39919)
    • (lfs) Send the default branch as ref in batch download requests (#39891) (#39920)
    • (api) Keep milestone due date when it is omitted in edit request (#39869) (#39921)
    • (oauth2) Decode form-encoded client credentials in HTTP Basic auth (#39926) (#39931)
    • (issues) Keep one row per issue when sorting by exclusive label order (#39364) (#39928)
    • (api) Check unit read permission in issue sub-resource endpoints (#39885) (#39938)
    • (migrations) Use cursor pagination for GitHub issue migration too (#39888) (#39941)
    • (feed) Hide release notes in tags feed without releases access (#39944) (#39949)
    • (api) Adding issue labels by name attaches both the repo and the org label (#39873) (#39951)
    • (actions) Bound requested artifact retention (#39894) (#39946)
    • (actions) Drop untrusted Content-Encoding from v1 artifact uploads (#39855) (#39996)
    • Get valid UTF-8 for diff_hunk and composer readme (#39932) (#40000)
    • (diff) Load both blobs of renamed files for diff rendering (#39969) (#39992)
    • (migrations) Update gitea sdk to fix nil pointer panic (#39999)
    • Fix OneDev migration with OneDev 16.8 and newer (#40017) (#40026)
    • (git) Default to the gc maintenance strategy (#40022) (#40029)
    • Replace null char with space for issue/comment content (#40014) (#40034)
    • (issue) Prevent redirect to external tracker when built-in tracker is enabled (#39997) (#40031)
    • (markup) Keep commit title emoji inside links (#39986) (#40032)
    • (repo) Use the viewed ref's editorconfig in file view, blame and editor (#39973) (#40019)
    • (deps) Update module golang.org/x/net to v0.62.0 [security] (#40050) (#40051)
    • Size mermaid iframe by the diagram's aspect ratio (#40046) (#40052)
    • (feed) Require code read access for the repo home branch feed (#39964) (#40067)
    • Add missing access checks and size limits (#39942) (#40085)
    • (user) Answer the follow of a bot user with the profile card (#39980) (#40086)
    • (repo) Honor ALLOW_FORK_INTO_SAME_OWNER for organizations (#40025) (#40094)
    • (ui) Ignore code line anchors below 1, show JS errors in vite dev mode (#39432) (#40087)
    • (pull) Refuse review comments on locked pull requests (#39960) (#40084)
    • (api) Answer 409 when repository files already exist on disk (#40095) (#40098)
    • (mail) Preserve outer spacing in notification emails (#40104) (#40111)
    • (actions) Run review-triggered workflows on the pull request head (#40099) (#40117)
    • (pull) Respect max approvers in default merge message (#40118) (#40119)
    • (actions) Don't pick up jobs of repos with Actions disabled (#40106) (#40122)
    • Harden context user access scope (#39945) (#40115)
    • (projects) Hide linked pull requests the viewer cannot read (#
  2. v28.2.02026-10-18 · 2026-10-18 18:25 UTC
    查看更新说明

    [28.2.0] - 2026-10-18

    Enhancements

    • (oauth) Pre-register a builtin OAuth2 application for gitea-vscode (#39785) (#39801)
    • Allow custom watches to bypass on-mention email restriction (#39652) (#39837)

    Bug Fixes

    • Various bugs (#39661) (#39667)
    • (markup) Display MathML has no space below it (#39663) (#39668)
    • Correct websocket notification for change password page (#39671) (#39670)
    • (webhook) Keep line breaks in Telegram rich messages (#39650) (#39677)
    • Correct "go get" URL ssh scheme, fix form binding (#39674, #39528) (#39676)
    • OIDC discovery advertises unsupported id_token response_type (#39498) (#39689)
    • (deps) Update module golang.org/x/net to v0.60.0 [security] (#39695) (#39701)
    • (git) Leave reflog expiry to git's defaults (#39703) (#39711)
    • (actions) Settle cancelled reusable workflow runs stuck in cancelling (#39706) (#39717)
    • (git) Match git config values exactly when syncing (#39728) (#39729)
    • (actions) Harden log cursor, activity type and actor filter handling (#39721) (#39731)
    • (packages) Copy selected Debian installation values (#39718) (#39734)
    • (auth) Prevent competing remember-me token rotations (#39686) (#39688)
    • (packages/npm) Restore former tarball URLs (#39681) (#39749)
    • (issues) Allow selecting a tag in the issue Branch/Tag dropdown (#39747) (#39753)
    • Validate "state" for OpenID (#39642) (#39744)
    • Correct label deletion and release attachment load (#39743) (#39752)
    • (markup) Resolve and proxy srcset links of elements (#39708) (#39756)
    • (lfs) Validate OID before building filesystem object path (#39762) (#39766)
    • (markup) Restore code copy newline strip and fix copying rendered blocks (#39755) (#39765)
    • (user) Don't match a commit with an empty author email to a user (#39777) (#39780)
    • (gitdiff) Unquote C-quoted paths from git diff-tree --raw (#39781) (#39783)
    • (actions) Fix schedule cleanup and default branch switch (#39740) (#39786)
    • Skip commit-graph write when fetching remote commits (#39798)
    • (webauthn) Accept unsolicited client extension outputs from WebKit clients (#39792) (#39806)
    • (pull) Fix code context of review comments on unchanged lines (#39799) (#39805)
    • (pull) Don't auto-detect empty pull requests as manually merged (#39807) (#39812)
    • (actions) Keep folded block scalars intact across serialization (#39787) (#39817)
    • (actions) Bound request body size in artifacts v4 twirp handlers (#39818) (#39822)
    • Prevent Gitea from crashing by notification panic (#39835)
    • (pull) Recover PRs whose recorded merge commit never reached the base repo (#39831) (#39840)
    • Use correct template variable on milestone page (#39834) (#39843)
    • (mailer) Reject incoming email tokens of users who cannot sign in (#39833) (#39841)
    • Add missing checks to several handlers and models (#39839) (#39847)
  3. v28.1.02026-10-06 · 2026-10-06 20:14 UTC
    查看更新说明

    [28.1.0] - 2026-10-06

    Enhancements

    • (packages/npm) Improve npm client compatibility (#39434) (#39522)

    Bug Fixes

    • (actions) Keep runs order after auto refresh (#39479) (#39481)
    • Npm route (#39488) (#39490)
    • Copy new access token to clipboard (#39496) (#39499)
    • (markup) Skip post-processing inside MathML (#39497) (#39502)
    • (markup) Don't escape ambiguous characters in MathML (#39493) (#39505)
    • Add missing checks to several API and web handlers (#39501) (#39507)
    • Handle git branch name with special chars correctly (#39483) (#39515)
    • Trace git command correctly (#39520) (#39524)
    • (git) Reindex go-git storage when a concurrent repack removes packs (#39510) (#39534)
    • (oauth2) Allow users to approve scope changes (#38942) (#39521)
    • (api) Add index tiebreaker to commit status ordering (#39508) (#39525)
    • (git) Avoid unnecessary timers during language stats (#39531) (#39535)
    • Use READ COMMITTED transactions on MySQL and MariaDB (#39506) (#39537)
    • (markup) Use installed math fonts for MathML in Chromium (#39491) (#39547)
    • (git) Tolerate concurrent repacks in go-git storage (#39536) (#39556)
    • Make image captcha work with csp (#39555)
    • Use READ_COMMITTED_SNAPSHOT on MSSQL (#39512) (#39558)
    • Make navbar stopwatch button can show popup (#39562)
    • (actions) Restore pushes to protected branches (#39564) (#39567)
    • (api) Allow bots with pending password changes (#39551) (#39566)
    • (user) Restore organizations tab on user profile (#39577) (#39581)
    • (markup) Link team mentions that use a different org name case (#39436) (#39588)
    • (httpcache) Raw files return 304 after a change when the new commit is older (#39435) (#39591)
    • (git) Return no submodule web link when the URL cannot be parsed (#39274) (#39592)
    • (pull) Fetch PR head refs instead of pushing them (#39603) (#39607)
    • Migrate broken team authorize access mode (#39579) (#39580)
    • (actions) Refresh reusable caller status when children are skipped (#39589) (#39609)
    • Make "edit pr title & target branch" get correct branch (#39612) (#39621)
    • (egress) Expose more ranges as restricted rather than reserved (#39560) (#39624)
    • (web) Normalize content for edit history diff and fix comment history dropdown (#39616) (#39627)
    • Correct RemoveWithRetry error handling (#39619) (#39626)
    • (pull) Refresh commits behind when an AGit pull request is updated (#39613) (#39625)
    • (models) Chunk commit status queries to avoid SQLite expression depth limit (#39611) (#39638)
    • Show "merge" form for empty PR (#39640) (#39645)
  4. v28.0.02026-09-29 · 2026-09-29 23:25 UTC
    查看更新说明
    • BREAKING

      • Fix(git)!: route Git network operations through an internal proxy and update egress settings (#39426)
      • Feat(actions)!: add RUN_RETENTION_DAYS to delete old action runs (#38855)
    • SECURITY

      • Fix(git): reject invalid and duplicate Git objects on push (#39472)
      • Fix(git)!: route Git network operations through an internal proxy and update egress settings (#39426)
      • Fix(ssh): identify presented public keys by fingerprint (#39423)
      • Fix(actions): keep cancelled and unapproved fork PR runs behind the approval gate (#39399)
      • Fix(deps): update golang.org/x/crypto SSH to address denial of service (#39219)
      • Fix(repo): enforce repository-scoped authorization for team access, deletion, and package unlinking (#39063)
    • FEATURES

      • Feat(actions): update actionslib, support self:, misc fixes (#39358)
      • Feat(api): list all packages for site administrators (#38968)
      • Feat: manage bot accounts from the admin UI, API and CLI (#38966)
      • Feat(user): Personal access tokens can be regenerated (#38907)
      • Feat(actions): support $/ prefix in reusable workflow uses: (#38822)
      • Feat(actions): add force-cancel workflow run API (#38756)
      • Feat(licenses): support REUSE specification in licenses (#38720)
      • Feat(api): add project APIs (#38691)
      • Feat(webhook): fire repository event on repo rename (#38641)
      • Feat: admin impersonates a user (#38614)
      • Feat(actions): add build queue view (#38585)
      • Feat(setting): add shared [redis] section as default for redis-backed subsystems (#38550)
      • Feat(repo): prioritize well-known READMEs and optimize discovery (#38532)
      • Feat(actions): implement adaptive auto-refresh for workflow runs list (#38329)
      • Feat(auth): add disable-2fa command (#38275)
      • Feat: Add audit logging (#38189)
      • Feat(repo): add quick repository switcher to repo header (#38188)
      • Feat(repo): support file exclusion logic in .gitea/template in template generation (#38064)
      • Feat(web): Add org removal functionality to admin user details page (#38013)
      • Feat: add watch options (#37571)
      • Feat: add deploy tokens (#37306)
      • Feat(diff): Add search and extension filter to diff sidebar (#37068)
      • Feat: Replace SSE with WebSocket for UI notifications (#36965)
      • Feat(actions): Add artifact preview in Actions run view (#36754)
      • Feat(packages): add support for uploading helm provenance files ([#36695](https://github.com/go-gite
  5. v1.27.32026-08-29 · 2026-08-29 17:42 UTC
    查看更新说明
    • SECURITY
      • fix(packages): restrict/limited/token-scope access (#39041, #39043, #39044, #39047, #39046) (#39058)
      • fix(attachments): enforce owning repository path (#39048) (#39077)
      • fix(markup): enforce same-repository issue access (#39045) (#39054)
      • fix(actions): verify raw artifact signatures first (#39049) (#39053)
      • fix(api): hide limited users from restricted viewers (#39004) (#39039)
      • fix(repo): limit gitignore template selections (#39027) (#39040)
      • fix(migrations): cancel GitLab version probes (#39023) (#39035)
      • fix(packages): limit Swift package manifests (#39025) (#39032)
      • fix(migrations): bound OneDev version responses (#39024) (#39033)
      • fix(packages): limit Maven checksum uploads (#39028) (#39031)
      • fix(packages): bound Alpine metadata entries (#39026) (#39029)
      • fix(actions): enforce fork pull request trust boundaries (#39005) (#39018)
      • fix(git): restrict hook permissions (#39008) (#39016)
      • fix(api): enforce repository creation token authorization (#39007) (#39014)
      • fix(api): enforce public-only scope for compare heads (#39006) (#39013)
      • fix(repo): hide repositories of hidden owners (#39009) (#39012)
      • fix: avoid enumerating every public repository in issue search (#38992) (#39000)
      • refactor: private endpoints (#38964) (#38965)
    • ENHANCEMENTS
      • enhance: add permalinks to pull request reviews (#38849) (#39036)
    • BUGFIXES
      • fix: add missing query parameters on runner list page (#39163)
      • fix(actions): keep step-level continue-on-error expressions unevaluated (#39141) (#39148
      • fix(packages): preserve SemVer prerelease identifiers in Swift Registry (#39156) (#39158)
      • fix(repo): prevent MarkAsBrokenEmpty when repository is being migrated (#39091) (#39092)
      • fix(asymkey): do not verify OpenPGP signatures with an SSH instance key (#39073) (#39086)
      • fix(pull): keep the merged state in sync with git (#39062) (#39118)
      • fix(pull): name the head repository in default compare links (#39075) (#39079)
      • fix(git): parse co-author trailers that are not RFC 5322 addresses (#39076) (#39081)
      • fix(actions): show "Complete job" logs when the last step is skipped (#38939) (#39003)
      • fix(actions): Fix how jobs in matrixes are grouped (#38980) (#38998)
      • fix: resolve YAML anchors and aliases in Actions workflows (#38984) (#38996)
      • fix: honor environment variables during install (#38974) (#38976)
      • fix: grant limited-org unit read access to authenticated non-members (#38871) (#38963)
      • fix: allow anonymous theme switching when REQUIRE_SIGNIN_VIEW is set (#38956) (#38961)
      • fix(actions): drop wrapper span around the action status icon (#38957) (#38959)
      • fix(issues): sort scoped labels by exclusive order in dropdowns (#38893) (#38954)
      • fix(indexer): correct bleve indexer token filters (#38853) (#38951)
      • fix: make "login_name" field optional for API edit user (#38917) (#38945)
      • fix(actions): reject non-mapping matrix include/exclude (#38933)
      • fix(ui): respect FEED_PAGING_NUM on the dashboard feed (#38935) (#38936)
    • MISC
      • chore: repo compare link (#39088) (#39119)
      • ci: remove AWS S3 uploads from release workflows (#38928) (#38929)
      • chore: Pre-register a builtin OAuth2 application for the official Gitea mobile app (#38880) (#38922)

    Instances on Gitea Cloud will be automatically upgraded to this version during the specified maintenance window.

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    Gitea

    繁體中文 | 简体中文

    Purpose

    The goal of Gitea is to make the easiest, fastest, and most painless way of setting up a self-hosted all-in-one software development service, including Git hosting, code management, code review, issue tracking, project kanban, wiki, team collaboration, package registry and CI/CD which can reuse GitHub Actions.

    As Gitea is written in Go, it works across all the platforms and architectures that are supported by Go, including Linux, macOS, FreeBSD/OpenBSD and Windows on x86, amd64, ARM, RISC-V 64 and PowerPC architectures.

    For online demonstrations, you can visit demo.gitea.com.

    For accessing free Gitea service (with a limited number of repositories), you can visit gitea.com.

    To quickly deploy your own dedicated Gitea instance on Gitea Cloud, you can start a free trial at cloud.gitea.com, or use container (docker/podman/etc) to deploy on your own server with the official image.

    Documentation

    You can find comprehensive documentation on our official documentation website.

    It includes installation, administration, usage, development, contributing guides, and more to help you get started and explore all features effectively.

    If you have any suggestions or would like to contribute to it, you can visit the documentation repository

    Building

    See docs/build-setup.md for prerequisites and docs/development.md for setting up a local development environment, linting, and testing.

    If you'd like to build from source or make a distribution package, see docs/build-source.md for more information.

    After building, you can run ./gitea web to start the server, or ./gitea help to see all available commands.

    Contributing

    Expected workflow is: Fork -> Patch -> Push -> Pull Request

    [!NOTE]

    1. YOU MUST READ THE CONTRIBUTORS GUIDE BEFORE STARTING TO WORK ON A PULL REQUEST.
    2. New to the codebase? The development guide walks through setting up a local environment and building from source.
    3. If you have found a vulnerability in the project, please write privately to [email protected]. Thanks!

    Translating

    Crowdin

    Translations are done through Crowdin. If you want to translate to a new language, ask one of the managers in the Crowdin project to add a new language there.

    You can also just create an issue for adding a language or ask on Discord on the #translation channel. If you need context or find some translation issues, you can leave a comment on the string or ask on Discord.

    Get more information from the translation section of our contributing guide.

    Official and Third-Party Projects

    We provide an official go-sdk, a CLI tool called gt and an action runner for Gitea Action.

    We maintain a list of Gitea-related projects at gitea/awesome-gitea, where you can discover more third-party projects, including SDKs, plugins, themes, and more.

    Communication

    If you have questions that are not covered by the documentation, you can get in contact with us on our Discord server or create a post in the discourse forum.

    Authors

    Backers

    Thank you to all our backers! 🙏 [Become a backer]

    Sponsors

    Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

    FAQ

    How do you pronounce Gitea?

    Gitea is pronounced /ɡɪ’ti:/ as in "gi-tea" with a hard g.

    How do I configure Gitea?

    For dynamic config options, you can change it on your admin panel's configuration section.

    For static config options, you can edit your app.ini file and restart the instance. See app.example.ini or configuration documentation for more details.

    Where can I find the security patches?

    Check the release notes and security advisories for security patches.

    (more FAQs are listed in FAQ documentation)

    License

    This project is licensed under the MIT License. See the LICENSE file for the full license text.

    Further information

    Login/Register Page

    Login Register

    User Dashboard

    Home Issues Pull Requests Milestones

    User Profile

    Profile

    Explore

    Repos Users Orgs

    Repository

    Home Commits Branches Labels Milestones Releases Tags

    Repository Issue

    List Issue

    Repository Pull Requests

    List Pull Request File Commits

    Repository Actions

    List Details

    Repository Activity

    Activity Contributors Code Frequency Recent Commits

    Organization

    Home