Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Git中处理需要在每个分支中更改的文件_Git_Configuration_Merge - Fatal编程技术网

在Git中处理需要在每个分支中更改的文件

在Git中处理需要在每个分支中更改的文件,git,configuration,merge,Git,Configuration,Merge,我在问自己如何处理以下情况 我在两个不同的生产系统上有两个不同的分支,配置xml文件位于一个我想要在Git中使用的文件夹中,并且需要不同。现在我们总是从一个开发分支合并到两个分支中 现在我担心,有人可能会将错误的配置文件合并到一个生产分支中 我应该如何处理这种情况?我不想。Git忽略这些文件并手动处理它们 让我们调用dev、prod1和prod2分支 只要您只合并dev->prod1和dev->prod2,您就不会有任何问题,并且prod1或prod2中对$file.xml的本地更改将保持良好状

我在问自己如何处理以下情况

我在两个不同的生产系统上有两个不同的分支,配置xml文件位于一个我想要在Git中使用的文件夹中,并且需要不同。现在我们总是从一个开发分支合并到两个分支中

现在我担心,有人可能会将错误的配置文件合并到一个生产分支中

我应该如何处理这种情况?我不想。Git忽略这些文件并手动处理它们


让我们调用dev、prod1和prod2分支

只要您只合并dev->prod1和dev->prod2,您就不会有任何问题,并且prod1或prod2中对$file.xml的本地更改将保持良好状态,并且彼此独立

如果有人合并prod1->dev或prod2->dev,您将在某个时候遇到问题。 prod1->prod2和prod2->prod1也是这样


我通常在小团队中工作,只是告诉人们不要以错误的方式进行合并,就是这样。如果你在某个enterprisey公司工作,这些东西需要自动化,你可以想出一些钩子来实现这一点,但我个人认为这太过分了。

我通常将依赖于特定环境的配置文件保存在单独的“contrib”文件夹中。因此,我可以对它们进行版本控制,但我必须将它们复制到预期的位置(手动)。我通常会将“设置”脚本添加到contrib文件夹:

./
  contrib/
          prod1/
                application.config
                prepare.sh
          prod2/
                application.config
                prepare.bat
          team1/
                application.config
                prepare.bat
          team2/
                application.config
                prepare.sh

本例假设生产系统使用不同的操作系统,需要不同的“准备”脚本(用于复制配置文件和执行其他操作)具有不同开发环境的团队在同一个项目上工作。

您可以在repo上添加一个
更新
挂钩,您不希望其他分支的更改泄漏到
prod1
prod2
。在
更新
钩子中,您可以检查哪些路径受到推送的影响,如果不想触碰这些路径,可以拒绝推送

该解决方案实际上将阻止对这些xml文件的任何修改,我想这并不是您想要的(如果文件处于版本控制之下,您肯定希望能够创建它们的新版本)。为了克服此限制,您可以授予一个用户将更改推送到这些文件的权限


Git书籍包含了如何在Git repo上创建
update
hook的详细说明,包括如何获取用户名(对于SSH和其他类型的访问)。查看链接,了解有关如何实际编写钩子的更多信息。请记住,钩子只是可执行文件(或脚本),因此您可以用自己选择的语言编写它们。

如果我想手动处理它们,我可以这样做,但我希望它们是git。所以如果文件更新了,我不能忘记上传它们…@spankmaster79这是你应该做的。否则我不明白你想从git得到什么。您需要不同的文件,但是git很擅长合并不同之处。您希望从git获得什么样的帮助?@spankmaster79-可能还不够清楚:contrib文件夹处于版本控制之下。所有配置文件和脚本的“实例”都已签入。除了告诉团队中的每个人之外,是否有其他方法阻止合并方向?我猜在branchesgit上的写权限实际上是不存在的。如果你能找到一个克隆人,你可以用它做任何你想做的事。您可以提供一些钩子来阻止协作用户发生意外,而一些存储库管理软件(如gitolite)可以让您控制可以推送到中央存储库的内容。