news 2026/9/26 4:37:12

用Gitee实现跨电脑文件同步:从仓库配置到冲突解决

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用Gitee实现跨电脑文件同步:从仓库配置到冲突解决

1. 为什么是 Gitee 而不是网盘或 GitHub

先说结论:如果你要的是"公司和家里两台电脑,编辑同一批文件夹,打开就是最新版",那网盘、GitHub、Gitee 都能做到一部分,但真正用下来,你会发现在国内环境里,Gitee 是最省心的那一个。

我试过的组合不少。最早用百度网盘,把工作文件夹丢进同步盘,问题在于它按"文件时间戳"和"目录遍历"来同步,经常出现一个文件在公司改完,回家打开还是旧版;更难受的是,Office 或编辑器在文件占用状态下,网盘客户端会报"文件被占用,无法同步",你得手动去点重试。后来试过坚果云,同步体验好一些,但对单个文件夹的版本管理几乎没有——你误删了一个文件,想找回三天前的版本,网盘不一定留得住。

GitHub 反而更适合做这件事,但它有两个现实障碍:一是国内访问不稳定,push/pull 频繁失败,经常要重试,尤其是文件多的时候;二是私有仓库虽然免费,但仓库名和部分交互在国内网络环境下各种别扭。相比之下,Gitee 是国内的 Git 托管平台,访问速度快、私有仓库免费、操作习惯和 GitHub 几乎一致,而且它本身就是 Git 协议,天然拥有版本管理、历史回溯、分支合并这些能力。

1.1 网盘同步与 Git 同步的本质差异

很多人第一次接触 Git 同步时,会觉得它"没有网盘自动化"。确实是,网盘是后台守护进程盯着文件夹,你保存文件,它立刻上传;Git 需要你手动敲命令或点击提交按钮。但正是这个"手动"的环节,带来了网盘没有的好处:

  • 每一次提交都是一次全量快照,你可以随时回到任意历史版本,而不是只有"当前状态"。
  • 提交信息记录了"这次改了什么、为什么改",配合 commit 历史,你能知道文件为什么变成现在这样。
  • 同步是"显式"的——你不会出现"以为同步了,其实没传上去"的情况,因为 push 成功与否,命令行会明确告诉你。

我个人的经验是:网盘适合同步"不需要版本管理的素材",Git 适合同步"需要谨慎修改、需要回溯的文档和代码"。对于"公司和家里继续编辑同一份文档"这个场景,Git 的版本管理能力恰好覆盖了网盘最薄弱的环节。

1.2 三套方案的取舍清单

方案访问速度私有仓库版本回溯自动化程度适合人群
Gitee快,国内节点免费完整,可回滚手动提交需要版本管理、追求稳定
GitHub不稳定,看网络环境免费完整手动提交网络环境好、习惯用 GitHub 的人
网盘快不涉及有限,依赖客户端自动不关心版本、只要最新版

如果你只是临时放几个文件,网盘更省事;但你的目标是"长期维护一批文件,且两边都能安全地改",那我建议直接用 Gitee。

1.3 什么样的文件夹适合这种方案

不是所有文件夹都适合托管到 Git 仓库。根据我的踩坑经验,适合的有:

  • 文档类:Markdown 笔记、需求文档、工作日志、简历、合同模版
  • 代码类:个人项目、学习代码、脚本、爬虫
  • 配置类:编辑器配置、shell 配置、常用工具配置

不适合的有:

  • 超大文件:视频、镜像、数据库备份,Git 仓库会越来越臃肿
  • 频繁变动的二进制文件:比如大型图片素材库,每次提交都要全量比对
  • 含敏感信息的文件:密码文件、密钥文件、私人资料,除非确认是私有仓库,否则慎重

判断标准很简单:文件是否以文本为主?是否需要版本回溯?如果是,那 Git 就是对的方案。

2. 仓库准备:注册、新建仓库、许可证到底选什么

在配置本地环境之前,先把远端仓库准备好。这个过程很多人随口就跳过了,但恰恰是"许可证选什么""仓库可见性"这些细节,后期改起来特别麻烦。

