gpt4 book ai didi

git - 需要 GIT 工作流程建议

转载 作者:太空狗 更新时间:2023-10-29 14:40:51 25 4
gpt4 key购买 nike

过去几周我一直在研究 GIT,试图控制我团队的代码。
不幸的是,我们使用的代码是一种专有语言,具有一些特性,这使我无法找到足够实用的工作流程来实现。不过,我可能并不了解 GIT 的所有功能,所以我向你们寻求建议。我将这篇文章分为三部分:1)我的文件怎么样; 2)到目前为止我们已经想到的工作流程; 3)我认为 future 的选择。

然后是我的文件;

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

我也有两种不同的环境:devprod ,我猜它的用途很明显。如果您比较 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]

一段时间后,编码和测试完成,是时候 merge 到生产中了。这就是问题开始的时候。

一个简单的 git merge dev (来自我的主分支)将大部分代码 merge ,但配置也将转移到主分支,因为来自 GIT 的 POV,这是代码本身的更新之一。虽然在这个简短的代码中它不会成为问题,但在实际情况下,我可能已经重新配置了十或二十个源,并且一次回滚一个并不是一件令人愉快(也不可靠)的任务。

当然,当使用分支时,我确实希望能够 merge 我的代码以保留我的提交历史和评论。我只需要以更定制的方式完成它......

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

例如, *.xml merge=Unset进入我的 .gitattributes文件。或自定义 merge 驱动程序到 ~/.gitconfig 试图导致自动 merge 失败(虽然不确定我是否正确)。

我认为可能的解决方案;

正如我所说,我可能并不了解 GIT 的所有功能,所以我的选择受我所知道的那些限制。我很欣赏你的创新;)

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

我的最后一次尝试导致了一个冗长且不切实际的工作流程,但我会在这里写下来,以便您了解我的目标。
  • 初始化 repo proj1
  • 复制 prod文件
  • 首次添加/提交
  • $ git checkout -b dev
  • 配置dev设置
  • 代码/提交开发周期
  • 将开发文件复制到 tmpDevDir
  • $ git checkout master
  • 使用 WinMerge 比较 tmpDevDir反对proj1[master branch]并仅应用所需的更改
  • 提交 proj1[master branch]
  • $ git merge dev
  • 在需要的地方 merge 冲突
  • $ git diff HEAD HEAD^查看 merge 结果并恢复 merge 的配置
  • $ git commit -am 'final commit for the production code'

  • 而且……不好。

    有人对更实用的工作流程或其他命令有帮助吗?

    多谢,

    F。

    最佳答案

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

    usual solution是:

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

  • alt text

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

    只是:
    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

    关于git - 需要 GIT 工作流程建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3091581/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com