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