Git在开发配置中合并,无需添加历史记录(提交)或暂存文件

时间:2013-11-27 18:26:04

标签: git merge development-environment

假设我有以下文件夹结构:

My Project
    | - <project files>
    | - <project configuration files>

每个开发人员都有不同的项目配置,并希望将这些文件存储在单独的分支上。

然后可以通过执行以下操作将这些配置添加到您正在处理的分支中:

# Get the configurations
git checkout jakesConfigurationFileBranch -- <project configuration files>

# Don't stage these files for commit
git reset -- <project configuration files>

由于我们的项目(我们的项目配置文件,编辑器首选项等)分散了配置文件,因此工作流程不能很好。 IE:

My Project
    | - <project files with configuration files sprinkled throughout>

我真正想要的是在不更改历史记录或暂存文件的情况下合并分支。

git merge --files-Only jakesConfigurationFileBranch

在运行命令之前,树就像这样:

          master
         /
*---*---*
 \
  *--* - jakesConfigurationFiles

树看起来一样:

          master
         /
*---*---*
 \
  *--* - jakesConfigurationFiles

在合并时有一个名为--no-commit的标志,但它会执行快速合并,因此这并不总是有效(并且不会阻止指针被移动)。

3 个答案:

答案 0 :(得分:0)

我的一般建议是保留一个“dev”配置文件,该文件适用于大多数开发人员,然后使用不受版本控制的每个开发人员配置文件或使用环境变量来覆盖它。

答案 1 :(得分:0)

这样做会有效:

git merge --no-ff --no-commit devEnv-Jake 

跟进:

git reset 

清除暂存区域中的文件。


我实际创建了一个别名来执行此操作:

alias jake-mergeDevEnv-git='git merge --no-ff --no-commit devEnv-Jake ; git reset'

答案 2 :(得分:0)

可能对你有用的一件事就是在你的结账后挂钩中使用一个简单的脚本来构建未跟踪的本地化配置(跟踪或未跟踪)每个分支的替换,the hook's simple,以及每个跟踪的{{checkout> { 1}}通过包含特定于分支的内容来构建文件fixmeup.@branch。可以很容易地将其修改为fixmeup而不是git show以获得合并来自回购的效果。

另一种方法是使用过滤器来修复内容,工作方式是使用过滤器属性标记的文件运行所选命令,以便在结帐时以任意方式修复内容并添加。 VonC has a good explanation linked to further good explanations for this