更新Git笔记和本地忽略文件
This commit is contained in:
+112
@@ -42,6 +42,9 @@ https://github.com/Ki5ter/Obsidian.git
|
||||
`fetch 获取`:
|
||||
只下载远程仓库信息,不自动合并。
|
||||
|
||||
`origin/master`:
|
||||
本地记录的远端 `origin` 上 `master` 分支的位置。它不是远端本身,而是本地上次获取到的远端状态。
|
||||
|
||||
## 基本工作流程
|
||||
|
||||
1. 打开工作区,也就是要纳入版本控制的文件夹。
|
||||
@@ -94,6 +97,36 @@ git push
|
||||
git pull
|
||||
```
|
||||
|
||||
## origin、master 和 push
|
||||
|
||||
`origin` 是远端仓库地址的别名。它保存在本地 Git 配置里,不是 GitHub 天生的名字。
|
||||
|
||||
```powershell
|
||||
git remote add origin https://github.com/Ki5ter/Obsidian.git
|
||||
```
|
||||
|
||||
如果需要推送到多个远端,可以添加多个别名:
|
||||
|
||||
```powershell
|
||||
git remote add backup https://example.com/backup.git
|
||||
```
|
||||
|
||||
`master` 是分支名,也可以叫 `main`、`dev`、`notes`。分支可以理解为一个指向最新提交的指针。
|
||||
|
||||
```powershell
|
||||
git push origin master
|
||||
```
|
||||
|
||||
这条命令表示把本地 `master` 分支推送到 `origin` 远端。它不会自动推送其他本地分支。
|
||||
|
||||
第一次推送时常用:
|
||||
|
||||
```powershell
|
||||
git push -u origin master
|
||||
```
|
||||
|
||||
`-u` 会设置上游关系。之后在本地 `master` 分支上执行 `git push` 或 `git pull`,Git 会自动使用 `origin/master`。
|
||||
|
||||
## 常用检查命令
|
||||
|
||||
查看当前仓库状态:
|
||||
@@ -126,6 +159,73 @@ git remote -v
|
||||
git log --oneline --decorate -5
|
||||
```
|
||||
|
||||
查看某个路径是否被 ignore 命中:
|
||||
|
||||
```powershell
|
||||
git check-ignore -v --no-index -- "密码本/任意测试文件.md"
|
||||
```
|
||||
|
||||
查看某个路径是否还被 Git 跟踪:
|
||||
|
||||
```powershell
|
||||
git ls-files -- "密码本" "服务器迁移"
|
||||
```
|
||||
|
||||
## .gitignore 的作用
|
||||
|
||||
`.gitignore` 用来告诉 Git:哪些未被跟踪的新文件不要加入版本控制。
|
||||
|
||||
推荐把只在仓库根目录生效的目录写成:
|
||||
|
||||
```gitignore
|
||||
/密码本/
|
||||
/服务器迁移/
|
||||
```
|
||||
|
||||
开头的 `/` 表示仓库根目录,结尾的 `/` 表示目录。
|
||||
|
||||
如果只写:
|
||||
|
||||
```gitignore
|
||||
密码本
|
||||
```
|
||||
|
||||
也能生效,但它会匹配仓库中任何位置名为 `密码本` 的文件或目录,不如 `/密码本/` 精确。
|
||||
|
||||
已经被 Git 跟踪过的文件不会因为加入 `.gitignore` 自动消失。需要执行:
|
||||
|
||||
```powershell
|
||||
git rm --cached -r -- "目录或文件名"
|
||||
```
|
||||
|
||||
这会从 Git 跟踪列表中移除文件,但保留本地实际文件。
|
||||
|
||||
## 清理历史中的敏感内容
|
||||
|
||||
如果敏感文件已经推送到远程仓库,只在最新提交中删除还不够,旧提交里仍然可能看到。
|
||||
|
||||
清理历史的思路是:重写本地提交历史,让每个相关提交都不再包含敏感路径,然后强制替换远端分支。
|
||||
|
||||
示例:
|
||||
|
||||
```powershell
|
||||
git filter-repo --path "密码本/" --path "服务器迁移/" --invert-paths
|
||||
git fetch origin
|
||||
git push --force-with-lease origin master
|
||||
```
|
||||
|
||||
`git filter-repo` 不是 Git 自带命令,需要单独安装。`--invert-paths` 表示反转路径选择:保留其他所有路径,移除 `--path` 指定的路径。
|
||||
|
||||
普通 `git push` 只允许向前追加提交。重写历史后,本地提交 ID 已经变化,远端会拒绝普通 push,因此需要:
|
||||
|
||||
```powershell
|
||||
git push --force-with-lease origin master
|
||||
```
|
||||
|
||||
`--force-with-lease` 比 `--force` 更安全。它会检查远端分支是否仍停在本地记录的位置;如果别人已经推送了新提交,它会拒绝覆盖。
|
||||
|
||||
敏感信息如果已经泄露过,清理 Git 历史只是补救之一。密码、Recovery Key、Token 等应视为已经泄露,优先更换或吊销。
|
||||
|
||||
## Obsidian 笔记库使用 Git 的注意事项
|
||||
|
||||
Obsidian 笔记库适合用 Git 备份,因为大多数内容都是 Markdown 文本文件。
|
||||
@@ -148,6 +248,18 @@ Obsidian 笔记库适合用 Git 备份,因为大多数内容都是 Markdown
|
||||
特别大的二进制文件
|
||||
```
|
||||
|
||||
建议忽略:
|
||||
|
||||
```gitignore
|
||||
/.obsidian/workspace*.json
|
||||
/.obsidian/cache/
|
||||
/.vs/
|
||||
/密码本/
|
||||
/服务器迁移/
|
||||
```
|
||||
|
||||
`workspace*.json` 是 Obsidian 的窗口和布局状态,通常和具体电脑有关。`.vs/` 是 Visual Studio 本地缓存,也不适合提交。
|
||||
|
||||
如果笔记库在 OneDrive 里,要注意 `.git` 目录必须真实保留在本机。否则 Git 或 Visual Studio 可能会报错,例如:
|
||||
|
||||
```text
|
||||
|
||||
Reference in New Issue
Block a user