2.1 注册与实名认证

Gitee 注册流程不算复杂,邮箱+手机号就能搞定,但有一个重要环节:实名认证。Gitee 对实名认证的要求比较严,未认证用户很多操作受限,比如新建仓库、上传大文件、开通 Pages 服务都会卡住。注册后直接提交实名认证,人脸或身份证照片二选一,审核速度通常几分钟到几小时。

实测下来,注册时用常用邮箱最省事,因为后续的 Git 操作记录会关联这个邮箱,以后换邮箱会导致历史提交作者信息显示异常。这点和 GitHub 一样,一旦正式用起来就不好改了。

2.2 新建私有仓库的关键选项

登录 Gitee 后,右上角 "+" 号,选择"新建仓库",这时候有几个选项需要认真对待:

  • 仓库名称:建议全小写英文单词,用短横线连接,比如work-docs、home-lab。中文名称在 Git 命令里会变成转义字符,操作起来很痛苦。
  • 开源:选择"私有"。如果你只是想自己或少数几台电脑同步,完全没必要公开。Gitee 的私有仓库免费,不限制数量。
  • 初始化仓库:我建议先不勾选"生成 README 文件"和"初始化仓库"。因为本地文件夹可能已经有内容,远端初始化之后再往本地拉,会产生冲突,增加不必要的处理步骤。干净的远端仓库,等你本地 init 之后直接推上来就行。
  • 分支模型:默认分支建议保持 master 或 main,不要在这里折腾。对个人同步场景来说,单分支最简单。

2.3 开源许可证选什么

如果你选择的是私有仓库,许可证其实无所谓,因为它不对外发布。但热词里很多人搜"gitee开源许可证选什么",说明大家对这个概念有误解。

许可证的本质是:如果你把仓库公开,别人使用你的代码时需要遵守什么规则。常见的几个选项:

  • MIT:最宽松,别人可以自由使用、修改、商用,只需保留版权声明
  • Apache 2.0:比 MIT 多了专利授权相关条款,适合开源项目
  • GPL 3.0:传染性强,别人用了你的代码,也必须开源

对你私人同步的文档文件夹来说,这些都不重要。我的建议是:私有仓库直接用 MIT 或干脆不选,公开仓库再根据你的意愿决定。选错许可证对个人同步场景没有实际影响,不用过度纠结。

3. 本地环境与 SSH 密钥配置

仓库建好了,接下来是本地的 Git 环境和身份认证。这一步很多人卡在"密钥配置"和"多账号冲突"上,我拆开讲。

3.1 安装 Git 并验证

Windows 用户直接去 Git 官网或国内镜像下载安装包,一路下一步即可。安装完成后打开终端(cmd 或 PowerShell),输入:

git --version

看到版本号就代表安装成功。Mac 用户更简单,系统自带 Git,或者用 Homebrew 装最新版。

安装完之后的全局配置是很多人忽略的。虽然不配置也能用,但提交历史里的作者信息会变成空白或乱码,后面回溯版本时很痛苦:

git config --global user.name "你的名字" git config --global user.email "你注册Gitee的邮箱"

注意:这里的名字和邮箱会显示在每一次提交记录里,如果你想保护隐私,可以用一个固定的昵称,但邮箱建议和 Gitee 账号一致,否则 Gitee 的提交记录不会关联到你的头像和账号。

3.2 生成 SSH 密钥并添加公钥

Gitee 支持 HTTPS 和 SSH 两种协议。HTTPS 每次 push/pull 都要输账号密码(虽然 Gitee 现在支持记住密码,但经常失效),SSH 配置一次之后可以长期免密操作。所以我的建议是直接用 SSH。

生成密钥的命令:

ssh-keygen -t rsa -b 4096 -C "你的邮箱"

一路回车,会生成一对密钥文件:默认在用户目录的.ssh文件夹下,id_rsa是私钥,id_rsa.pub是公钥。私钥永远不要给别人,公钥要添加到 Gitee 上。

查看公钥内容:

cat ~/.ssh/id_rsa.pub

