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