在Git中维护同一源代码树的两个版本的工作流

在Git中维护同一源代码树的两个版本的工作流,git,Git,我们的master是主要分支,它的快照会在每次发布时发送给我们的客户。同时,我们有时会将其部署到我们的登台环境中,这与客户机的生产环境非常不同,因此需要大量分散的代码更改(太多,无法放入配置文件,与客户机无关)。我曾尝试维护一个暂存分支,并使用对主所做的更改对其进行重定,但我总是遇到一些问题,例如,在暂存上开发并将更改发送到主,而不进行通常的暂存特定修改;合并而不是重设基础也不好。目前,我维护了一个补丁文件,每当我想在我们的登台环境中试用时,我都会将其应用到master:然后在继续开发之前撤销它

我们的
master
是主要分支,它的快照会在每次发布时发送给我们的客户。同时,我们有时会将其部署到我们的登台环境中,这与客户机的生产环境非常不同,因此需要大量分散的代码更改(太多,无法放入配置文件,与客户机无关)。我曾尝试维护一个
暂存
分支,并使用对
所做的更改对其进行重定,但我总是遇到一些问题,例如,在
暂存
上开发并将更改发送到
,而不进行通常的暂存特定修改;合并而不是重设基础也不好。目前,我维护了一个补丁文件,每当我想在我们的登台环境中试用时,我都会将其应用到
master
:然后在继续开发之前撤销它


我想知道是否有更好的工作流来支持这样的开发。

如果我正确理解您的工作流,问题的主要来源之一就是在
staging
分支上进行开发

如果
staging
的唯一目标是维护在staging集群上运行所需的更改,那么您可以尝试以下工作流

  • 主机上进行所有开发
  • staging
    的提示作为维护staging集群更改的提交
  • 每当您需要运行暂存测试时,请根据主机重新设置暂存的基础
  • Git(>2.5甚至更早,在contrib文件夹下)包含使用
    workdir
    一次处理多个分支的选项

    Workdir是一种使用单一回购的方式,同时让多个分支机构同时签出

    git-new-workdir project-dir new-workdir branch
    

    此命令允许您同时并排处理多个分支。
    该函数所做的只是创建
    git
    文件夹的浅层副本(在新文件夹中键入tree.git以查看它实际指向的位置),您将看到它指向原始git文件夹

    在新文件夹中,您可以创建新的提交、分支和更多内容,您将在所有
    新workdir
    文件夹中看到它,因为它们共享“相同”的git repo

    演示:(Unix)
  • contrib/workdir
    添加到您的路径中
  • 将执行标志设置为git new workdir
  • 导航到当前的git存储库

    git new-workdir . my_new_path 
    cd my_new_path
    tree .git ( you should see links to the original git repository)
    git checkout -b new_branch
    git branch (your new branch is listed)
    cd original_path
    git branch (the new branch is listed but the current branch is the original branch)
    
  • :-)


    Git(>2.5)包含一个功能,允许您在不使用此脚本的情况下拥有多个工作目录(
    Git checkout--to=$path
    )。

    “我想知道是否有更好的工作流来支持这样的开发。”当然。在分段中尽可能紧密地匹配生产。将所有剩余的(理想情况下最小的)差异(例如数据库密码)放在一个未签入Git的环境文件中。如果登台与生产有很大不同,那么登台还有什么意义呢?我们无法访问客户的生产环境。每次应用的补丁文件已经有300行,不适合标准配置文件;应用更改的示例是允许使用oracle数据库链接的查询构建逻辑的变通方法,这有很多限制…如果我理解正确,要在登台环境中测试某些内容,我需要首先将更改提交到
    ,然后重新基础
    登台
    ,对吗?如果更改错误,那么我必须撤消两个分支上的更改,不是吗?我没有像添加和提交之前那样自由编辑和播放的自由…@AndréRodrigues,如果你只是想尝试一些东西而不提交,那么我会直接在
    staging
    分支上的工作树中进行更改,然后测试这些更改。如果这些更改无效,请丢弃它们。如果它们确实有效,那么就做
    git隐藏;git签出主机;git stash pop
    ,后跟add和commit。然后,您可以按照我在回答中描述的那样,通过对master重新设置基址来更新您的
    staging
    分支。我不知道这个命令。。。我会更深入地检查这个可能性…酷,在v2.7中添加了更多功能,如果你喜欢答案,请随意投票。