Skip to content

Latest commit

 

History

History
51 lines (39 loc) · 2.37 KB

File metadata and controls

51 lines (39 loc) · 2.37 KB

/开头的路径只匹配仓库根目录

/ 开头的路径,只匹配仓库根目录,而 .obsidian/plugins/ 本身就在根目录下,所以“忽略插件”的那条规则其实没起作用

你的配置(节选):

# 忽略插件变动但保留git设置
/.obsidian/plugins/
!.obsidian/plugins/obsidian-git/
!.obsidian/plugins/update-time-on-edit/

关键点:

  • /.obsidian/plugins/ 这一行

    • / 开头表示“从仓库根目录开始匹配”。
    • .obsidian 本身就放在仓库根目录,所以这条其实等价于:
      /.obsidian/plugins/
      也就是“忽略根目录下的 .obsidian/plugins/ 目录”。
  • 下面的 !.obsidian/plugins/obsidian-git/ 等例外规则

    前面那条 /.obsidian/plugins/ 已经把整个 plugins/ 目录忽略了,Git 不会进入这个目录再匹配例外规则
    也就是说:“忽略 plugins 目录”那条规则把整个目录“挡在外面”,例外规则根本没机会生效。 所以从 Git 的角度看,现在的情况大致是:


!开头的为例外

见上,不过多赘述


.git/info/exclude

两台电脑共享同一个仓库,但环境配置不同。直接修改并提交 .gitignore 会导致两台电脑互相覆盖对方的配置,这绝对不是你想要的。

解决方案的核心思想是:.gitignore 只记录公共的忽略规则,而将“私人定制”的规则放在另一个不被同步的文件里。

Git 有一个鲜为人知的特性:.git/info/exclude 文件。它的语法和 .gitignore 完全一样,但它只存在于本地,不会被 Git 追踪,也不会被推送到远端。 操作步骤(在第二台电脑上):

  1. 克隆仓库。
  2. 不要动项目根目录的 .gitignore(保留它作为基础配置)。
  3. 打开隐藏文件 .git/info/exclude(它在你克隆下来的 .git 文件夹里)。
  4. 在里面写上你第二台电脑特有的忽略规则。 示例场景:
  • 电脑 A:忽略 .log 文件,提交了 .gitignore
  • 电脑 B:除了 .log,还想忽略本地特有的 temp/ 文件夹。
    • 你在电脑 B 的 .git/info/exclude 里添加一行 /temp/
    • 结果:电脑 B 忽略了 .log(来自 .gitignore)和 temp/(来自 exclude),且电脑 A 不会受到任何影响。