5.3 KiB
Visual Studio 中使用 Git
这篇记录 Visual Studio 里使用 Git 管理 Obsidian 笔记库的流程。
当前笔记库路径:
E:\Obsidian\OneDrive\Apps\remotely-save\MyNotes
GitHub 远程仓库:
https://github.com/Ki5ter/Obsidian.git
VS 里的几个设置不要混淆
默认位置 Default location:
不是当前正在工作的仓库路径。它只是 Visual Studio 以后 clone 新仓库时默认放到哪里。
推荐设置成类似:
E:\GitRepos
不推荐设置成:
E:\Obsidian\OneDrive\Apps\remotely-save\MyNotes
原因是 MyNotes 本身就是一个仓库,不应该再作为所有新仓库的默认存放目录。
Git 全局配置 Git Global Config:
影响电脑上所有 Git 仓库,比如用户名、邮箱、全局代理。
Git 仓库配置 Git Repository Config:
只影响当前打开的这个仓库,比如当前仓库的 origin 地址。
远程库 Remotes:
配置当前本地仓库对应的远程仓库地址。常见写法:
Name: origin
URL: https://github.com/Ki5ter/Obsidian.git
第一次使用的正确流程
- 在资源管理器中找到笔记库文件夹:
E:\Obsidian\OneDrive\Apps\remotely-save\MyNotes
- 如果笔记库在 OneDrive 里,先右键文件夹,选择:
始终保留在此设备上
- 用 Visual Studio 打开文件夹:
文件 -> 打开 -> 文件夹
-
打开
Git 更改窗口。 -
如果还不是 Git 仓库,选择创建 Git 仓库,或者用命令:
git -C "E:\Obsidian\OneDrive\Apps\remotely-save\MyNotes" init
- 在当前仓库的远程库里添加:
Name: origin
URL: https://github.com/Ki5ter/Obsidian.git
- 在
Git 更改窗口输入提交信息,例如:
Initial Obsidian notes backup
-
点击
全部提交。 -
点击
推送。
提交和推送的区别
全部提交:
只是把改动提交到本地仓库。提交成功后,GitHub 上还不会有变化。
推送:
把本地提交上传到 GitHub 远程仓库。
如果 VS 显示:
2 传出
意思是本地有 2 个 commit 还没有推送到远程仓库。
本地分支名 master 和 main
有些仓库默认分支叫 master,GitHub 新仓库常见默认分支叫 main。
如果本地当前是 master,可以直接推送:
git -C "E:\Obsidian\OneDrive\Apps\remotely-save\MyNotes" push -u origin master
如果想改成 main:
git -C "E:\Obsidian\OneDrive\Apps\remotely-save\MyNotes" branch -M main
git -C "E:\Obsidian\OneDrive\Apps\remotely-save\MyNotes" push -u origin main
Clash Verge 代理问题
如果推送时报错:
Failed to connect to 127.0.0.1 port 10809
说明 Git 被配置成使用 127.0.0.1:10809 代理,但 Clash Verge 没有在这个端口提供服务。
当前 Clash Verge 配置中常见端口:
mixed-port: 7897
socks-port: 7898
port: 7899
推荐让 Git 使用 mixed-port:
git config --global http.proxy http://127.0.0.1:7897
git config --global https.proxy http://127.0.0.1:7897
git -C "E:\Obsidian\OneDrive\Apps\remotely-save\MyNotes" config http.proxy http://127.0.0.1:7897
git -C "E:\Obsidian\OneDrive\Apps\remotely-save\MyNotes" config https.proxy http://127.0.0.1:7897
然后再推送:
git -C "E:\Obsidian\OneDrive\Apps\remotely-save\MyNotes" push -u origin master
或者回 Visual Studio 里点击 推送。
如果不想让 Git 走代理,可以清除代理:
git config --global --unset http.proxy
git config --global --unset https.proxy
git -C "E:\Obsidian\OneDrive\Apps\remotely-save\MyNotes" config --unset http.proxy
git -C "E:\Obsidian\OneDrive\Apps\remotely-save\MyNotes" config --unset https.proxy
TUN 虚拟网卡模式
TUN 或虚拟网卡模式可以让更多系统流量进入代理,理论上也可能让 Git 不需要单独设置代理。
但它不是解决 Git 推送问题的第一选择,因为它会涉及管理员权限、DNS、路由和规则匹配。
当前场景更推荐:
Clash Verge 正常运行
Git 的 http.proxy / https.proxy 指向 Clash Verge 的 mixed-port
VS 中正常点击推送
常见排查命令
查看当前仓库状态:
git -C "E:\Obsidian\OneDrive\Apps\remotely-save\MyNotes" status --short --branch
查看远程仓库:
git -C "E:\Obsidian\OneDrive\Apps\remotely-save\MyNotes" remote -v
查看分支:
git -C "E:\Obsidian\OneDrive\Apps\remotely-save\MyNotes" branch -vv
查看最近提交:
git -C "E:\Obsidian\OneDrive\Apps\remotely-save\MyNotes" log --oneline --decorate -5
查看 Git 代理:
git config --global --get-regexp "http.*proxy|https.*proxy"
git -C "E:\Obsidian\OneDrive\Apps\remotely-save\MyNotes" config --get-regexp "http.*proxy|https.*proxy"
OneDrive 注意事项
如果出现下面这些错误:
not a git repository
Permission denied
The cloud file provider is not running
unable to access .git/info/exclude
优先检查 OneDrive 是否正在运行,以及笔记库是否已经设置为:
始终保留在此设备上
Git 仓库里的 .git 目录不要只存在云端占位。.git 目录读不到时,Visual Studio 会无法刷新仓库设置,也可能无法提交或推送。