{"id":15364,"date":"2025-03-14T09:01:40","date_gmt":"2025-03-14T01:01:40","guid":{"rendered":"https:\/\/fgchen.com\/wpedu\/?p=15364"},"modified":"2026-03-30T14:28:32","modified_gmt":"2026-03-30T06:28:32","slug":"%f0%9f%9a%80-github-%e7%89%88%e6%9c%ac%e7%ae%a1%e6%8e%a7%e5%af%a6%e6%88%b0%e6%95%99%e5%ad%b8","status":"publish","type":"post","link":"https:\/\/fgchen.com\/wpedu\/2025\/03\/%f0%9f%9a%80-github-%e7%89%88%e6%9c%ac%e7%ae%a1%e6%8e%a7%e5%af%a6%e6%88%b0%e6%95%99%e5%ad%b8\/","title":{"rendered":"\ud83d\ude80 GitHub \u7248\u672c\u7ba1\u63a7\u5be6\u6230\u6559\u5b78"},"content":{"rendered":"\n<p>\u9019\u662f\u4e00\u4efd <strong>GitHub \u7248\u672c\u7ba1\u63a7\u7684\u5be6\u52d9\u6559\u5b78<\/strong>\uff0c\u6a21\u64ec\u4e00\u500b <strong>\u4e09\u4eba\u5718\u968a<\/strong> \u5171\u540c\u958b\u767c\u5c08\u6848\u7684\u5b8c\u6574\u6d41\u7a0b\uff0c\u5305\u542b <strong>\u5c08\u6848\u5efa\u7acb\u3001\u5206\u652f\u7ba1\u7406\u3001\u5354\u4f5c\u6d41\u7a0b\u3001\u5408\u4f75\uff08Merge\uff09\u3001\u7248\u672c\u767c\u5e03\uff08Releases\uff09<\/strong> \u7b49\u5167\u5bb9\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>\ud83d\udee0\ufe0f \u6a21\u64ec\u5834\u666f<\/strong><\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5c08\u6848\u540d\u7a31<\/strong>\uff1a<code>team-project<\/code><\/li>\n\n\n\n<li><strong>\u5718\u968a\u6210\u54e1<\/strong>\n<ul class=\"wp-block-list\">\n<li>Alice\uff08\u8ca0\u8cac\u524d\u7aef\uff09<\/li>\n\n\n\n<li>Bob\uff08\u8ca0\u8cac\u5f8c\u7aef\uff09<\/li>\n\n\n\n<li>Charlie\uff08\u8ca0\u8cac\u6e2c\u8a66\uff09<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1\ufe0f\u20e3 \u521d\u59cb\u5316\u5c08\u6848<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\ud83d\udd39 (1) \u5275\u5efa GitHub \u5132\u5b58\u5eab<\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u767b\u5165 GitHub\uff0c\u9ede\u64ca <strong>\u300cNew Repository\u300d<\/strong><\/li>\n\n\n\n<li>\u8a2d\u5b9a\uff1a\n<ul class=\"wp-block-list\">\n<li><strong>Repository Name<\/strong>\uff1a<code>team-project<\/code><\/li>\n\n\n\n<li><strong>Visibility<\/strong>\uff1a\u9078\u64c7 <code>Private<\/code>\uff08\u5167\u90e8\u958b\u767c\uff09\u6216 <code>Public<\/code><\/li>\n\n\n\n<li><strong>\u521d\u59cb\u5316\u8a2d\u5b9a<\/strong>\uff1a\n<ul class=\"wp-block-list\">\n<li>\u2714 <code>Add a README.md<\/code><\/li>\n\n\n\n<li>\u2714 <code>.gitignore<\/code>\uff08\u9078\u64c7 Node.js \u6216 Python\uff09<\/li>\n\n\n\n<li>\u2714 <code>MIT License<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u9ede\u64ca <strong>\u300cCreate Repository\u300d<\/strong> \u2705<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\ud83d\udd39 (2) Clone \u5c08\u6848\u5230\u672c\u5730<\/strong><\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git clone https:\/\/github.com\/your-team\/team-project.git\ncd team-project\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2\ufe0f\u20e3 \u7248\u672c\u63a7\u5236\u57fa\u790e<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\ud83d\udd39 (1) \u8a2d\u5b9a\u4e3b\u5206\u652f\uff08Main Branch\uff09<\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6aa2\u67e5\u7576\u524d\u5206\u652f<\/strong> <code>git branch<\/code> <strong>\u8f38\u51fa<\/strong> <code>* main<\/code><\/li>\n\n\n\n<li><strong>\u8a2d\u5b9a\u5206\u652f\u4fdd\u8b77<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u9032\u5165 GitHub \u2192 <code>Settings<\/code> \u2192 <code>Branches<\/code><\/li>\n\n\n\n<li>\u9078\u64c7 <code>Add branch protection rule<\/code><\/li>\n\n\n\n<li>\u8a2d\u5b9a\uff1a\n<ul class=\"wp-block-list\">\n<li>\u2705 <code>Require pull request before merging<\/code><\/li>\n\n\n\n<li>\u2705 <code>Require status checks<\/code><\/li>\n\n\n\n<li>\u2705 <code>Include administrators<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u76ee\u6a19<\/strong>\uff1a\u5f37\u5236 PR \u5408\u4f75\uff0c\u4e0d\u80fd\u76f4\u63a5 Push \u5230 <code>main<\/code>\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\ud83d\udd39 (2) \u5efa\u7acb\u958b\u767c\u5206\u652f<\/strong><\/h3>\n\n\n\n<p>\ud83d\ude80 <strong>\u5718\u968a\u898f\u7bc4<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>feature-xxx<\/code>\uff1a\u65b0\u529f\u80fd<\/li>\n\n\n\n<li><code>bugfix-xxx<\/code>\uff1a\u4fee\u5fa9\u554f\u984c<\/li>\n\n\n\n<li><code>hotfix-xxx<\/code>\uff1a\u7dca\u6025\u4fee\u5fa9<\/li>\n\n\n\n<li><code>release-xxx<\/code>\uff1a\u7248\u672c\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<p><strong>\u7bc4\u4f8b\uff1aAlice \u8ca0\u8cac\u958b\u767c\u9996\u9801<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git checkout -b feature-homepage\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3\ufe0f\u20e3 \u5718\u968a\u958b\u767c\u8207\u5354\u4f5c<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\ud83d\udd39 (1) Alice \u7de8\u5beb\u7a0b\u5f0f\u4e26\u63d0\u4ea4<\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4fee\u6539 <code>index.html<\/code><\/strong> <code>&lt;h1>Welcome to Our Project&lt;\/h1><\/code><\/li>\n\n\n\n<li><strong>\u63d0\u4ea4\u8b8a\u66f4<\/strong> <code>git add . git commit -m \"\u65b0\u589e\u9996\u9801\u8a2d\u8a08\" git push origin feature-homepage<\/code><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\ud83d\udd39 (2) \u63d0\u4ea4 Pull Request\uff08PR\uff09<\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u9032\u5165 GitHub \u2192 <code>Pull Requests<\/code> \u2192 <code>New Pull Request<\/code><\/li>\n\n\n\n<li><strong>\u9078\u64c7\u5206\u652f<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Base<\/strong>\uff1a<code>main<\/code><\/li>\n\n\n\n<li><strong>Compare<\/strong>\uff1a<code>feature-homepage<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u586b\u5beb PR \u8aaa\u660e<\/strong> <code>\u2705 \u65b0\u589e\u9996\u9801 UI - \u8a2d\u8a08\u9996\u9801\u7d50\u69cb - \u52a0\u5165 CSS \u6a23\u5f0f<\/code><\/li>\n\n\n\n<li><strong>\u6307\u6d3e Reviewer\uff08Charlie\uff09<\/strong><\/li>\n\n\n\n<li><strong>\u63d0\u4ea4 PR<\/strong><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\ud83d\udd39 (3) \u9032\u884c Code Review<\/strong><\/h3>\n\n\n\n<p>\ud83d\ude80 <strong>Charlie \u9032\u884c Code Review<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u9032\u5165 PR\uff0c\u9ede\u64ca <code>Files Changed<\/code><\/li>\n\n\n\n<li>\u7559\u4e0b\u610f\u898b\uff1a <code>\ud83d\udca1 \u5efa\u8b70\u8abf\u6574\u6a19\u984c\u984f\u8272<\/code><\/li>\n\n\n\n<li>Alice \u4fee\u6b63\u5f8c\u518d\u6b21\u63d0\u4ea4\uff1a <code>git add . git commit -m \"\u8abf\u6574\u9996\u9801\u6a19\u984c\u984f\u8272\" git push origin feature-homepage<\/code><\/li>\n\n\n\n<li><strong>Charlie Approve PR\uff0cAlice Merge PR<\/strong><\/li>\n\n\n\n<li><strong>\u522a\u9664\u958b\u767c\u5206\u652f<\/strong> <code>git branch -d feature-homepage git push origin --delete feature-homepage<\/code><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>4\ufe0f\u20e3 \u7248\u672c\u767c\u5e03\uff08Releases\uff09<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\ud83d\udd39 (1) \u5efa\u7acb\u7248\u672c\u6a19\u7c64<\/strong><\/h3>\n\n\n\n<p>\ud83d\ude80 <strong>\u5718\u968a\u5b8c\u6210 v1.0 \u529f\u80fd<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">git tag -a v1.0 -m \"\u6b63\u5f0f\u7248\u767c\u5e03\"\ngit push origin v1.0\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\ud83d\udd39 (2) GitHub Releases<\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u9032\u5165 GitHub \u2192 <code>Releases<\/code><\/li>\n\n\n\n<li>\u9ede\u64ca <code>Draft a new release<\/code><\/li>\n\n\n\n<li><strong>\u586b\u5beb\u7248\u672c\u8cc7\u8a0a<\/strong> <code>\ud83c\udf89 v1.0 \u7248\u672c\u767c\u5e03 \u2705 \u65b0\u589e\u9996\u9801 UI \u2705 \u5efa\u7acb\u5f8c\u7aef API \u2705 \u5b8c\u6210\u57fa\u672c\u6e2c\u8a66<\/code><\/li>\n\n\n\n<li><strong>\u767c\u5e03\u7248\u672c<\/strong> \ud83c\udf89<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>5\ufe0f\u20e3 CI\/CD \u81ea\u52d5\u5316<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\ud83d\udd39 (1) \u8a2d\u7f6e GitHub Actions<\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5728 <code>.github\/workflows\/ci.yml<\/code> \u65b0\u589e\uff1a <code>name: CI Pipeline on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions\/checkout@v2 - name: Install dependencies run: npm install - name: Run Tests run: npm test<\/code><\/li>\n\n\n\n<li><strong>\u6bcf\u6b21 PR \u6703\u81ea\u52d5\u6e2c\u8a66\uff0c\u78ba\u4fdd\u7a0b\u5f0f\u78bc\u54c1\u8cea<\/strong> \u2705<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>\ud83d\udd25 \u7e3d\u7d50<\/strong><\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u6b65\u9a5f<\/th><th>\u64cd\u4f5c<\/th><\/tr><\/thead><tbody><tr><td><strong>\u5efa\u7acb\u5c08\u6848<\/strong><\/td><td><code>git clone<\/code>\u3001\u521d\u59cb\u5316 GitHub Repository<\/td><\/tr><tr><td><strong>\u5206\u652f\u7ba1\u7406<\/strong><\/td><td><code>feature-xxx<\/code>\u3001<code>bugfix-xxx<\/code><\/td><\/tr><tr><td><strong>\u958b\u767c\u6d41\u7a0b<\/strong><\/td><td><code>git checkout -b feature-name<\/code><\/td><\/tr><tr><td><strong>\u63d0\u4ea4 PR<\/strong><\/td><td><code>git push origin feature-name<\/code><\/td><\/tr><tr><td><strong>Code Review<\/strong><\/td><td>\u900f\u904e GitHub \u7559\u8a00\u5be9\u6838<\/td><\/tr><tr><td><strong>\u5408\u4f75\u4e3b\u5206\u652f<\/strong><\/td><td><code>git merge<\/code><\/td><\/tr><tr><td><strong>\u7248\u672c\u767c\u5e03<\/strong><\/td><td><code>git tag v1.0<\/code><\/td><\/tr><tr><td><strong>CI\/CD \u81ea\u52d5\u5316<\/strong><\/td><td><code>GitHub Actions<\/code> \u9032\u884c\u6e2c\u8a66<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u9019\u6a23\uff0c\u6574\u500b GitHub \u7248\u672c\u7ba1\u63a7\u7684 <strong>\u5718\u968a\u5354\u4f5c\u6d41\u7a0b<\/strong> \u5c31\u5b8c\u6574\u843d\u5730\u4e86\uff01\ud83d\ude80 \u9019\u7a2e\u65b9\u5f0f\u9069\u7528\u65bc <strong>\u5b78\u751f\u5c08\u6848\u3001\u4f01\u696d\u958b\u767c\u3001\u958b\u6e90\u5c08\u6848<\/strong> \u7b49\u5834\u666f\uff0c\u78ba\u4fdd\u958b\u767c\u6709\u689d\u4e0d\u7d0a\u3001\u7248\u672c\u53ef\u8ffd\u6eaf\u3002 \ud83d\udca1<\/p>\n\n\n\n<p>\u4f60\u53ef\u4ee5\u8a66\u8457\u5be6\u4f5c\u770b\u770b\uff0c\u6216\u6839\u64da\u4f60\u7684\u5c08\u6848\u9700\u6c42\u8abf\u6574\u7d30\u7bc0\uff01\ud83d\udcaa<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u9019\u662f\u4e00\u4efd GitHub \u7248\u672c\u7ba1\u63a7\u7684\u5be6\u52d9\u6559\u5b78\uff0c\u6a21\u64ec\u4e00\u500b \u4e09\u4eba\u5718\u968a \u5171\u540c\u958b\u767c\u5c08\u6848\u7684\u5b8c &hellip; <\/p>\n","protected":false},"author":1,"featured_media":15365,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[266],"tags":[],"class_list":["post-15364","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-266"],"_links":{"self":[{"href":"https:\/\/fgchen.com\/wpedu\/wp-json\/wp\/v2\/posts\/15364","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fgchen.com\/wpedu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fgchen.com\/wpedu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fgchen.com\/wpedu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fgchen.com\/wpedu\/wp-json\/wp\/v2\/comments?post=15364"}],"version-history":[{"count":1,"href":"https:\/\/fgchen.com\/wpedu\/wp-json\/wp\/v2\/posts\/15364\/revisions"}],"predecessor-version":[{"id":15366,"href":"https:\/\/fgchen.com\/wpedu\/wp-json\/wp\/v2\/posts\/15364\/revisions\/15366"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fgchen.com\/wpedu\/wp-json\/wp\/v2\/media\/15365"}],"wp:attachment":[{"href":"https:\/\/fgchen.com\/wpedu\/wp-json\/wp\/v2\/media?parent=15364"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fgchen.com\/wpedu\/wp-json\/wp\/v2\/categories?post=15364"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fgchen.com\/wpedu\/wp-json\/wp\/v2\/tags?post=15364"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}