需要GIT工作流建议吗

需要GIT工作流建议吗,git,merge,workflow,Git,Merge,Workflow,在过去的几周里,我一直在学习GIT,试图控制我团队的代码。 不幸的是,我们使用的代码是一种具有某些特性的专有语言,这使我无法找到一个足够实用的工作流来实现。不过,我可能还不知道GIT的所有功能,所以我请你们提出建议。我将把这篇文章分成三部分:1)我的档案怎么样;2) 到目前为止,我们已经确定的工作流程;3) 我对未来的选择 我的档案 正如我所说的,这是一种专有的脚本语言,在代码本身中,您可以找到有关配置(服务器、数据库和其他东西)的标记。我知道这听起来可能很奇怪,但从技术上讲,这段代码是一个复杂

在过去的几周里,我一直在学习GIT,试图控制我团队的代码。 不幸的是,我们使用的代码是一种具有某些特性的专有语言,这使我无法找到一个足够实用的工作流来实现。不过,我可能还不知道GIT的所有功能,所以我请你们提出建议。我将把这篇文章分成三部分:1)我的档案怎么样;2) 到目前为止,我们已经确定的工作流程;3) 我对未来的选择

我的档案

正如我所说的,这是一种专有的脚本语言,在代码本身中,您可以找到有关配置(服务器、数据库和其他东西)的标记。我知道这听起来可能很奇怪,但从技术上讲,这段代码是一个复杂的配置文件。好吧,这是不能改变的,现在让我们离开它吧

我还有两种不同的环境:
dev
prod
,我想它的用途是显而易见的。由于代码的思维方式很奇怪,如果您将
dev
中的脚本与
prod
中的脚本进行比较,您将看到:

产品:

CodeCode += Code(0)
Code{1} ...
CodeConfig = "ConnectionToProducionDB"
SomeMoreGenericCode.doSomething()
(...)
dev中,它看起来像:

CodeCode += Code(0)
Code{1} ...
CodeConfig = "GoToSomeDevDB"
SomeMoreGenericCode.doSomething()
(...)
那就是关于文件的问题

现在,已经计算出了什么

乍一看,对我来说,这似乎是一个经典的情况,所以我做了

[create a folder and init it]
[copy my code from production and add/commit it]
$ git checkout -b dev
[change these lines with 'CodeConfig' to the dev settings]
[go happy coding and commiting]
过了一段时间,编码和测试就完成了,是时候合并到生产环境中了。这就是问题的开始

一个简单的
git merge dev
(来自我的主分支)可以合并代码,但是配置也会传输到主分支,就像从git的POV一样,这是代码本身的更新之一。虽然在这段简短的代码中,这不会是一个问题,但在实际情况中,我可能重新配置了十个或二十个源代码,而每次回滚一个源代码并不是一项非常愉快(也不可靠)的任务

当然,当使用分支时,我确实希望能够合并我的代码,以便保留我的提交历史记录和注释。我只需要它是在一个更定制的方式做

我尝试了几种不同的方法来解决这个问题,但没有成功。看来GIT的合并对我来说太聪明了:(

例如,
*.xml merge=Unset
到我的
.gittributes
文件中。或者一个自定义的合并驱动程序到~/.gitconfig中,试图导致自动合并失败(但不确定是否正确)

我认为可能的解决办法

正如我所说的,我可能不知道GIT的所有功能,因此我的选择受我所知道的功能的限制。我感谢您的创新;)

我认为最简单的方法是,如果我可以禁用任何自动合并,然后全部手动完成(代码不是那么大,我无论如何都要研究它)。之后,我将创建一个简单的合并驱动程序,将所有代码更改(不仅仅是冲突)传递给WinMerge或Kdiff3之类的东西,在那里我可以完成工作。不幸的是,我还没有做到这一点

我上一次的尝试导致了一个冗长而不实用的工作流程,但我将在这里写下它,以便您了解我的目标

  • 初始回购
    proj1
  • 复制
    prod
    文件
  • 首次添加/提交
  • $git checkout-b dev
  • 配置
    dev
    设置
  • 代码/提交开发周期
  • 将开发文件复制到
    tmpDevDir
  • $git签出主机
  • 使用WinMerge将
    tmpDevDir
    proj1[主分支]
    进行比较,并仅应用所需的更改
  • 提交
    proj1[主分支]
  • $git合并开发
  • 在需要时合并冲突
  • $git diff HEAD^
    查看合并结果并还原合并的配置
  • $git commit-am“生产代码的最终提交”
  • 而且。。。不太好

    有没有人能想出更实用的工作流或其他命令来帮助解决这个问题

    非常感谢

    f、

    这是一种典型的“配置文件”情况(即使您的文件不是完全的配置文件)

    目的是:

    • 在代码中只输入变量名
    • 在各自的文件中提取特定于每个环境的值
    • 版本能够生成实际代码的脚本(根据当前环境,变量名已替换为其值的脚本)
    • 设置a(请参阅)以自动执行变量替换(意味着不创建“新文件”:只有当前代码在
      git checkout
      --变量替换为值--,
      git commit
      --值替换为变量,如果值已被修改,则将其放回单独的配置文件中)

    这样,您就不必仅仅因为在某些文件中有单独的值而创建单独的分支。
    没有复杂的合并、分支之间的复制等

    只是:


    谢谢嗯,这比我想象的要复杂一点,但我应该这么做。我会试试看,告诉你是怎么回事。尽管如此,我还是想到了一件事:我是否可以告诉GIT如何合并二进制文件?比如说。。我有一个OpenOfficeMerger.exe,能够与OO的文件进行三种方式的合并。。。我可以在任何地方定义它吗?科鲁斯这是我编造的,但如果我能使用自定义合并。。好。。这将是一个解决方法:)谢谢,f.@flpgdt您可以使用简单的合并驱动程序()或更复杂的合并驱动程序()。几乎在那里,使用驱动程序的想法似乎比我需要的更好(尽管我同意字符串扩展要优雅得多)。我已经添加了一个更新的问题,感谢您的想法:)谢谢@flpgdt:似乎最好是回滚您的编辑并将“合并驱动程序”作为单独的问题:现在我的答案与您的问题无关!;)
    yourCode1.code
    yourCode2.code
    ...
    yourCoden.code
    devValues.txt
    prodValues.txt
    scriptPutValuesInCode.sh
    scriptCleanCodeFromValues.sh
    
    *.code  filter=setOrCleanValues
    
    git config --global filter.setOrCleanValues.smudge /path/to/scriptPutValuesInCode.sh
    git config --global filter.setOrCleanValues.clean /path/to/scriptCleanCodeFromValues.sh