代码之家  ›  专栏  ›  技术社区  ›  filippo

需要GIT工作流建议吗

  •  2
  • filippo  · 技术社区  · 16 年前

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

    我的档案;

    正如我所说的,这是一种专有的脚本语言,在代码本身中,您可以找到有关配置(服务器、数据库和其他东西)的标记。听起来很奇怪,我知道,但严格来说

    我还有两种不同的环境: dev prod ,我想它的用途是显而易见的。由于代码的思维方式很奇怪,如果您在 开发 到同一个房间 生产 你会看到:

    产品:

    CodeCode += Code(0)
    Code{1} ...
    CodeConfig = "ConnectionToProducionDB"
    SomeMoreGenericCode.doSomething()
    (...)
    

    而且在 它看起来像:

    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

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

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

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

    我上一次的尝试导致了一个冗长而不实用的工作流程,但我会在这里写出来,这样你就可以了解我的目标。

    1. proj1
    2. 复制 生产 文件夹
    3. $ git checkout -b dev
    4. 配置 设置
    5. 代码/提交开发周期
    6. tmpDevDir
    7. $ git checkout master
    8. 使用WinMerge进行比较 tmpDevDir公司 反对 proj1[master branch]
    9. proj1[主分支]
    10. $ git merge dev
    11. $ git diff HEAD HEAD^ 查看合并结果并还原合并的配置
    12. $ git commit -am 'final commit for the production code'

    好吧。。。不太好。

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

    谢谢,

    1 回复  |  直到 16 年前
        1
  •  4
  •   ax. Clement Herreman    8 年前

    usual solution 是指:

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

    alt text

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

    只是:

    yourCode1.code
    yourCode2.code
    ...
    yourCoden.code
    devValues.txt
    prodValues.txt
    scriptPutValuesInCode.sh
    scriptCleanCodeFromValues.sh
    

    filter "smudged clean"

    *.code  filter=setOrCleanValues
    
    git config --global filter.setOrCleanValues.smudge /path/to/scriptPutValuesInCode.sh
    git config --global filter.setOrCleanValues.clean /path/to/scriptCleanCodeFromValues.sh