然后登录 Gitee,进入"设置" -> "安全设置" -> "SSH 公钥",把公钥粘贴进去,标题随意。添加成功后测试:

ssh -T git@gitee.com

如果看到Hi xxx! You've successfully authenticated, but GITEE.COM does not provide shell access.这样的提示,就说明 SSH 配置成功了。

3.3 本地全局配置与 Gitee 和 GitHub 的密钥冲突

热词里有一个高频问题:"本地全局设置了 Gitee 和 GitHub 两个库冲突,怎么设置并且解决?"

这个问题我知道很多人遇到过。现象是:配置了 Gitee 的密钥,又配置了 GitHub 的密钥,结果 push 到其中一个平台时提示权限认证失败。

原因在于 SSH 默认会读取~/.ssh/id_rsa这个固定文件,如果你把 Gitee 的公钥覆盖了 GitHub 的,或者用同一个密钥分别添加到两个平台,本身没问题,但如果你生成了两套密钥,默认配置就不知道该用哪一套。

解决办法是用 SSH 的 config 文件指定不同平台的密钥。在~/.ssh目录下创建config文件:

# Gitee Host gitee.com HostName gitee.com User git IdentityFile ~/.ssh/id_rsa_gitee # GitHub Host github.com HostName github.com User git IdentityFile ~/.ssh/id_rsa_github

生成密钥时,不要一路回车,而是指定文件名:

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_gitee -C "邮箱" ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_github -C "邮箱"

然后把各自公钥分别添加到对应平台。这样系统会按域名自动匹配对应的私钥,两边互不干扰。这是我最推荐的方案,比反复删除重配密钥省心得多。

4. 把现有本地文件夹托管上库:完整分步操作

现在到了核心环节。你已经有一个本地文件夹,里面可能是一堆文档、项目代码或笔记,目标是把整个文件夹托管到 Gitee 仓库,然后从另一台电脑克隆下来继续编辑。

4.1 初始化本地仓库并完成首次提交

打开终端,进入你的目标文件夹。注意,进入的是文件夹本身,而不是它的上级目录:

cd /path/to/your/folder

然后初始化一个 Git 仓库:

git init

执行后文件夹里会多出一个隐藏的.git目录,这就是整个 Git 仓库的"元数据区域"。这个目录不要手动删,也不要同步到网盘,否则仓库会损坏。

接着把所有文件加入暂存区。这里有个小陷阱:git add .会把当前目录下所有文件都加进去,包括临时文件、日志文件、系统自动生成的隐藏文件。所以执行之前,最好先用git status看一眼,确认没有不该提交的文件:

git status

如果发现混入了垃圾文件,先创建.gitignore,把不需要的文件排除掉(下一节细说)。然后:

git add . git commit -m "首次提交"

提交成功后会显示一行摘要,包含文件数量和变更内容。

4.2 关联远程仓库并推送

现在本地仓库已经就绪,回到 Gitee 仓库页面,复制 SSH 地址,长这样:

git@gitee.com:你的用户名/仓库名.git

执行关联:

git remote add origin git@gitee.com:你的用户名/仓库名.git

然后推送:

git push -u origin master

加了-u参数的用意是设置上游分支,告诉 Git 本地的 master 分支对应远端的 origin/master。这样以后只需要敲git push或git pull,不需要再带参数。

推送成功后,刷新 Gitee 仓库页面,应该能看到你的全部文件。

4.3.gitignore的灵魂用法:哪些文件不该进仓库

gitignore是决定这个方案能不能长期用的关键。在一个普通工作文件夹里,哪些东西不该进 Git 仓库?

  • 系统文件:Windows 的Thumbs.db、macOS 的.DS_Store
  • 编辑器配置:.vscode/里可能包含个人偏好,不一定适合共享
  • 临时文件:.tmp、~$开头的 Office 临时文件
  • 日志文件:.log、崩溃转储文件
  • 构建产物:编译生成的目录,比如node_modules/、dist/、build/

一个典型的工作文档gitignore长这样:

.DS_Store Thumbs.db ~$*.doc* *.tmp *.log .idea/ .vscode/

