忽略对所有分支中Github中的文件的更改,而不从存储库中删除该文件

时间:2017-07-10 20:19:43

标签: git github version-control gitignore

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

2 个答案:

答案 0 :(得分:0)

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中移除)。

答案 1 :(得分:0)

任何做你所要求的解决方案都会有一个 ton 的“幕后魔术”,这在任何时候都可能出错;我不推荐它。

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

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

他们克隆了,所以他们有

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

然后他们做了一些更改,包括编辑配置,所以他们有

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

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

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

纳入其变更后。 O' 必须来自O的明确提交。客户希望在O看到origin/master,如果您向他们展示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之间的变更的重新定位(同时从rebase中过滤对配置文件的更改)。我只看到灾难的机会。

另一个选项(桥接回购)看起来仍然像上面那样。考虑到你实际上有很多分叉,它只是让任何单个回购中的东西看起来更糟糕。它构造了我猜的变化如何在叉子之间流动,但是你必须在所有那些回购之间进行协调。

我看不出其中任何一个真的有效。