238 lines
5.3 KiB
Markdown
238 lines
5.3 KiB
Markdown
# 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 会无法刷新仓库设置,也可能无法提交或推送。
|
||
|