git忽略同步问题

时间:2017-05-10 12:08:31

标签: git github bitbucket

我的origin/masterorigin/feature/xy branch中有一个文件,实际上是一个配置文件,我删除了该文件。我在本地删除了该文件,并将已删除的更改提交给远程。当我查看bitbucket时,文件已经消失在origin/master

现在我希望文件再次出现,因此我尝试再次创建文件并在将文件名添加到.gitignore的同时将其推送到origin/master

所有这一切的想法是将配置文件放在origin/master中,这样构建服务器可以使用内部设置,但也阻止origin/feature/xy分支覆盖origin/master上的文件。该文件应出现在origin/master上,并在创建的每个新分支中被忽略。这些分支可能在文件中有自己的设置,但它们可能永远不会将其本地更改推送到origin/master

我如何实现这一目标?该文件现已消失..

1 个答案:

答案 0 :(得分:0)

“忽略规则”(例如.gitignore)功能将无法满足您的需求;他们只做一件事:告诉git,如果一个未跟踪的文件与模式匹配,git应该假装它不存在。

它不会阻止路径的合并,也不会阻止分支在路径上看到文件,或类似的东西。如果文件在repo中,即使其路径与ignore规则匹配,ignore规则也不会对该文件执行任何操作。

但如何做你想做的事?

嗯,最完整的解决方案是在源代码管理之外找到配置文件的主页。您可以将文件保留在构建服务器上(如果未备份构建服务器,则可能是第二个位置)并将其从包括master在内的所有分支中删除,然后将其添加到.gitignore,以便没有人意外提交杂散副本。 / p>

唯一的缺点是,如果配置文件必须进化,以便在给定版本的源代码中需要特定版本的配置文件,则会丢失对该关系的跟踪并且必须使用某些其他机制来跟踪这一点。但话说回来,如果这个文件改变的主要方式是使用你的源代码进行改进,那么将它从特征分支中移开可能不是最好的。

另一个(部分)解决方案是使用git hooks来拒绝任何更改文件的master。同样,这只能防止意外(因为你仍然需要一种方法来修改主文件随时间的变化)。它不会使文件在分支上看不到。