[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"knowledge-\u002Fapi\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fgit\u002Fgit-setup":3,"knowledge-related-\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fgit\u002Fgit-setup":1772,"knowledge-series-\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fgit\u002Fgit-setup":1798},{"source":4,"connector":5,"page":6},"sqlite","better-sqlite3",{"path":7,"title":8,"description":9,"category":10,"tags":11,"date":13,"pinned":14,"draft":14,"body":15,"seo":1768,"stem":1769,"id":1770,"extension":1771},"\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fgit\u002Fgit-setup","Git 安装、配置与仓库初始化","涵盖 Windows \u002F macOS \u002F Linux 下 Git 的安装方式、首次使用的全局配置（用户名、邮箱、别名等）、创建或克隆仓库的方式，以及 .gitignore 忽略规则的编写方法。","技能小册",[12],"git","2026-07-23",false,{"type":16,"value":17,"toc":1730},"minimark",[18,22,26,31,36,66,70,109,113,188,191,204,208,215,261,275,279,283,313,317,320,343,357,361,428,431,470,478,481,501,505,584,588,606,612,616,639,642,651,655,666,673,680,692,708,713,740,743,750,753,757,780,785,788,810,819,822,854,865,869,895,900,904,954,965,972,977,981,994,998,1007,1014,1018,1021,1182,1185,1289,1296,1317,1322,1376,1380,1390,1414,1420,1424,1430,1491,1495,1621,1625,1666,1669,1726],[19,20,8],"h1",{"id":21},"git-安装配置与仓库初始化",[23,24,25],"p",{},"在开始使用 Git 之前，需要先完成安装、基础配置，并了解如何创建\u002F克隆仓库以及排除不需要纳入版本控制的文件。本文汇总这三部分内容。",[27,28,30],"h2",{"id":29},"一安装-git","一、安装 Git",[32,33,35],"h3",{"id":34},"windows","Windows",[37,38,39,51,54],"ol",{},[40,41,42,43,50],"li",{},"访问 ",[44,45,49],"a",{"href":46,"rel":47},"https:\u002F\u002Fgit-scm.com\u002Fdownload\u002Fwin",[48],"nofollow","Git for Windows"," 下载安装包（.exe）。",[40,52,53],{},"运行安装程序，按默认选项安装即可（推荐保留默认设置，如“Git from the command line and also from 3rd-party software”）。",[40,55,56,57,61,62,65],{},"安装完成后，可在开始菜单找到 ",[58,59,60],"strong",{},"Git Bash","（推荐使用）或 ",[58,63,64],{},"Git CMD","。",[32,67,69],{"id":68},"macos","macOS",[71,72,73,102],"ul",{},[40,74,75,76],{},"使用 Homebrew（推荐）：",[77,78,83],"pre",{"className":79,"code":80,"language":81,"meta":82,"style":82},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","brew install git\n","bash","",[84,85,86],"code",{"__ignoreMap":82},[87,88,91,95,99],"span",{"class":89,"line":90},"line",1,[87,92,94],{"class":93},"sbgvK","brew",[87,96,98],{"class":97},"s_sjI"," install",[87,100,101],{"class":97}," git\n",[40,103,104,105],{},"或下载官方安装包：",[44,106,107],{"href":107,"rel":108},"https:\u002F\u002Fgit-scm.com\u002Fdownload\u002Fmac",[48],[32,110,112],{"id":111},"linux","Linux",[71,114,115,148],{},[40,116,117,120,121],{},[58,118,119],{},"Ubuntu \u002F Debian","：",[77,122,124],{"className":79,"code":123,"language":81,"meta":82,"style":82},"sudo apt update\nsudo apt install git\n",[84,125,126,137],{"__ignoreMap":82},[87,127,128,131,134],{"class":89,"line":90},[87,129,130],{"class":93},"sudo",[87,132,133],{"class":97}," apt",[87,135,136],{"class":97}," update\n",[87,138,140,142,144,146],{"class":89,"line":139},2,[87,141,130],{"class":93},[87,143,133],{"class":97},[87,145,98],{"class":97},[87,147,101],{"class":97},[40,149,150,120,153],{},[58,151,152],{},"CentOS \u002F RHEL",[77,154,156],{"className":79,"code":155,"language":81,"meta":82,"style":82},"sudo yum install git           # CentOS 7\nsudo dnf install git           # CentOS 8+\n",[84,157,158,174],{"__ignoreMap":82},[87,159,160,162,165,167,170],{"class":89,"line":90},[87,161,130],{"class":93},[87,163,164],{"class":97}," yum",[87,166,98],{"class":97},[87,168,169],{"class":97}," git",[87,171,173],{"class":172},"sutJx","           # CentOS 7\n",[87,175,176,178,181,183,185],{"class":89,"line":139},[87,177,130],{"class":93},[87,179,180],{"class":97}," dnf",[87,182,98],{"class":97},[87,184,169],{"class":97},[87,186,187],{"class":172},"           # CentOS 8+\n",[23,189,190],{},"验证安装成功：",[77,192,194],{"className":79,"code":193,"language":81,"meta":82,"style":82},"git --version\n",[84,195,196],{"__ignoreMap":82},[87,197,198,200],{"class":89,"line":90},[87,199,12],{"class":93},[87,201,203],{"class":202},"stzsN"," --version\n",[27,205,207],{"id":206},"二初次配置必须","二、初次配置（必须）",[23,209,210,211,214],{},"Git 需要知道你是谁，以便在提交时记录作者信息。使用 ",[84,212,213],{},"git config"," 命令进行全局配置：",[77,216,218],{"className":79,"code":217,"language":81,"meta":82,"style":82},"git config --global user.name \"Your Name\"\ngit config --global user.email \"your_email@example.com\"\n",[84,219,220,243],{"__ignoreMap":82},[87,221,222,224,227,230,233,237,240],{"class":89,"line":90},[87,223,12],{"class":93},[87,225,226],{"class":97}," config",[87,228,229],{"class":202}," --global",[87,231,232],{"class":97}," user.name",[87,234,236],{"class":235},"sjJ54"," \"",[87,238,239],{"class":97},"Your Name",[87,241,242],{"class":235},"\"\n",[87,244,245,247,249,251,254,256,259],{"class":89,"line":139},[87,246,12],{"class":93},[87,248,226],{"class":97},[87,250,229],{"class":202},[87,252,253],{"class":97}," user.email",[87,255,236],{"class":235},[87,257,258],{"class":97},"your_email@example.com",[87,260,242],{"class":235},[71,262,263,272],{},[40,264,265,268,269,271],{},[84,266,267],{},"--global"," 表示全局配置，作用于当前用户的所有仓库。如果去掉 ",[84,270,267],{},"，则仅对当前仓库生效。",[40,273,274],{},"请用真实姓名和邮箱，建议与 GitHub\u002FGitLab 等托管平台保持一致。",[27,276,278],{"id":277},"三常用配置","三、常用配置",[32,280,282],{"id":281},"_1-查看所有配置","1. 查看所有配置",[77,284,286],{"className":79,"code":285,"language":81,"meta":82,"style":82},"git config --list               # 查看全部配置\ngit config --global --list      # 查看全局配置\n",[84,287,288,300],{"__ignoreMap":82},[87,289,290,292,294,297],{"class":89,"line":90},[87,291,12],{"class":93},[87,293,226],{"class":97},[87,295,296],{"class":202}," --list",[87,298,299],{"class":172},"               # 查看全部配置\n",[87,301,302,304,306,308,310],{"class":89,"line":139},[87,303,12],{"class":93},[87,305,226],{"class":97},[87,307,229],{"class":202},[87,309,296],{"class":202},[87,311,312],{"class":172},"      # 查看全局配置\n",[32,314,316],{"id":315},"_2-设置默认编辑器","2. 设置默认编辑器",[23,318,319],{},"例如将编辑器设置为 VSCode：",[77,321,323],{"className":79,"code":322,"language":81,"meta":82,"style":82},"git config --global core.editor \"code --wait\"\n",[84,324,325],{"__ignoreMap":82},[87,326,327,329,331,333,336,338,341],{"class":89,"line":90},[87,328,12],{"class":93},[87,330,226],{"class":97},[87,332,229],{"class":202},[87,334,335],{"class":97}," core.editor",[87,337,236],{"class":235},[87,339,340],{"class":97},"code --wait",[87,342,242],{"class":235},[23,344,345,346,349,350,349,353,356],{},"其他示例：",[84,347,348],{},"\"vim\"","、",[84,351,352],{},"\"nano\"",[84,354,355],{},"\"subl -w\""," 等。",[32,358,360],{"id":359},"_3-设置别名简化命令","3. 设置别名（简化命令）",[77,362,364],{"className":79,"code":363,"language":81,"meta":82,"style":82},"git config --global alias.co checkout\ngit config --global alias.br branch\ngit config --global alias.st status\ngit config --global alias.lg \"log --oneline --graph --all\"\n",[84,365,366,380,394,409],{"__ignoreMap":82},[87,367,368,370,372,374,377],{"class":89,"line":90},[87,369,12],{"class":93},[87,371,226],{"class":97},[87,373,229],{"class":202},[87,375,376],{"class":97}," alias.co",[87,378,379],{"class":97}," checkout\n",[87,381,382,384,386,388,391],{"class":89,"line":139},[87,383,12],{"class":93},[87,385,226],{"class":97},[87,387,229],{"class":202},[87,389,390],{"class":97}," alias.br",[87,392,393],{"class":97}," branch\n",[87,395,397,399,401,403,406],{"class":89,"line":396},3,[87,398,12],{"class":93},[87,400,226],{"class":97},[87,402,229],{"class":202},[87,404,405],{"class":97}," alias.st",[87,407,408],{"class":97}," status\n",[87,410,412,414,416,418,421,423,426],{"class":89,"line":411},4,[87,413,12],{"class":93},[87,415,226],{"class":97},[87,417,229],{"class":202},[87,419,420],{"class":97}," alias.lg",[87,422,236],{"class":235},[87,424,425],{"class":97},"log --oneline --graph --all",[87,427,242],{"class":235},[23,429,430],{},"之后可以使用：",[77,432,434],{"className":79,"code":433,"language":81,"meta":82,"style":82},"git co \u003Cbranch>     # 等价于 git checkout\ngit lg              # 查看漂亮的提交图\n",[84,435,436,460],{"__ignoreMap":82},[87,437,438,440,443,447,450,454,457],{"class":89,"line":90},[87,439,12],{"class":93},[87,441,442],{"class":97}," co",[87,444,446],{"class":445},"smGrS"," \u003C",[87,448,449],{"class":97},"branc",[87,451,453],{"class":452},"su5hD","h",[87,455,456],{"class":445},">",[87,458,459],{"class":172},"     # 等价于 git checkout\n",[87,461,462,464,467],{"class":89,"line":139},[87,463,12],{"class":93},[87,465,466],{"class":97}," lg",[87,468,469],{"class":172},"              # 查看漂亮的提交图\n",[32,471,473,474,477],{"id":472},"_4-设置大小写敏感推荐-true","4. 设置大小写敏感（推荐 ",[84,475,476],{},"true","）",[23,479,480],{},"在 macOS\u002FWindows 上，文件系统默认大小写不敏感，可能导致 Git 误判。建议开启：",[77,482,484],{"className":79,"code":483,"language":81,"meta":82,"style":82},"git config --global core.ignorecase false\n",[84,485,486],{"__ignoreMap":82},[87,487,488,490,492,494,497],{"class":89,"line":90},[87,489,12],{"class":93},[87,491,226],{"class":97},[87,493,229],{"class":202},[87,495,496],{"class":97}," core.ignorecase",[87,498,500],{"class":499},"s39Yj"," false\n",[32,502,504],{"id":503},"_5-其他实用配置","5. 其他实用配置",[506,507,508,524],"table",{},[509,510,511],"thead",{},[512,513,514,518,521],"tr",{},[515,516,517],"th",{},"配置项",[515,519,520],{},"命令",[515,522,523],{},"说明",[525,526,527,541,558,571],"tbody",{},[512,528,529,533,538],{},[530,531,532],"td",{},"彩色输出（默认已开启）",[530,534,535],{},[84,536,537],{},"git config --global color.ui auto",[530,539,540],{},"终端输出高亮",[512,542,543,546,551],{},[530,544,545],{},"pull 默认行为",[530,547,548],{},[84,549,550],{},"git config --global pull.rebase true",[530,552,553,554,557],{},"推荐使用 ",[84,555,556],{},"rebase"," 避免不必要的合并提交",[512,559,560,563,568],{},[530,561,562],{},"记住密码",[530,564,565],{},[84,566,567],{},"git config --global credential.helper cache",[530,569,570],{},"缓存凭据一段时间",[512,572,573,576,581],{},[530,574,575],{},"记住密码（自定义时长）",[530,577,578],{},[84,579,580],{},"git config --global credential.helper 'cache --timeout=3600'",[530,582,583],{},"缓存 1 小时（3600 秒）",[32,585,587],{"id":586},"_6-配置文件位置","6. 配置文件位置",[71,589,590,600],{},[40,591,592,593,596,597],{},"全局配置：",[84,594,595],{},"~\u002F.gitconfig"," 或 ",[84,598,599],{},"~\u002F.config\u002Fgit\u002Fconfig",[40,601,602,603],{},"仓库配置：当前仓库的 ",[84,604,605],{},".git\u002Fconfig",[23,607,608,609,611],{},"可以直接编辑这些文件来修改配置，也可以使用 ",[84,610,213],{}," 命令。",[32,613,615],{"id":614},"_7-验证配置","7. 验证配置",[77,617,619],{"className":79,"code":618,"language":81,"meta":82,"style":82},"git config user.name\ngit config user.email\n",[84,620,621,630],{"__ignoreMap":82},[87,622,623,625,627],{"class":89,"line":90},[87,624,12],{"class":93},[87,626,226],{"class":97},[87,628,629],{"class":97}," user.name\n",[87,631,632,634,636],{"class":89,"line":139},[87,633,12],{"class":93},[87,635,226],{"class":97},[87,637,638],{"class":97}," user.email\n",[23,640,641],{},"如果输出正确，说明配置成功。",[643,644,645],"blockquote",{},[23,646,647,650],{},[58,648,649],{},"注意","：完成上述步骤后，才可以开始使用 Git 进行正式的版本控制工作；否则提交记录中的作者信息会缺失或使用系统默认值。",[27,652,654],{"id":653},"四创建与克隆仓库","四、创建与克隆仓库",[23,656,657,658,661,662,665],{},"Git 仓库是进行版本控制的基础。你可以",[58,659,660],{},"初始化","一个全新的本地仓库，或者",[58,663,664],{},"克隆","一个已有的远程仓库到本地。",[32,667,669,670,477],{"id":668},"_1-初始化新仓库git-init","1. 初始化新仓库（",[84,671,672],{},"git init",[23,674,675,676,679],{},"在项目根目录执行以下命令，会在当前目录下创建一个隐藏的 ",[84,677,678],{},".git"," 文件夹（该文件夹包含了所有版本历史、分支信息等）。",[77,681,683],{"className":79,"code":682,"language":81,"meta":82,"style":82},"git init\n",[84,684,685],{"__ignoreMap":82},[87,686,687,689],{"class":89,"line":90},[87,688,12],{"class":93},[87,690,691],{"class":97}," init\n",[71,693,694,701],{},[40,695,696,697,700],{},"初始化后，该目录即成为 Git 仓库，但尚未有任何提交（",[84,698,699],{},"git status"," 会提示“Initial commit”）。",[40,702,703,704,707],{},"如果需要在指定目录创建仓库，可加上路径：",[84,705,706],{},"git init my-project","（会自动创建该目录）。",[23,709,710,120],{},[58,711,712],{},"示例",[77,714,716],{"className":79,"code":715,"language":81,"meta":82,"style":82},"mkdir my-app\ncd my-app\ngit init\n",[84,717,718,726,734],{"__ignoreMap":82},[87,719,720,723],{"class":89,"line":90},[87,721,722],{"class":93},"mkdir",[87,724,725],{"class":97}," my-app\n",[87,727,728,732],{"class":89,"line":139},[87,729,731],{"class":730},"sptTA","cd",[87,733,725],{"class":97},[87,735,736,738],{"class":89,"line":396},[87,737,12],{"class":93},[87,739,691],{"class":97},[23,741,742],{},"此时可以添加文件、进行首次提交。",[32,744,746,747,477],{"id":745},"_2-克隆远程仓库git-clone","2. 克隆远程仓库（",[84,748,749],{},"git clone",[23,751,752],{},"从远程服务器（如 GitHub、GitLab、Gitee）复制一个完整的仓库到本地，包括所有历史记录、分支和标签。",[754,755,756],"h4",{"id":756},"基本克隆",[77,758,760],{"className":79,"code":759,"language":81,"meta":82,"style":82},"git clone \u003Crepository-url>\n",[84,761,762],{"__ignoreMap":82},[87,763,764,766,769,771,774,777],{"class":89,"line":90},[87,765,12],{"class":93},[87,767,768],{"class":97}," clone",[87,770,446],{"class":445},[87,772,773],{"class":97},"repository-ur",[87,775,776],{"class":452},"l",[87,778,779],{"class":445},">\n",[71,781,782],{},[40,783,784],{},"会在当前目录下创建一个与远程仓库同名的文件夹，并将远程仓库的所有文件、版本历史下载下来。",[754,786,787],{"id":787},"克隆到指定目录",[77,789,791],{"className":79,"code":790,"language":81,"meta":82,"style":82},"git clone \u003Crepository-url> my-folder\n",[84,792,793],{"__ignoreMap":82},[87,794,795,797,799,801,803,805,807],{"class":89,"line":90},[87,796,12],{"class":93},[87,798,768],{"class":97},[87,800,446],{"class":445},[87,802,773],{"class":97},[87,804,776],{"class":452},[87,806,456],{"class":445},[87,808,809],{"class":97}," my-folder\n",[71,811,812],{},[40,813,814,815,818],{},"将仓库克隆到 ",[84,816,817],{},"my-folder"," 目录（若目录不存在则创建）。",[754,820,821],{"id":821},"克隆指定分支",[77,823,825],{"className":79,"code":824,"language":81,"meta":82,"style":82},"git clone -b \u003Cbranch-name> \u003Crepository-url>\n",[84,826,827],{"__ignoreMap":82},[87,828,829,831,833,836,838,841,844,846,848,850,852],{"class":89,"line":90},[87,830,12],{"class":93},[87,832,768],{"class":97},[87,834,835],{"class":202}," -b",[87,837,446],{"class":445},[87,839,840],{"class":97},"branch-nam",[87,842,843],{"class":452},"e",[87,845,456],{"class":445},[87,847,446],{"class":445},[87,849,773],{"class":97},[87,851,776],{"class":452},[87,853,779],{"class":445},[71,855,856,862],{},[40,857,858,859],{},"例如：",[84,860,861],{},"git clone -b develop https:\u002F\u002Fgithub.com\u002Fuser\u002Frepo.git",[40,863,864],{},"仅克隆指定分支（但依然会包含其他分支的元数据，默认检出该分支）。",[754,866,868],{"id":867},"浅克隆只获取最新提交节省时间","浅克隆（只获取最新提交，节省时间）",[77,870,872],{"className":79,"code":871,"language":81,"meta":82,"style":82},"git clone --depth 1 \u003Crepository-url>\n",[84,873,874],{"__ignoreMap":82},[87,875,876,878,880,883,887,889,891,893],{"class":89,"line":90},[87,877,12],{"class":93},[87,879,768],{"class":97},[87,881,882],{"class":202}," --depth",[87,884,886],{"class":885},"srdBf"," 1",[87,888,446],{"class":445},[87,890,773],{"class":97},[87,892,776],{"class":452},[87,894,779],{"class":445},[71,896,897],{},[40,898,899],{},"限制克隆历史深度为 1，适用于只需要最新代码而不需要完整历史的场景（如 CI 环境）。",[32,901,903],{"id":902},"_3-初始化-vs-克隆","3. 初始化 vs 克隆",[506,905,906,919],{},[509,907,908],{},[512,909,910,913,916],{},[515,911,912],{},"场景",[515,914,915],{},"使用命令",[515,917,918],{},"结果",[525,920,921,939],{},[512,922,923,926,930],{},[530,924,925],{},"本地已有项目，想让 Git 管理",[530,927,928],{},[84,929,672],{},[530,931,932,933,935,936,477],{},"创建 ",[84,934,678],{}," 目录，需要后续添加远程仓库（",[84,937,938],{},"git remote add",[512,940,941,944,948],{},[530,942,943],{},"从服务器拉取现有项目",[530,945,946],{},[84,947,749],{},[530,949,950,951,953],{},"自动创建 ",[84,952,678],{},"，并设置远程仓库链接（origin），自动检出默认分支",[23,955,956,120,959,961,962,964],{},[58,957,958],{},"总结",[84,960,672],{}," 用于从零开始新建版本库，",[84,963,749],{}," 用于复制已有版本库（最常用的协作起点）。",[27,966,968,969,477],{"id":967},"五忽略文件gitignore","五、忽略文件（",[84,970,971],{},".gitignore",[23,973,974,976],{},[84,975,971],{}," 文件是 Git 项目中用来指定“哪些文件或目录不需要被 Git 管理”的配置文件。它就像一个过滤器，能帮助你避免将系统文件、依赖包、编译产物等无关内容提交到代码仓库，保持仓库的整洁和专注。",[32,978,980],{"id":979},"_1-工作原理","1. 工作原理",[23,982,983,985,986,989,990,993],{},[84,984,971],{}," 的核心是一系列文件或目录的匹配模式。其中，以 ",[84,987,988],{},"#"," 开头的行是",[58,991,992],{},"注释","，用于解释忽略规则。Git 会将这些模式与文件路径进行匹配，以决定是否将其忽略。",[32,995,997],{"id":996},"_2-文件位置与创建","2. 文件位置与创建",[23,999,1000,1002,1003,1006],{},[84,1001,971],{}," 文件通常放置在 Git 仓库的",[58,1004,1005],{},"根目录","下。你也可以在仓库的子目录中创建其副本，以对特定的代码子模块进行针对性忽略。",[23,1008,1009,1010,1013],{},"你可以通过以下方式创建它：在终端（Mac\u002FLinux）使用 ",[84,1011,1012],{},"touch .gitignore"," 命令创建一个空文件，或者直接通过 IDE 或文本编辑器手动创建。",[32,1015,1017],{"id":1016},"_3-编写格式与语法","3. 编写格式与语法",[754,1019,1020],{"id":1020},"基础模式",[506,1022,1023,1038],{},[509,1024,1025],{},[512,1026,1027,1031,1034,1036],{},[515,1028,1030],{"align":1029},"left","模式",[515,1032,1033],{"align":1029},"作用",[515,1035,712],{"align":1029},[515,1037,523],{"align":1029},[525,1039,1040,1064,1091,1110,1128,1153],{},[512,1041,1042,1047,1054,1057],{},[530,1043,1044],{"align":1029},[84,1045,1046],{},"*.log",[530,1048,1049,1050,1053],{"align":1029},"匹配所有 ",[84,1051,1052],{},".log"," 结尾的文件",[530,1055,1056],{"align":1029},"忽略目录下所有日志文件",[530,1058,1059,1060,1063],{"align":1029},"匹配",[58,1061,1062],{},"任意位置","的此类文件",[512,1065,1066,1071,1078,1084],{},[530,1067,1068],{"align":1029},[84,1069,1070],{},"temp\u002F",[530,1072,1073,1074,1077],{"align":1029},"匹配整个 ",[84,1075,1076],{},"temp"," 目录",[530,1079,1080,1081,1083],{"align":1029},"忽略 ",[84,1082,1076],{}," 目录下的所有内容",[530,1085,1086,1087,1090],{"align":1029},"以 ",[84,1088,1089],{},"\u002F"," 结尾表示匹配目录",[512,1092,1093,1098,1104,1107],{},[530,1094,1095],{"align":1029},[84,1096,1097],{},"build\u002F",[530,1099,1100,1101,1077],{"align":1029},"匹配 ",[84,1102,1103],{},"build",[530,1105,1106],{"align":1029},"忽略构建输出目录",[530,1108,1109],{"align":1029},"同上",[512,1111,1112,1117,1120,1123],{},[530,1113,1114],{"align":1029},[84,1115,1116],{},"secret.txt",[530,1118,1119],{"align":1029},"匹配特定文件",[530,1121,1122],{"align":1029},"忽略某个单独的配置文件",[530,1124,1059,1125,1127],{"align":1029},[58,1126,1062],{},"的同名文件",[512,1129,1130,1135,1141,1148],{},[530,1131,1132],{"align":1029},[84,1133,1134],{},"\u002Fdebug.log",[530,1136,1137,1138],{"align":1029},"匹配根目录下的 ",[84,1139,1140],{},"debug.log",[530,1142,1143,1144,1147],{"align":1029},"忽略",[58,1145,1146],{},"项目根目录","下的日志文件",[530,1149,1150,1152],{"align":1029},[84,1151,1089],{}," 开头表示仅匹配根目录",[512,1154,1155,1160,1166,1175],{},[530,1156,1157],{"align":1029},[84,1158,1159],{},"docs\u002F*.md",[530,1161,1100,1162,1165],{"align":1029},[84,1163,1164],{},"docs"," 目录下的 Markdown 文件",[530,1167,1080,1168,1170,1171,1174],{"align":1029},[84,1169,1164],{}," 目录中的所有 ",[84,1172,1173],{},".md"," 文件",[530,1176,1177,1178,1181],{"align":1029},"星号 ",[84,1179,1180],{},"*"," 匹配目录内的一级文件",[754,1183,1184],{"id":1184},"高级模式",[71,1186,1187,1206,1222,1251],{},[40,1188,1189,120,1192,1195,1196,349,1199,1202,1203,1205],{},[58,1190,1191],{},"匹配任意层级",[84,1193,1194],{},"**\u002Flogs\u002Fdebug.log"," 能匹配 ",[84,1197,1198],{},"logs\u002Fdebug.log",[84,1200,1201],{},"build\u002Flogs\u002Fdebug.log"," 等",[58,1204,1062],{},"的 debug 日志。",[40,1207,1208,120,1211,1195,1214,349,1216,1202,1219,1205],{},[58,1209,1210],{},"递归匹配目录",[84,1212,1213],{},"logs\u002F**\u002Fdebug.log",[84,1215,1198],{},[84,1217,1218],{},"logs\u002Fmonday\u002Fdebug.log",[58,1220,1221],{},"深度不定",[40,1223,1224,1227,1228,1231,1232,1240],{},[58,1225,1226],{},"取反规则","：使用 ",[84,1229,1230],{},"!"," 来“例外”某些不符合主规则的特定文件或目录。",[77,1233,1238],{"className":1234,"code":1236,"language":1237,"meta":82},[1235],"language-text","\u002F*\n!\u002Fbuild   # 忽略根目录下所有文件，但保留 build 目录\n","text",[84,1239,1236],{"__ignoreMap":82},[643,1241,1242],{},[23,1243,1244,1246,1247,1250],{},[58,1245,649],{},"：当你忽略一个父级目录后，对于其中文件的取反操作通常是",[58,1248,1249],{},"无效","的。",[40,1252,1253,120,1256],{},[58,1254,1255],{},"字符匹配",[71,1257,1258,1274,1280],{},[40,1259,1260,1263,1264,1267,1268,596,1271,65],{},[84,1261,1262],{},"?","：匹配一个任意字符，如 ",[84,1265,1266],{},"debug?.log"," 可匹配 ",[84,1269,1270],{},"debug1.log",[84,1272,1273],{},"debugA.log",[40,1275,1276,1279],{},[84,1277,1278],{},"[abc]","：匹配方括号内的任意一个字符。",[40,1281,1282,1285,1286,65],{},[84,1283,1284],{},"[0-9]","：匹配一个数字范围，如 ",[84,1287,1288],{},"debug[0-9].log",[32,1290,1292,1293,1295],{"id":1291},"_4-全局-gitignore适用于所有项目","4. 全局 ",[84,1294,971],{},"（适用于所有项目）",[23,1297,1298,1299,1302,1303,349,1306,1309,1310,1313,1314,1316],{},"对于操作系统（如 macOS 的 ",[84,1300,1301],{},".DS_Store","）或编辑器（如 ",[84,1304,1305],{},".vscode\u002F",[84,1307,1308],{},".idea\u002F","）产生的、你希望在",[58,1311,1312],{},"所有项目","中都忽略的文件，可以配置一个全局的 ",[84,1315,971],{}," 文件。",[23,1318,1319,120],{},[58,1320,1321],{},"配置步骤",[37,1323,1324,1342,1353],{},[40,1325,1326,120,1329],{},[58,1327,1328],{},"在用户主目录创建文件",[77,1330,1332],{"className":79,"code":1331,"language":81,"meta":82,"style":82},"touch ~\u002F.gitignore_global\n",[84,1333,1334],{"__ignoreMap":82},[87,1335,1336,1339],{"class":89,"line":90},[87,1337,1338],{"class":93},"touch",[87,1340,1341],{"class":97}," ~\u002F.gitignore_global\n",[40,1343,1344,120,1347],{},[58,1345,1346],{},"在其中加入通用规则",[77,1348,1351],{"className":1349,"code":1350,"language":1237,"meta":82},[1235],"*~\n.DS_Store\n.vscode\u002F\n.idea\u002F\nThumbs.db\n",[84,1352,1350],{"__ignoreMap":82},[40,1354,1355,120,1358],{},[58,1356,1357],{},"告诉 Git 使用它",[77,1359,1361],{"className":79,"code":1360,"language":81,"meta":82,"style":82},"git config --global core.excludesfile ~\u002F.gitignore_global\n",[84,1362,1363],{"__ignoreMap":82},[87,1364,1365,1367,1369,1371,1374],{"class":89,"line":90},[87,1366,12],{"class":93},[87,1368,226],{"class":97},[87,1370,229],{"class":202},[87,1372,1373],{"class":97}," core.excludesfile",[87,1375,1341],{"class":97},[32,1377,1379],{"id":1378},"_5-忽略已被跟踪的文件","5. 忽略已被跟踪的文件",[23,1381,1382,1383,1386,1387,1389],{},"如果某个文件",[58,1384,1385],{},"已经被 Git 跟踪","，再把它加入 ",[84,1388,971],{}," 是无效的。你需要先将其从 Git 的跟踪列表中移除（同时保留本地文件）：",[77,1391,1393],{"className":79,"code":1392,"language":81,"meta":82,"style":82},"git rm --cached \u003Cfile>\n",[84,1394,1395],{"__ignoreMap":82},[87,1396,1397,1399,1402,1405,1407,1410,1412],{"class":89,"line":90},[87,1398,12],{"class":93},[87,1400,1401],{"class":97}," rm",[87,1403,1404],{"class":202}," --cached",[87,1406,446],{"class":445},[87,1408,1409],{"class":97},"fil",[87,1411,843],{"class":452},[87,1413,779],{"class":445},[23,1415,1416,1417,1419],{},"执行后，该文件会变成“未跟踪”状态，你的 ",[84,1418,971],{}," 规则便会生效。",[32,1421,1423],{"id":1422},"_6-官方精选模板库","6. 官方精选模板库",[23,1425,1426,1427,1429],{},"GitHub 官方提供了一个 ",[84,1428,971],{}," 模板集，几乎覆盖了所有主流编程语言、框架和操作系统。",[71,1431,1432,1442,1455,1464],{},[40,1433,1434,120,1437],{},[58,1435,1436],{},"官方仓库",[44,1438,1441],{"href":1439,"rel":1440},"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgitignore",[48],"github\u002Fgitignore",[40,1443,1444,1447,1448,349,1451,1454],{},[58,1445,1446],{},"项目结构","：仓库提供现成的模板，如 ",[84,1449,1450],{},"Python.gitignore",[84,1452,1453],{},"Node.gitignore"," 等，下载后重命名并放到项目根目录即可。",[40,1456,1457,1460,1461,1463],{},[58,1458,1459],{},"在线创建","：在 GitHub 网站上新建仓库时，选择 ",[84,1462,971],{}," 下拉框并按需选取。",[40,1465,1466,1227,1469,1472,1473],{},[58,1467,1468],{},"命令行获取",[84,1470,1471],{},"curl"," 直接下载：",[77,1474,1476],{"className":79,"code":1475,"language":81,"meta":82,"style":82},"curl -o .gitignore https:\u002F\u002Fraw.githubusercontent.com\u002Fgithub\u002Fgitignore\u002Fmain\u002FPython.gitignore\n",[84,1477,1478],{"__ignoreMap":82},[87,1479,1480,1482,1485,1488],{"class":89,"line":90},[87,1481,1471],{"class":93},[87,1483,1484],{"class":202}," -o",[87,1486,1487],{"class":97}," .gitignore",[87,1489,1490],{"class":97}," https:\u002F\u002Fraw.githubusercontent.com\u002Fgithub\u002Fgitignore\u002Fmain\u002FPython.gitignore\n",[32,1492,1494],{"id":1493},"_7-常用模式总结","7. 常用模式总结",[506,1496,1497,1507],{},[509,1498,1499],{},[512,1500,1501,1503,1505],{},[515,1502,1030],{"align":1029},[515,1504,523],{"align":1029},[515,1506,712],{"align":1029},[525,1508,1509,1528,1546,1562,1577,1592,1607],{},[512,1510,1511,1516,1523],{},[530,1512,1513],{"align":1029},[84,1514,1515],{},"*.exe",[530,1517,1518,1519,1522],{"align":1029},"忽略所有 ",[84,1520,1521],{},".exe"," 可执行文件",[530,1524,1525,1526,1174],{"align":1029},"匹配任意位置的 ",[84,1527,1521],{},[512,1529,1530,1535,1541],{},[530,1531,1532],{"align":1029},[84,1533,1534],{},"*.class",[530,1536,1518,1537,1540],{"align":1029},[84,1538,1539],{},".class"," 编译文件",[530,1542,1525,1543,1545],{"align":1029},[84,1544,1539],{}," 文件（Java 编译产物）",[512,1547,1548,1553,1556],{},[530,1549,1550],{"align":1029},[84,1551,1552],{},"vendor\u002F",[530,1554,1555],{"align":1029},"忽略 PHP 依赖目录",[530,1557,1080,1558,1561],{"align":1029},[84,1559,1560],{},"vendor"," 目录下的所有 PHP 依赖包",[512,1563,1564,1569,1572],{},[530,1565,1566],{"align":1029},[84,1567,1568],{},".env",[530,1570,1571],{"align":1029},"忽略环境配置文件",[530,1573,1574,1575,1174],{"align":1029},"忽略根目录下存储敏感信息的 ",[84,1576,1568],{},[512,1578,1579,1586,1589],{},[530,1580,1581,1583,1584],{"align":1029},[84,1582,1305],{},", ",[84,1585,1308],{},[530,1587,1588],{"align":1029},"忽略 IDE 个人配置",[530,1590,1591],{"align":1029},"忽略不同开发者本地的 IDE 配置差异",[512,1593,1594,1601,1604],{},[530,1595,1596,1583,1598],{"align":1029},[84,1597,1301],{},[84,1599,1600],{},"Thumbs.db",[530,1602,1603],{"align":1029},"忽略操作系统生成的元文件",[530,1605,1606],{"align":1029},"统一忽略 macOS 和 Windows 的预览缓存文件",[512,1608,1609,1616,1618],{},[530,1610,1611,1583,1614],{"align":1029},[84,1612,1613],{},"dist\u002F",[84,1615,1097],{},[530,1617,1106],{"align":1029},[530,1619,1620],{"align":1029},"保持代码仓库干净，所有构建产物由生成系统处理",[27,1622,1624],{"id":1623},"六注意事项","六、注意事项",[71,1626,1627,1634,1641,1654],{},[40,1628,1629,1630,1633],{},"安装完成后",[58,1631,1632],{},"一定要","先完成用户名\u002F邮箱配置，否则提交记录会缺失作者信息。",[40,1635,1636,1637,1640],{},"克隆大型仓库时，若只需要最新代码，优先使用 ",[84,1638,1639],{},"--depth 1"," 浅克隆节省时间和磁盘空间。",[40,1642,1643,1645,1646,1649,1650,1653],{},[84,1644,971],{}," 只对",[58,1647,1648],{},"未被跟踪","的文件生效；已被跟踪的文件需先用 ",[84,1651,1652],{},"git rm --cached"," 移除跟踪后才会被忽略。",[40,1655,1656,1657,1659,1660,1663,1664,65],{},"建议将 ",[84,1658,971],{}," 文件本身提交到仓库，统一团队规则；系统\u002F编辑器相关的忽略规则放到全局 ",[84,1661,1662],{},".gitignore_global"," 中，避免污染项目内的 ",[84,1665,971],{},[27,1667,1668],{"id":1668},"参考文献",[506,1670,1671,1680],{},[509,1672,1673],{},[512,1674,1675,1678],{},[515,1676,1677],{},"资料",[515,1679,523],{},[525,1681,1682,1694,1705,1715],{},[512,1683,1684,1691],{},[530,1685,1686],{},[44,1687,1690],{"href":1688,"rel":1689},"https:\u002F\u002Fgit-scm.com\u002Fbook\u002Fen\u002Fv2",[48],"Pro Git",[530,1692,1693],{},"官方书",[512,1695,1696,1703],{},[530,1697,1698],{},[44,1699,1702],{"href":1700,"rel":1701},"https:\u002F\u002Fgit-scm.com\u002Fdocs",[48],"Git 文档",[530,1704,520],{},[512,1706,1707,1712],{},[530,1708,1709],{},[44,1710,1441],{"href":1439,"rel":1711},[48],[530,1713,1714],{},"官方模板库",[512,1716,1717,1723],{},[530,1718,1719],{},[44,1720,1722],{"href":1721},"\u002Fknowledge\u002Fbooklet\u002Fuphold","运维导读",[530,1724,1725],{},"学习路径",[1727,1728,1729],"style",{},"html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":82,"searchDepth":139,"depth":139,"links":1731},[1732,1737,1738,1748,1755,1766,1767],{"id":29,"depth":139,"text":30,"children":1733},[1734,1735,1736],{"id":34,"depth":396,"text":35},{"id":68,"depth":396,"text":69},{"id":111,"depth":396,"text":112},{"id":206,"depth":139,"text":207},{"id":277,"depth":139,"text":278,"children":1739},[1740,1741,1742,1743,1745,1746,1747],{"id":281,"depth":396,"text":282},{"id":315,"depth":396,"text":316},{"id":359,"depth":396,"text":360},{"id":472,"depth":396,"text":1744},"4. 设置大小写敏感（推荐 true）",{"id":503,"depth":396,"text":504},{"id":586,"depth":396,"text":587},{"id":614,"depth":396,"text":615},{"id":653,"depth":139,"text":654,"children":1749},[1750,1752,1754],{"id":668,"depth":396,"text":1751},"1. 初始化新仓库（git init）",{"id":745,"depth":396,"text":1753},"2. 克隆远程仓库（git clone）",{"id":902,"depth":396,"text":903},{"id":967,"depth":139,"text":1756,"children":1757},"五、忽略文件（.gitignore）",[1758,1759,1760,1761,1763,1764,1765],{"id":979,"depth":396,"text":980},{"id":996,"depth":396,"text":997},{"id":1016,"depth":396,"text":1017},{"id":1291,"depth":396,"text":1762},"4. 全局 .gitignore（适用于所有项目）",{"id":1378,"depth":396,"text":1379},{"id":1422,"depth":396,"text":1423},{"id":1493,"depth":396,"text":1494},{"id":1623,"depth":139,"text":1624},{"id":1668,"depth":139,"text":1668},{"title":8,"description":9},"knowledge\u002Fbooklet\u002Fuphold\u002FGit\u002Fgit-setup","knowledge\u002Fknowledge\u002Fbooklet\u002Fuphold\u002FGit\u002Fgit-setup.md","md",{"items":1773},[1774,1779,1783,1787,1791,1794],{"path":1775,"title":1776,"description":1777,"category":10,"score":1778},"\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fgit\u002Fgit-branching","Git 分支、远程协作与标签管理","涵盖分支的创建、切换、合并与删除，远程仓库的管理、推送与拉取，以及标签（Tag）的创建、查看、推送与删除，是团队协作的核心内容。",6,{"path":1780,"title":1781,"description":1782,"category":10,"score":1778},"\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fgit\u002Fgit-history","Git 查看历史、撤销回退与冲突解决","涵盖 git log \u002F git diff 查看提交历史与差异，commit --amend \u002F reset \u002F revert 的撤销与回退方式对比，以及合并、拉取、变基时冲突的产生原因与解决步骤。",{"path":1784,"title":1785,"description":1786,"category":10,"score":1778},"\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fgit\u002Fgit-intro","Git 基础概念与命令速查","Git 是目前最流行的分布式版本控制系统。本文介绍工作区\u002F暂存区\u002F仓库等核心概念、文件状态流转，并附上日常开发最常用的命令速查表，适合入门学习与日常查阅。",{"path":1788,"title":1789,"description":1790,"category":10,"score":1778},"\u002Fknowledge\u002Fbooklet\u002Fuphold\u002Fgit\u002Fgit-workflow","Git 基础工作流与协作场景","涵盖日常文件级操作（状态查看、暂存、提交、撤销、删除、重命名）与团队协作中的常见场景示例（个人提交、功能分支开发、同步主分支、误提交撤销等）。",{"path":1721,"title":1792,"description":1793,"category":10,"score":411},"运维与协作导读","本目录覆盖日常开发运维中的 Git 版本控制、Docker 容器化与 Nginx 服务网关，与 工程化 · Git、部署相关 等章节互补，提供完整的十阶段学习路径。",{"path":1795,"title":1796,"description":1797,"category":10,"score":411},"\u002Fknowledge\u002Fbooklet\u002Fproject\u002Fproject\u002Fgit","Git 配置","版本控制常用 .gitignore（忽略不需纳入仓库的文件）与 .gitattributes（统一换行、diff、合并策略等）。见 工程化概览。",{"series":1799,"title":12,"items":1800,"index":396,"prev":1806,"next":1807},"booklet\u002Fuphold\u002Fgit",[1801,1802,1803,1804,1805],{"path":1775,"title":1776,"date":13,"pinned":14},{"path":1780,"title":1781,"date":13,"pinned":14},{"path":1784,"title":1785,"date":13,"pinned":14},{"path":7,"title":8,"date":13,"pinned":14},{"path":1788,"title":1789,"date":13,"pinned":14},{"path":1784,"title":1785,"date":13,"pinned":14},{"path":1788,"title":1789,"date":13,"pinned":14}]