【问题标题】:Ignore Changes to a file in Github among all forks, without deleting the file from repository忽略所有分支中对 Github 中文件的更改,而不从存储库中删除文件
【发布时间】:2017-07-10 20:19:42
【问题描述】:

在我的 github 存储库中有一个 config/auth.js 文件(其中有很多分支)我想忽略对该文件的任何进一步更改。搜索后,我发现了以下三种方法,但它们都不适合我:
1. git rm --chaced
这将删除文件。
2. git update-index --assume-unchanged config/auth.js
这在我的机器上工作,但是每个贡献者也必须在他的 fork 上运行这个命令(我不希望他们这样做)。
3. git update-index --skip-worktree config/auth.js
与案例 2 相同的问题
基本上我不希望其他人知道发生了什么,并且当同步他们的 fork(rebase) 时,文件中的更改会被自动忽略。

【问题讨论】:

  • 直接答案是否定的。仅由 github 管理的文件由 git 控制。

标签: git github version-control gitignore


【解决方案1】:

按照您的要求,任何解决方案都会有的“幕后魔力”,随时可能出错;不推荐。

问题是,如果您想忽略他们对给定文件的更改,但又不希望他们看到您所做的任何事情的影响,那么您必然需要查看一组不同的提交比他们。例如,如果您有

x --- x --- x <--(master)

他们克隆了,所以他们有

x --- x --- x <--(origin/master)(master)

然后他们进行了一些更改,包括对配置的编辑,所以他们有

x --- x --- x <--(origin/master)
             \
              O <--(master)

让您的仓库“忽略”对配置文件的更改意味着您最终会得到

x --- x --- x --- O' <--(master)

在合并他们的更改之后。 O' 必然是与 O 不同的提交。客户希望在origin/master 看到O,如果您向他们展示origin/master 现在在O' 的“现实”,这将是非常具有破坏性的。

所以为了让事情保持整洁,你必须存储 O 并向分支表示 master 的上游指向 O。鉴于您有多个 fork,每个 fork 都可能对您的配置文件有自己的更改,您必须:

1) 为每个分叉创建一个“桥”存储库,从而更改他们用来寻址您的远程 URL,

2) 在您的原始存储库中为每个分支维护一组单独的分支,要求分支配置适当的 refspec。

所以真正让这种改变“隐形”是不可能的。假设你想要这两个选项的“更轻的重量”——我相信会是(2)——你最终会得到类似

x --- x --- x --- O <--(master)
             \
              O' <--(fork-a/master)

现在您必须使用钩子来自动对masterfork-a/master 之间的更改进行变基(同时从变基中过滤出对配置文件的更改)。我在那里看到的只有灾难的机会。

另一个选项(bridge repos)仍然看起来很像上面的。考虑到你实际上有很多分叉,它只是让事情不会在任何单个 repo 中看起来更糟。我猜它构建了更改在分叉之间的流动方式,但是您必须在所有这些存储库之间进行协调。

我看不出其中任何一个真正起作用。

【讨论】:

    【解决方案2】:
    git rm --cached 
    

    这将从索引中取消暂存文件。它对存储库没有持久影响。

    git update-index --assume-unchanged config/auth.js
    git update-index --skip-worktree config/auth.js
    

    正如您所说,这些适用于您的本地索引,但不共享(就像第一个选项一样)。

    我认为您需要做的就是在存储库中添加.gitignore 的路径,然后提交.gitignore

    由于.gitignore 只是告诉 Git 在执行添加/提交时忽略路径,因此在添加/提交期间人们可能对其本地副本所做的任何更改都将被忽略,您的副本也是如此。因此,不应对文件进行任何更改。

    同时,.gitignore 不是擦除文件现有历史记录的魔杖。所以它的当前状态应该保留在那里,它将保留在您的历史记录和 git-log 中。您将无法再更改它(除非它已从 .gitignore 中删除)。

    【讨论】:

      猜你喜欢
      • 2011-12-15
      • 2014-01-04
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      相关资源
      最近更新 更多