创建.gitignore的正确时机是在git add .之前。如果你已经误提交了某些文件,需要先执行:

git rm -r --cached 文件名

这会从仓库中移除文件,但保留本地文件。然后再把规则加入.gitignore,提交一次。

我记得早期用这个方案时,把工作文件夹里几 GB 的压缩包也推上去了,结果仓库越来越大,每次 pull 都慢得难受。后来花大力气清理,才意识到从一开始就应该用一个干净的gitignore。

5. 公司和家里两端的日常同步工作流

仓库建立好了,接下来是日常使用。这一步是整个方案的核心:如何保证两台电脑编辑同一批文件,始终处于同步状态。

5.1 第二台电脑的克隆与接管

到了公司电脑,装好 Git、配好 SSH 密钥后,克隆远程仓库:

git clone git@gitee.com:你的用户名/仓库名.git

Git 会把整个仓库包括所有历史版本拉取到本地。克隆完成后,你不需要再执行git init,因为仓库是完整的。

有一个常见误区:克隆下来的仓库,如果你用git config user.name和user.email查看,会发现提交作者信息是全局配置的,不是当前仓库的。如果这台电脑上只是临时用,无所谓。如果这台电脑你会长期使用,最好检查一下本机全局配置是否正确,避免提交记录变成"Unknown"。

5.2 最稳妥的"四连"操作顺序

日常同步的标准流程,我总结成四个命令,每一步都有它的必要性:

git status # 查看当前状态,确认有没有未提交的修改 git add . # 把修改加入暂存区 git commit -m "描述本次修改内容" git pull # 先拉取远端的最新内容 git push # 再推送本地内容

为什么要先 pull 再 push?因为如果公司在上午改了文件并推送,你在家里下午改了文件后直接 push,Git 会因为远端有你不认识的提交而拒绝推送。你必须要先 pull,把远端的进度合并到本地,然后才能 push。

这个顺序不能变。先 pull 再 push,会让你始终在远端最新版本的基础上提交,冲突的概率会大幅降低。

5.3 提交信息的规范与同步节奏

提交信息是给自己看的,不要写"修改"或"更新"这种毫无信息量的话。我自己的习惯是:

  • 每条提交说清楚"改了什么、为什么改":例如修复第三章数据统计公式、补充面试准备笔记、调整博客样式中的字体大小
  • 一次提交只做一件事,不要攒着几十个文件一起提交。如果文件很多且彼此无关,分开提交,回滚时才有意义
  • 同步节奏:每次结束工作前提交并推送,第二天到另一台电脑先 pull。这个习惯一旦养成,你永远不会遇到"到底哪台电脑是最新的"这种问题

我见过不少人嫌麻烦,好几天才提交一次,结果某天改完忘了 push,回家 pull 下来还是旧版,然后一脸懵。Git 不是自动同步工具,它的前提是你主动记录。把这个动作变成工作收尾仪式一样的存在,才是真正用好这套方案的关键。

6. 冲突是怎么产生的,以及如何破解

即便流程正确,总有一天你会遇到"冲突"(conflict)。这不丢人,Git 设计冲突机制本来就是给你兜底的,关键是你懂不懂它背后的逻辑。

6.1 一次真实的冲突复现

我举一个真实的例子。假设你在家修改了notes.md的第10行,写的是"下周三项目评审会"。第二天在公司,你忘了 pull,直接在旧版本上修改了第10行,写的是"下周四项目周会"。提交推送时,Git 告诉你 push 被拒绝,你执行 pull,然后提示CONFLICT (content)。

这时候notes.md文件内部会变成这样:

<<<<<<< HEAD 下周四项目周会 ======= 下周三项目评审会 >>>>>>> 你自己提交的版本号

<<<<<<< HEAD和=======之间是当前本地的内容,=======和>>>>>>>之间是远端拉下来的内容。你要做的不是关闭文件,而是打开它,把两段内容合并成你想要的样子,然后删除那三行标记。

6.2 解决冲突的标准流程

合并完成后,执行:

