【问题标题】:How to make sure others people cannot edit my git notes?如何确保其他人无法编辑我的 git 笔记?
【发布时间】:2012-11-01 09:29:46
【问题描述】:

我想使用 git notes 来做发行说明,但我不确定其他人是否使用相同的 ref 更改了我的 git 说明。

顺便说一句,chmod 444 .git/refs/notes/abc_test.git/logs/refs/notes/abc_test 不起作用。

【问题讨论】:

    标签: git readonly


    【解决方案1】:

    我不认为你真的可以保护已发布的 git 笔记。

    您可以将它们放在明确的namespace 中,如in here 所述:

    我认为对于“典型用法”,无论如何都要将其他人的笔记存储在不同的地方,例如我将 Thomas 的列表笔记存储在 refs/remotes/trast/notes/ 中,这样它们就不会干扰我自己的笔记。

    如果在同一个命名空间,那么they can be merged:

    git checkout refs/notes/commits
    git fetch origin refs/notes/commits
    git merge FETCH_HEAD
    git update-ref refs/notes/commits HEAD
    git checkout master
    

    但这会改变他们的内容。

    【讨论】:

    • 注意:此脚本 (codereview.stackexchange.com/questions/15380/…) 在验证 git notes 特定内容时添加了某种类型,并充当操作 git notes 的包装器。
    • 感谢您的快速回复。我可以用git把一些repository设置成只读,为什么不能把一些git notes设置成只读...如果发布的git notes不能被保护,那就不安全了...
    • @Flyakite 因为一旦您在本地存储库中获取了这些注释,它们就可以修改和退回。如果你的远程仓库有 Gitoliote V3,那么你可以使用 VREFS 拒绝来自其他人的笔记。见stackoverflow.com/a/10888358/6309
    • @Flyakite 您所说的只读是在回购级别(所有回购都是只读的)。我们谈论的是 git repo 的特定部分,而 git 本身不会阻止 repo 的一部分:如果你可以推送到 repo,你可以推送任何东西。
    【解决方案2】:

    Git man page 详细说明了如何删除敏感数据,并声明您可以

    将 [文件] 添加到 .gitignore 以确保它不会意外重新提交

    由于 Git 使用的分布式模型,我认为不可能对文件进行版本化,但对其他人不可见。将文件复制到另一个用户的存储库后,将文件设置为只读将不会产生预期的效果。

    这能回答你的问题吗?

    【讨论】:

    • 对于git笔记的特定命名空间,比如说xxx,我应该将哪个路径添加到.gitignore?下面不起作用 $ cat .gitignore /.git/refs/notes/xxx /.git/logs/refs/notes/xxx
    • 您是否尝试过省略起始斜线 (/)?毕竟,它指向文件系统的根目录,根据gitignore man page,特定 .gitignore 文件中的文件名是相对于该文件的位置的。据我了解,您还可以将 .gitignore 放在包含注释的目录中。如果要添加整个目录,请在示例中让模式以 / 结尾,您可以在包含“xxx/”(不带引号)的注释目录中添加一个 .gitignore 文件。
    • 抱歉打错了,.git/refs/notes/xxx 应该是这样的。 .gitignore 将忽略git add something 时的文件。虽然 git notes 不需要手动提交,但运行 git push origin refs/notes/xxx 就可以了。因此,.gitignore 可能对此无济于事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 2022-08-04
    相关资源
    最近更新 更多