【问题标题】:How to make changes that only i can see?如何进行只有我才能看到的更改?
【发布时间】:2011-02-14 12:53:30
【问题描述】:

例如我想修改登录页面,所以它会自动记录我。

我希望这些更改在我的开发站上起作用,并且在推送中不可见。如果我在一个分支上完成它,那么我将不得不在每次推送之前以某种方式取消合并该更改。

git 支持吗?

【问题讨论】:

    标签: git local


    【解决方案1】:

    如果你至少有 Git 1.7.0,你可能会喜欢这个“管道”:

    git update-index --skip-worktree -- path
    

    来自git update-index manpage under “Skip-worktree bit”

    Skip-worktree 位可以定义在一个(长)句子中:阅读时 一个条目,如果它被标记为 skip-worktree,那么 Git 会假装它 工作目录版本是最新的并读取索引版本 而是。

    详细来说,“读取”意味着检查文件是否存在,读取文件 属性或文件内容。工作目录版本可能是 存在或不存在。

    “skip-worktree 位”是sparse checkout mechanism documented in the git read-tree manpage` 的基础。


    在旧版本的 Git (git update-index --assume-unchanged) 中有一个相关的“位”,但不应将其用于 OP 的目的。 It seems like it might be useful for the OP's situation,但是Git's maintainer has said that its contract (the “promise”) makes it unsuitable for such purposes

    【讨论】:

    • 我猜第二行应该是:git update-index --skip-worktree -- path?
    【解决方案2】:

    为什么不使用设置gitattributes filter driver

    每次签出您的目录时,如果满足特定条件(如“这是或不是您的开发站”,它将通过 smudge 步骤中的脚本检查该文件(并且仅该文件) ) 并将相应地修改内容。
    clean 步骤将恢复其内容或至少忽略该特定修改。

    【讨论】:

      【解决方案3】:

      我不确定我是否理解这个问题:你为什么不能直接分支?拥有master 您的主要公共分支,并继续在master 上重新设置您的私有分支(或将主分支与您的私有分支合并)。永远不要将机会带到 master,只将来自 master 的更改带到您的私有分支。

      如果您碰巧在您的私有分支上进行了更改并希望与master 共享,那么将更改挑选到 master 上是没有问题的。

      【讨论】:

      • 但是这样我总是要记住不包括那个改变(我迟早会忘记它)。有没有办法编写脚本来忽略合并中的变化?
      • 如果您真的想阻止自己暴露这些更改,那么您可以在其他地方克隆您的存储库,但不要在该克隆中添加任何指向公共存储库的远程。然后,您在该存储库中所做的任何更改都会保留在那里:您无法推送到远程。当然,如果您从该私有克隆中提取这些更改,您仍然可以公开这些更改,但这需要与您通常所做的不同类型的显式行为。您通常将本地存储库推送到公共存储库,而不是从本地克隆到其他本地存储库。
      猜你喜欢
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-25
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多