git add notes.md git commit -m "解决notes.md冲突,统一为周四周会"

这个 commits 完成了一次真正的合并。之后继续 push,远端就会接收你的修改。

第一次遇到冲突时,很多人会恐慌,觉得文件坏了。实际上只要记住一点:<<<<<<<、=======、>>>>>>>是 Git 加的特殊标记,手动处理掉标记,保留你想要的内容,然后重新 add 和 commit,一切就恢复了。

冲突并不可怕,可怕的是你在不知道的情况下直接覆盖掉另一边的工作成果。Git 的冲突提示恰恰是最好的保护。

6.3 多电脑同步的其他坑

冲突是最大的坑,但不是唯一的坑。多电脑同步几年下来,我还踩过这些:

  • 换行符问题:Windows 和 Linux/macOS 的换行符不同。如果仓库里的文件在 Windows 上编辑后提交,换行符可能变成 CRLF,造成不必要的 Diff。解决办法是在本地全局配置里设置git config --global core.autocrlf true(Windows)或input(Mac/Linux),让 Git 自动转换。
  • 文件名大小写:Windows 文件系统不区分大小写,你重命名文件时只改了大小写(比如Notes.md->notes.md),Git 可能察觉不到。需要执行git mv来强制重命名,否则仓库里的文件名会和你本地不一致。
  • 大文件推不动:如果仓库里不小心混入几十 MB 以上的二进制文件,Gitee 对单文件大小有限制,push 时直接失败。这时候不要硬扛,把大文件移出仓库目录,或者使用 Git LFS。
  • 同一时刻只在一台电脑上编辑同一个文件:这句话是废话但最重要。多人协作模式下,Git 靠分支管理来解决;个人多设备同步场景,最好只保持一条主线分支。两边同时改同一个文件,哪怕没撞上,合并时也要你手动处理,白费精力。

我的体会是,这套方案真正跑顺之后,你会慢慢习惯"提交-推送-拉取"的节奏,甚至开始享受它的确定性——文件在哪台电脑上改的、改了几次、什么时候改的,全部有据可查。相比之下,网上那些"同步软件"反而让人心里没底。

最后分享一个小习惯:我在每台电脑的终端里,把git pull设成了每天开工的第一条命令。这么做不是因为怕冲突,而是为了让一天的工作始终从最新状态开始。配合 Gitee 的访问速度,整个过程不到几秒钟,却省掉了无数"文件到底哪个新"的纠结。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/26 4:36:15

开关电源EMC的根在PCB布局和变压器设计,附整改经验

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/26 4:36:14

TwinCAT 3 安装配置全流程:从下载到第一个PLC程序

1. 工控上位机开发环境搭建&#xff1a;TwinCAT 3 下载与安装全流程拆解搞工业自动化的朋友对 TwinCAT 3 应该不陌生&#xff0c;它是基于 PC 的控制技术平台&#xff0c;把 PLC、运动控制、HMI 甚至视觉处理都集成到一套 Visual Studio 壳子里。我第一次接触它的时候&#xff…

作者头像 李华
网站建设 2026/9/26 4:35:48

交换机普通网线堆叠实战:从原理到配置排错

上个月做园区接入层改造&#xff0c;两台云杉系统交换机准备组堆叠&#xff0c;结果现场拆箱才发现专用堆叠线缆缺货。找商务问了一圈&#xff0c;最快也要三天到货&#xff0c;可第二天下午就要验收&#xff0c;时间卡得非常难受。当时同事半开玩笑说&#xff1a;要不拿普通网…

作者头像 李华
网站建设 2026/9/26 4:35:18

苹果内购支付工具Swift实战:StoreKit 2选型、收据校验与避坑指南

简介&#xff1a;面向iOS开发者的Swift内购支付工具示例工程&#xff0c;基于StoreKit框架实现App内购买&#xff08;IAP&#xff09;完整链路&#xff0c;覆盖消耗品、非消耗品、订阅三类产品&#xff0c;适合需要为应用接入内购功能的移动端开发者查阅与复用。资源压缩包大小…

作者头像 李华