场景:我正在尝试在git下获取我的unix点文件.我必须在(至少)cygwin环境和一些标准的Linux发行版(ubuntu和opensuse)之间工作,并且我有特定于cygwin的文件/代码行.由于我不想检查无用的文件或者不得不处理我的dotfiles中的大量案例,我正在为我的每个环境创建分支.但是我做的大部分编辑对所有环境都是通用的,所以几乎每次我提交时我都需要将该更改传播到我的所有分支.
所以基本上我有几个几乎相同的分支,除了一些提交,并且我需要在所有分支中进行大多数提交.
问题:如果有的话,推荐的git工作流程是什么?或者,对于我的场景,是否有更好的设置(不使用多个分支?)?
[我尝试过采摘樱桃,但这涉及到相当多的工作,更不用说这里的所有重复提交以及保持我的分支同步的噩梦.]
Von*_*onC 16
对于那种特殊情况,在一个分支中存在大量常见文件,并且每个环境只有少数特定的配置文件......我们不会将配置文件存储在Git中.完全没有.
我们存储所述配置文件的模板,加上所有特定的每个环境值,以及能够用正确的值替换模板文件中的变量的脚本(检测当前平台)
这样,我们不需要仅为这些文件创建分支.
另一种管理这类文件(具有平台特定内容)的好方法是通过git属性过滤器驱动程序(另请参阅Pro Git书籍).
过滤器驱动程序由
clean命令和smudge命令组成,其中任何一个都可以不指定.
在指定命令checkout时,smudge命令从其标准输入中提供blob对象,其标准输出用于更新工作树文件.
同样,该clean命令用于在签入时转换worktree文件的内容.
这样,由涂抹引用的脚本(使用Git管理)可以通过特定于平台的值替换所有变量,而干净脚本将其内容恢复为未触及的配置文件.

主要思想仍然是:避免仅为这种并行演化创建分支.
一种方法是为每个环境保留一个分支,以及所有环境通用的"主"分支.每当您对主分支进行更改并希望将其拉入另一个系统时,请执行以下操作:
git pull
git checkout local
git rebase master
Run Code Online (Sandbox Code Playgroud)
这将根据当前状态"master"重写"local"(针对此特定环境)的当前更改.
您需要注意的手动事项是您要提交要进行的更改.如果它是系统本地的,则将其提交到该系统的"本地"分支,否则将其提交给"master"并将其推送到公共存储库.
当然,变基可能会导致您必须手动解决的冲突.此外,如果您选择将本地分支推送到公共存储库,则必须(a)为每个环境选择唯一的名称,以及(b)在重新定位后处理非快进推送.这两个问题都是可以解决的.
| 归档时间: |
|
| 查看次数: |
7630 次 |
| 最近记录: |