我可以在项目中对dotfiles进行版本化而不将其历史记录合并到主线中吗?

时间:2012-06-12 21:52:48

标签: git branch gitignore

我确定这个标题相当模糊。我想知道git中是否有某种方式告诉它你想要某个文件在分支之间移动时使用不同版本的文件,但总体来说是从存储库中.gitignored。

这是我的场景:我有一个我用git控制的Flash Builder项目(对于Flex应用程序)。 Flash Builder项目中的Flex应用程序会创建三个文件:.actionScriptProperties.flexProperties.project。这些文件包含许多本地文件系统引用(源文件夹,输出文件夹等),所以我们自然会从我们的仓库中识别它们。

今天,我想在我的项目中使用一个新库,所以我创建了一个名为lib的独立git分支,删除了旧版本的库并放入了新版本。不幸的是,这个Flex库信息存储在这三个点文件中的一个(不确定哪个随便)。因此,当我不得不在之前切换回第一个分支(master)时,我收到编译错误,因为master现在已链接到新库(这基本上否定了我为什么lib首先)。

所以我想知道是否有任何方法让我继续.gitignore这些文件(所以我的其他开发人员没有得到它们),但告诉git我希望它使用某种本地“分支版本”所以我可以在不同的分支机构本地使用不同版本的文件。

1 个答案:

答案 0 :(得分:1)

TL; DR

文件被忽略或者不被忽略。但是,您可以将文件提交到分支,即使它们被忽略;你只需要确保你不要在错误的分支上再次提交它们。

选项

  1. 如果您想在git下维护修订,但是在单独的项目中,您可以使用子模块或子树合并。
  2. 使用RCS对Git忽略的文件进行版本控制。小心git-clean;如果您删除 *,v 文件,则会丢失RCS修订历史记录。
  3. 保留一个除了自定义文件之外的分支,并定期将忽略的文件合并到工作树中
  4. 选项3,详细信息

    忽略主分支上的文件。

    git checkout master
    cat << EOF >> .gitignore
    .actionScriptProperties
    .flexProperties
    .project
    EOF
    git add .gitignore
    git commit .gitignore
    

    创建一个空分支来保存配置文件。

    git symbolic-ref HEAD refs/heads/flexconfig
    rm .git/index 
    git clean -fdx
    touch .actionScriptProperties .flexProperties .project
    git add .
    git commit
    

    将被忽略的文件合并到主分支中,但忽略它们。

    git checkout master
    git merge --no-ff flexconfig
    

    如果此时运行git status,它将显示一个干净的工作树,但实际上您的工作树中将包含Flex点文件。只是不要使用git add .或类似内容,因为它会覆盖您的.gitignore设置。